Sürüm: 1.4.9Bu dokümantasyon Spitfire 1.4.9 içindir.
Altyapı izleme — veritabanları ve cache
Altyapı izleme sayfası veritabanı, kuyruk, arama, cache ve web sunucularınızın metriklerini bir Tower üzerinden toplar. Her kaynak hazır bir dashboard ve basit eşik bulgularıyla gelir. Bu sayfa PostgreSQL, MySQL, SQL Server, Oracle (Beta), InfluxDB (Beta), ClickHouse (Beta), MongoDB, CouchDB, Redis, Couchbase (Beta) ve Cassandra'yı (Beta) anlatır. Diğerleri: kuyruklar, arama, web sunucuları, bulut ve Kubernetes.
Sayfa: Altyapı izleme Spitfire'da: /data-sources (yalnız kurulum yöneticisi).
Gerekenler
- En az bir Tower kurulu ve bağlı. Tower Collector'ı
SPITFIRE_COLLECTOR_MANAGED=1ile çalışıyor (Tower ve Docker compose dosyalarında açıktır). - Tower'lar ve metrikler sayfasında metrik toplama açık.
- Tower makinesi veritabanının portuna erişebiliyor.
Eklemek
İlk kaynağı eklerken katalog doğrudan açılır; sonra eklenen kaynaklar listede, katalog Kaynak ekle sayfasındadır.
Hızlı kurulum
- Altyapı izleme → Kaynak ekle → teknolojinin kartına tıklayın.
- Hızlı kurulum sekmesinde işletim sisteminizi seçin.
- Komutu Kopyala ile kopyalayıp sunucuda çalıştırın, soruları yanıtlayın.
OK: ...satırı çıkınca Kurulum bekleniyor… yeşile döner; Dashboard'a git.
Betik önkoşulları denetler, salt okunur kullanıcıyı oluşturur, bağlantıyı dener ve kaynağı ekler. Yönetici parolası yalnız o oturumda kullanılır, Spitfire'a gönderilmez. Dosyayı indir ile önce okuyabilirsiniz. Yarıda kalırsa aynı komutu yeniden çalıştırmak güvenlidir.
Manuel kurulum
- Altyapı izleme → Kaynak ekle → teknolojinin kartı → Manuel kurulum sekmesi.
- 1. adım: komutu Kopyala ile kopyalayıp veritabanında yönetici olarak çalıştırın.
<password>yerine kendi seçtiğiniz şifreyi yazın. - 2. adım: adres (
host:port), kullanıcı (spitfire_monitor) ve şifreyi girin. - 3. adım: Test et. Test Tower'dan yapılır; Tower yoksa Spitfire sunucusundan.
- 4. adım: Kaydet. Dashboard açılır.
Salt okunur kullanıcılar
PostgreSQL
Hızlı kurulum
Komutu veritabanı sunucusunda çalıştırın, soruları yanıtlayın.
curl -fsSL "https://<spitfire>/api/v1/setup/ds/postgresql.sh?t=<token>" -o /tmp/sf-postgresql.sh && bash /tmp/sf-postgresql.shBu satırı görünce bitti.
OK: PostgreSQL Spitfire'a eklendi, ilk metrikler ~1 dk içinde
Ürün arayüzünde (Hızlı kurulum sekmesi) komut adresiniz ve yeni bir token ile hazır gelir; token 1 saat geçerlidir ve tek bir izlenen sistem ekler. Betik PostgreSQL bir Docker container'ındaysa adını sorar; spitfire_monitor varsa yalnız parolasını yeniler.
Manuel kurulum
Salt okunur kullanıcıyı oluşturun.
psql -h <host> -U postgres -c "CREATE ROLE spitfire_monitor WITH LOGIN PASSWORD '<password>';" -c "GRANT pg_monitor TO spitfire_monitor;"Bağlantıyı deneyin.
psql "host=<host> user=spitfire_monitor dbname=postgres" -c "select 'OK: spitfire_monitor bağlandı';"Altyapı izleme → PostgreSQL → Manuel kurulum ile ekleyin.
MySQL
Hızlı kurulum
Komutu veritabanı sunucusunda çalıştırın, soruları yanıtlayın.
curl -fsSL "https://<spitfire>/api/v1/setup/ds/mysql.sh?t=<token>" -o /tmp/sf-mysql.sh && bash /tmp/sf-mysql.shBu satırı görünce bitti.
OK: MySQL Spitfire'a eklendi, ilk metrikler ~1 dk içinde
Ürün arayüzünde (Hızlı kurulum sekmesi) komut adresiniz ve yeni bir token ile hazır gelir; token 1 saat geçerlidir ve tek bir izlenen sistem ekler. MariaDB için de aynıdır.
Manuel kurulum
Salt okunur kullanıcıyı oluşturun.
mysql -h <host> -u root -p -e "CREATE USER 'spitfire_monitor'@'%' IDENTIFIED BY '<password>'; GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'spitfire_monitor'@'%'; GRANT SELECT ON performance_schema.* TO 'spitfire_monitor'@'%';"Bağlantıyı deneyin.
mysql -h <host> -u spitfire_monitor -p -N -e "SELECT 'OK: spitfire_monitor bağlandı'"Altyapı izleme → MySQL → Manuel kurulum ile ekleyin.
SQL Server
Hızlı kurulum
Komutu SQL Server sunucusunda çalıştırın, soruları yanıtlayın.
curl -fsSL "https://<spitfire>/api/v1/setup/ds/sqlserver.sh?t=<token>" -o /tmp/sf-sqlserver.sh && bash /tmp/sf-sqlserver.shWindows'ta bunu PowerShell'de çalıştırın.
[Net.ServicePointManager]::SecurityProtocol = 'Tls12'; irm "https://<spitfire>/api/v1/setup/ds/sqlserver.ps1?t=<token>" -OutFile "$env:TEMP\sf-sqlserver.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\sf-sqlserver.ps1"Bu satırı görünce bitti.
OK: SQL Server Spitfire'a eklendi, ilk metrikler ~1 dk içinde
Ürün arayüzünde (Hızlı kurulum sekmesi) komut adresiniz ve yeni bir token ile hazır gelir; token 1 saat geçerlidir ve tek bir izlenen sistem ekler. Windows'ta betik Windows authentication ya da bir SQL login ile bağlanır. Parola kuralı: en az 8 karakter, büyük harf, küçük harf ve rakam.
Manuel kurulum
Salt okunur login'i oluşturun.
sqlcmd -S <host>,1433 -U sa -C -Q "CREATE LOGIN spitfire_monitor WITH PASSWORD = '<password>'; GRANT VIEW SERVER STATE TO spitfire_monitor; GRANT VIEW ANY DATABASE TO spitfire_monitor;"Bağlantıyı deneyin.
sqlcmd -S <host>,1433 -U spitfire_monitor -C -h -1 -Q "SET NOCOUNT ON; SELECT 'OK: spitfire_monitor bağlandı'"Altyapı izleme → SQL Server → Manuel kurulum ile ekleyin.
Oracle (Beta)
Hızlı kurulum (veritabanı sunucusunda, oracle kullanıcısıyla)
Komutu kopyalayın, terminale yapıştırıp çalıştırın.
curl -fsSL "https://<spitfire>/api/v1/setup/ds/oracledb.sh?t=<token>" -o /tmp/sf-oracledb.sh && bash /tmp/sf-oracledb.shWindows'ta bunun yerine PowerShell'de çalıştırın.
Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/oracledb.ps1?t=<token>" -OutFile "$env:TEMP\sf-oracledb.ps1"; & "$env:TEMP\sf-oracledb.ps1"OK: oracledb ...satırını görünce bitti.
Ürün arayüzünde bu satırlar adresiniz ve yeni bir token ile hazır gelir. Betik PDB'yi sorar, spitfire_monitor'ü oluşturur (varsa yeni şifreyi verir), aşağıdaki view'lara yetki verir ve girişi test eder. Oracle kartında Beta rozeti vardır: receiver'ı Collector contrib v0.164.1'de alpha'dır, metrik adları değişebilir.
Manuel kurulum
SYS olarak bağlanın.
sqlplus / as sysdbaPDB'nize geçin.
ALTER SESSION SET CONTAINER=FREEPDB1;Salt okunur kullanıcıyı oluşturun.
CREATE USER spitfire_monitor IDENTIFIED BY "<password>"; GRANT CREATE SESSION TO spitfire_monitor; GRANT SELECT ON V_$INSTANCE TO spitfire_monitor; GRANT SELECT ON V_$DATABASE TO spitfire_monitor; GRANT SELECT ON V_$SESSION TO spitfire_monitor; GRANT SELECT ON V_$SYSSTAT TO spitfire_monitor; GRANT SELECT ON V_$RESOURCE_LIMIT TO spitfire_monitor; GRANT SELECT ON V_$OSSTAT TO spitfire_monitor; GRANT SELECT ON V_$SGAINFO TO spitfire_monitor; GRANT SELECT ON V_$PROCESS TO spitfire_monitor; GRANT SELECT ON V_$PARAMETER TO spitfire_monitor; GRANT SELECT ON V_$TRANSACTION TO spitfire_monitor; GRANT SELECT ON V_$DATAFILE TO spitfire_monitor; GRANT SELECT ON V_$PDBS TO spitfire_monitor; GRANT SELECT ON V_$CONTAINERS TO spitfire_monitor; GRANT SELECT ON V_$LOCK TO spitfire_monitor; GRANT SELECT ON V_$SYSMETRIC TO spitfire_monitor; GRANT SELECT ON V_$CON_SYSMETRIC TO spitfire_monitor; GRANT SELECT ON V_$CON_SYSSTAT TO spitfire_monitor; GRANT SELECT ON V_$ROWCACHE TO spitfire_monitor; GRANT SELECT ON DBA_TABLESPACES TO spitfire_monitor; GRANT SELECT ON DBA_DATA_FILES TO spitfire_monitor; GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO spitfire_monitor; GRANT SELECT ON DBA_FREE_SPACE TO spitfire_monitor; GRANT SELECT ON DBA_RECYCLEBIN TO spitfire_monitor;Top SQL view'larına yetki verin.
GRANT SELECT ON V_$SQLSTATS TO spitfire_monitor; GRANT SELECT ON V_$SQL TO spitfire_monitor; GRANT SELECT ON DBA_OBJECTS TO spitfire_monitor;Girişi test edin.
echo "SELECT 'OK: spitfire_monitor' FROM dual;" | sqlplus -s -L 'spitfire_monitor/"<password>"@//<host>:1521/FREEPDB1'Altyapı izleme → Oracle altında ekleyin, adres
<host>:1521. Servis adı:FREEPDB1.
FREEPDB1 yerine kendi PDB'nizi yazın. V_$SQLSTATS ve V_$SQL canlı görünümün top SQL listesini ve Yavaş sorgular kartını doldurur; DBA_OBJECTS lock beklemesinin hangi tabloda olduğunu adlandırır. İfadeler değerleri olmadan gösterilir.
InfluxDB (Beta)
InfluxDB kartı Beta rozetlidir: Collector, InfluxDB'nin kendi /metrics adresini prometheus receiver
ile okur ve 2.x ile 3.x metriklerini tek dashboard'a çevirir. 2.x ve 3.x desteklenir, 1.x desteklenmez.
InfluxDB 2.x (port 8086):
InfluxDB'ye erişen herhangi bir makinede salt okunur token oluşturun (
<admin-token>yerine operator ya da all-access token'ınızı,<org>yerine organizasyon adınızı yazın):influx auth create --host http://<host>:8086 --token '<admin-token>' --org '<org>' --read-buckets --read-orgs --description spitfire_monitorÇıktıdaki
tokendeğerini kopyalayın.2. adımda adres (
http://<host>:8086), API token ve Organizasyon alanlarını girin.Test et: sonuç Bağlantı başarılı olmalı.
InfluxDB 3.x (port 8181):
Sunucuyu sağlık ve metrik adresleri açık olacak şekilde başlatın (Docker'da
-eile, servis dosyasında ortam değişkeni olarak):INFLUXDB3_DISABLE_AUTHZ=health,ping,metricsAçıldığını kontrol edin,
HTTP 200yazmalı:curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://<host>:8181/metrics2. adımda adres (
http://<host>:8181) girin, API token alanını boş bırakın.Test et: sonuç Bağlantı başarılı olmalı.
MongoDB
Hızlı kurulum (mongosh olan herhangi bir makinede)
Komutu kopyalayın, terminale yapıştırıp çalıştırın.
curl -fsSL "https://<spitfire>/api/v1/setup/ds/mongodb.sh?t=<token>" -o /tmp/sf-mongodb.sh && bash /tmp/sf-mongodb.shWindows'ta bunun yerine PowerShell'de çalıştırın.
Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/mongodb.ps1?t=<token>" -OutFile "$env:TEMP\sf-mongodb.ps1"; & "$env:TEMP\sf-mongodb.ps1"OK: mongodb ...satırını görünce bitti.
Ürün arayüzünde bu satırlar adresiniz ve yeni bir token ile hazır gelir. Betik PRIMARY'ye bağlanır, spitfire_monitor'ü clusterMonitor ile oluşturur (varsa yeni şifreyi verir), isterseniz verdiğiniz veritabanlarında profiling açar ve girişi test eder.
Manuel kurulum
PRIMARY'ye admin olarak bağlanın.
mongosh "mongodb://<host>:27017/admin?directConnection=true" -u admin -pSalt okunur kullanıcıyı oluşturun.
db.getSiblingDB("admin").createUser({user: "spitfire_monitor", pwd: "<password>", roles: [{role: "clusterMonitor", db: "admin"}]})İsteğe bağlı: profiling'i açın.
db.getSiblingDB("<database>").setProfilingLevel(1, {slowms: 100})Girişi test edin.
mongosh --quiet "mongodb://<host>:27017/admin?directConnection=true" -u spitfire_monitor -p '<password>' --eval 'print("OK: serverStatus " + db.adminCommand({serverStatus: 1}).ok)'Altyapı izleme → MongoDB altında ekleyin, adres
<host>:27017.
clusterMonitor replica set durumunu, oplog penceresini, çalışan işlemleri ve system.profile'ı okur; koleksiyonlarınızı okuyamaz. Profiling (3. adım) canlı görünümün profiler listesini ve Yavaş sorgular kartının yavaş operation'larını doldurur; istemiyorsanız atlayın.
CouchDB
Hızlı kurulum
Komutu CouchDB'ye erişen bir makinede çalıştırın, soruları yanıtlayın.
curl -fsSL "https://<spitfire>/api/v1/setup/ds/couchdb.sh?t=<token>" -o /tmp/sf-couchdb.sh && bash /tmp/sf-couchdb.shBu satırı görünce bitti.
OK: CouchDB Spitfire'a eklendi, ilk metrikler ~1 dk içinde
Ürün arayüzünde (Hızlı kurulum sekmesi) komut adresiniz ve yeni bir token ile hazır gelir; token 1 saat geçerlidir ve tek bir izlenen sistem ekler. CouchDB'nin istatistik endpoint'i (_node/_local/_stats) yönetici ister; betik bu yüzden spitfire_monitor'ü bir admin olarak tanımlar.
Manuel kurulum
İzleme kullanıcısını oluşturun.
curl -u admin -X PUT 'http://<host>:5984/_node/_local/_config/admins/spitfire_monitor' -d '"<password>"'Bağlantıyı deneyin.
curl -fsS -u spitfire_monitor 'http://<host>:5984/_node/_local/_stats/couchdb/request_time' >/dev/null && echo 'OK: spitfire_monitor bağlandı'Altyapı izleme → CouchDB → Manuel kurulum ile ekleyin.
Redis
Hızlı kurulum (redis-cli olan herhangi bir makinede)
Komutu kopyalayın, terminale yapıştırıp çalıştırın.
curl -fsSL "https://<spitfire>/api/v1/setup/ds/redis.sh?t=<token>" -o /tmp/sf-redis.sh && bash /tmp/sf-redis.shOK: redis ...satırını görünce bitti.
Ürün arayüzünde bu satırlar adresiniz ve yeni bir token ile hazır gelir. Betik ACL kullanıcısı spitfire_monitor'ü oluşturur (ACL SETUSER ... reset var olanı yeniden yazar), slowlog kapalıysa açmadan önce sorar ve girişi test eder.
Manuel kurulum
Salt okunur ACL kullanıcısını oluşturun.
redis-cli -h <host> -p 6379 --askpass ACL SETUSER spitfire_monitor reset on '><password>' -@all +info +ping +slowlogHer replica'da tekrarlayın.
redis-cli -h <replica-host> -p 6379 --askpass ACL SETUSER spitfire_monitor reset on '><password>' -@all +info +ping +slowlogGirişi test edin.
redis-cli -h <host> -p 6379 --user spitfire_monitor --pass '<password>' --no-auth-warning SLOWLOG LEN && echo "OK: spitfire_monitor"Altyapı izleme → Redis altında ekleyin, adres
<host>:6379.
+slowlog canlı görünümün slowlog listesini doldurur; komutlar anahtar ve değer olmadan gösterilir (SET ? ?). ACL'ler replike edilmez; 2. adım her replica'da gerekir.
Couchbase (Beta)
Hızlı kurulum (bir Couchbase node'unda)
Komutu kopyalayın, terminale yapıştırıp çalıştırın.
curl -fsSL "https://<spitfire>/api/v1/setup/ds/couchbase.sh?t=<token>" -o /tmp/sf-couchbase.sh && bash /tmp/sf-couchbase.shWindows'ta bunun yerine PowerShell'de çalıştırın.
Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/couchbase.ps1?t=<token>" -OutFile "$env:TEMP\sf-couchbase.ps1"; & "$env:TEMP\sf-couchbase.ps1"OK: couchbase ...satırını görünce bitti.
Ürün arayüzünde bu satırlar adresiniz ve yeni bir token ile hazır gelir. Betik yerel kullanıcı spitfire_monitor'ü external_stats_reader ile oluşturur (ya da günceller) ve /metrics'i okuyabildiğini kontrol eder. Couchbase kartında Beta rozeti vardır: metrikler Couchbase Server'ın kendi Prometheus endpoint'inden gelir (7.0 ve sonrası), adlar Couchbase sürümleriyle değişebilir.
Manuel kurulum
Yalnızca stats okuyan kullanıcıyı oluşturun.
/opt/couchbase/bin/couchbase-cli user-manage -c localhost -u Administrator -p '<admin-password>' --set --rbac-username spitfire_monitor --rbac-password '<password>' --roles external_stats_reader --auth-domain localTower makinesinden test edin.
curl -fsS -o /dev/null -u spitfire_monitor:'<password>' http://<host>:8091/metrics && echo "OK: spitfire_monitor"Altyapı izleme → Couchbase altında ekleyin, adres
http://<host>:8091.
external_stats_reader yalnızca /metrics'i okur; bucket ya da doküman okuyamaz. TLS ile https://<host>:18091 girin ve TLS kullan'ı açın. Windows'ta CLI C:\Program Files\Couchbase\Server\bin\couchbase-cli.exe'dir.
ClickHouse (Beta)
ClickHouse kartı Beta rozetlidir. Bu kaynak sizin ClickHouse sunucunuzu izler; Spitfire'ın kendi APM verisini tuttuğu ClickHouse ile ilgisi yoktur. Metrikler ClickHouse'un kendi Prometheus endpoint'inden (port 9363) okunur, yavaş sorgular ve tablolar HTTP arayüzünden (port 8123).
ClickHouse sunucusunda Prometheus endpoint'ini açın:
sudo tee /etc/clickhouse-server/config.d/spitfire-prometheus.xml >/dev/null <<'EOF' <clickhouse> <prometheus> <endpoint>/metrics</endpoint> <port>9363</port> <metrics>true</metrics> <events>true</events> <asynchronous_metrics>true</asynchronous_metrics> </prometheus> </clickhouse> EOF sudo systemctl restart clickhouse-serverDocker'da: aynı dosyayı container'ın
/etc/clickhouse-server/config.d/klasörüne koyupdocker restart <container>çalıştırın (sayfadaki Docker kutusu hazır komutu verir).Kontrol (sayı 0'dan büyük olmalı):
curl -s http://localhost:9363/metrics | grep -c ClickHouseProfileEvents_Salt okunur kullanıcıyı
clickhouse-clientile oluşturun:CREATE USER IF NOT EXISTS spitfire_monitor IDENTIFIED BY '<password>' SETTINGS readonly = 1; GRANT SELECT ON system.* TO spitfire_monitor; GRANT SHOW TABLES ON *.* TO spitfire_monitor;SHOW TABLESyalnız tablo adlarını ve part sayılarını gösterir; tablo verisini okuyamaz.2. adımda adres (
http://<host>:8123), kullanıcı ve şifreyi girin. Prometheus endpoint boşsahttp://<host>:9363/metricskullanılır. Veritabanları boşsa hepsi okunur.Test et: sonuç Bağlantı başarılı olmalı.
Canlı görünüm
Oracle, Redis ve MongoDB kaynaklarında dashboard'da Canlı görünüm kartı vardır. Şimdi oku, hiçbir metriğin taşımadığını Tower üzerinde okur; sayfa açık kaldıkça her dakika yeniden okur.
| Teknoloji | Gösterir |
|---|---|
| Oracle | Toplam süreye göre top SQL (V$SQLSTATS); ortalama süre ve çağrıya göre, lock beklemeleriyle, Yavaş sorgular kartında |
| Redis | Rol, master bağlantısı, gecikmeleriyle replica'lar, son kayıt, latest_fork, slowlog |
| MongoDB | Replica set üyeleri ve lag, oplog penceresi, WiredTiger cache, şu an çalışan işlemler, profiler (son 15 dakika) |
İfadeler değerleri olmadan gösterilir: her literal kaynakta ? ile değiştirilir.
Cassandra (Beta)
Hızlı kurulum
- Komutu kopyalayın, bir Cassandra node'unda root olarak çalıştırın, soruları yanıtlayın.(Üründe bu satır adres ve yeni bir token ile hazır gelir.)
curl -fsSL "https://<spitfire>/api/v1/setup/ds/cassandra.sh?t=<token>" -o /tmp/sf-cassandra.sh && sudo bash /tmp/sf-cassandra.sh OK: ...satırını görünce bitti.
Elle kurulum (her node'da sırayla, root olarak)
- Klasörü oluşturun.
sudo mkdir -p /opt/jmx-exporter - Javaagent'ı indirin.
sudo curl -fsSL -o /opt/jmx-exporter/jmx_prometheus_javaagent.jar https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/1.0.1/jmx_prometheus_javaagent-1.0.1.jar - Kural dosyasını yazın.
sudo tee /opt/jmx-exporter/cassandra.yml >/dev/null <<'EOF' # Spitfire: Cassandra node metrics for the Prometheus JMX exporter javaagent. lowercaseOutputName: false includeObjectNames: - "org.apache.cassandra.metrics:type=ClientRequest,scope=Read,*" - "org.apache.cassandra.metrics:type=ClientRequest,scope=Write,*" - "org.apache.cassandra.metrics:type=Compaction,name=PendingTasks" - "org.apache.cassandra.metrics:type=ThreadPools,*" - "org.apache.cassandra.metrics:type=DroppedMessage,name=Dropped,*" - "org.apache.cassandra.metrics:type=Table,name=LiveSSTableCount,*" - "org.apache.cassandra.metrics:type=Storage,*" - "org.apache.cassandra.net:type=FailureDetector" - "java.lang:type=Memory" - "java.lang:type=GarbageCollector,*" rules: - pattern: 'org.apache.cassandra.metrics<type=ClientRequest, scope=(Read|Write), name=Latency><>99thPercentile' name: cassandra_client_request_latency_p99_ms labels: op: "$1" valueFactor: 0.001 type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=ClientRequest, scope=(Read|Write), name=Latency><>Count' name: cassandra_client_requests labels: op: "$1" type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=ClientRequest, scope=(Read|Write), name=Timeouts><>Count' name: cassandra_client_request_timeouts labels: op: "$1" type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=ClientRequest, scope=(Read|Write), name=Unavailables><>Count' name: cassandra_client_request_unavailables labels: op: "$1" type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=Compaction, name=PendingTasks><>Value' name: cassandra_compaction_pending_tasks type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=ThreadPools, path=\w+, scope=(MutationStage|ReadStage|Native-Transport-Requests|CompactionExecutor), name=PendingTasks><>Value' name: cassandra_threadpool_pending_tasks labels: pool: "$1" type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=ThreadPools, path=\w+, scope=(MutationStage|ReadStage|Native-Transport-Requests|CompactionExecutor), name=CurrentlyBlockedTasks><>Count' name: cassandra_threadpool_blocked_tasks labels: pool: "$1" type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=ThreadPools, path=\w+, scope=(MutationStage|ReadStage|Native-Transport-Requests|CompactionExecutor), name=TotalBlockedTasks><>Count' name: cassandra_threadpool_total_blocked_tasks labels: pool: "$1" type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=DroppedMessage, scope=(MUTATION|COUNTER_MUTATION|READ|RANGE_SLICE|READ_REPAIR|PAGED_RANGE|REQUEST_RESPONSE|HINT|BATCH_STORE|BATCH_REMOVE|_TRACE), name=Dropped><>Count' name: cassandra_dropped_messages labels: message: "$1" type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=Table, keyspace=((?!system)[^,]+), scope=([^,]+), name=LiveSSTableCount><>Value' name: cassandra_table_live_sstables labels: keyspace: "$1" table: "$2" type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=Storage, name=Load><>Count' name: cassandra_storage_load_bytes type: GAUGE - pattern: 'org.apache.cassandra.metrics<type=Storage, name=TotalHintsInProgress><>Count' name: cassandra_hints_in_progress type: GAUGE - pattern: 'org.apache.cassandra.net<type=FailureDetector><>DownEndpointCount' name: cassandra_gossip_down_endpoints type: GAUGE - pattern: 'org.apache.cassandra.net<type=FailureDetector><>UpEndpointCount' name: cassandra_gossip_up_endpoints type: GAUGE - pattern: 'java.lang<type=Memory><HeapMemoryUsage>used' name: cassandra_jvm_heap_used_bytes type: GAUGE - pattern: 'java.lang<type=Memory><HeapMemoryUsage>max' name: cassandra_jvm_heap_max_bytes type: GAUGE - pattern: 'java.lang<(?:type=GarbageCollector, name=([^,>]+)|name=([^,>]+), type=GarbageCollector)><>CollectionTime' name: cassandra_jvm_gc_time_ms labels: gc: "$1$2" type: GAUGE EOF - JVM seçeneğini bir kez ekleyin.
grep -q jmx_prometheus_javaagent /etc/cassandra/cassandra-env.sh || echo 'JVM_OPTS="$JVM_OPTS -javaagent:/opt/jmx-exporter/jmx_prometheus_javaagent.jar=7070:/opt/jmx-exporter/cassandra.yml"' | sudo tee -a /etc/cassandra/cassandra-env.sh - Node'u yeniden başlatın.
nodetool drain && sudo systemctl restart cassandra - Node UN olana kadar bekleyin.
until nodetool status 2>/dev/null | grep -q '^UN'; do sleep 5; done; echo 'OK: node UN' - Exporter'ı kontrol edin.
curl -s http://localhost:7070/metrics | grep -q cassandra_gossip_up_endpoints && echo 'OK: Cassandra exporter' - Sonraki node'da 1. adımdan başlayın.
nodetool status - Spitfire'da kaynağı ekleyin: Altyapı izleme → Cassandra, her node'un adresi.
cass-1.corp:7070, cass-2.corp:7070, cass-3.corp:7070 - Tower makinesinden erişimi kontrol edin.
curl -s http://cass-1.corp:7070/metrics | grep -q cassandra_ && echo "OK: Tower exporter'a erişiyor"Test sonuçları
| Sonuç | Ne yapmalı |
|---|---|
| Host adı çözülemedi | Adresi Tower makinesinde nslookup <host> ile deneyin. |
| Bu portta dinleyen yok | Port numarasını ve veritabanının dinlediği arayüzü kontrol edin. |
| Yanıt yok | Tower'dan veritabanı portuna firewall izni verin. |
| Kullanıcı ya da şifre yanlış | 1. adımı tekrar çalıştırın, şifreyi tekrar girin. |
| Salt okunur yetkisi eksik | 1. adımdaki GRANT satırlarını çalıştırın. |
| Veritabanı ya da servis adı bulunamadı | Oracle'da Servis adı yanlış: SYS olarak SELECT name FROM v$services; ile doğru adı bulun. |
| Token yanlış ya da eksik | InfluxDB 2.x'te 1. adımdaki token'ı yeniden oluşturup girin; 3.x'te INFLUXDB3_DISABLE_AUTHZ ayarını kontrol edin. |
| Organizasyon ya da /health, /metrics yolu bulunamadı | InfluxDB'de Organizasyon adı yanlış: influx org list --host http://<host>:8086 --token '<admin-token>' ile doğru adı bulun. |
| Yanıt InfluxDB 2.x ya da 3.x değil | InfluxDB 1.x desteklenmez; adres başka bir servise gidiyorsa düzeltin. |
| Yanıt beklenen biçimde değil (Cassandra) | Exporter çalışıyor ama kural dosyası yok: 3. ve 4. adımı kontrol edip node'u yeniden başlatın. |
| TLS uyuşmuyor | TLS kullan kutusunu veritabanının ayarına göre açın ya da kapatın. |
| Bu Tower canlı görünümden eski | Tower'ı güncelleyin; dashboard bu arada çalışmaya devam eder. |
Yavaş sorgular ve lock'lar
PostgreSQL, MySQL, SQL Server, ClickHouse, Oracle ve MongoDB dashboard'unun altında Yavaş sorgular tablosu vardır. Sorgular açtığınızda Tower üzerinden okunur, Spitfire'da saklanmaz. Sorgu metnindeki her değer soru işaretiyle değiştirilir: müşteri verisi ekrana gelmez.
- Toplam süre / Ortalama süre (ClickHouse, Oracle ve MongoDB'de ayrıca En sık) sıralamayı değiştirir.
- Şu an lock bekleyenler: lock bekleyen oturum, beklediği nesne ve onu tutan oturum (PostgreSQL, MySQL, SQL Server, Oracle; MongoDB'de operation ve tuttuğu ya da istediği lock'lar).
- MongoDB'de ayrıca Şu an çalışanlar:
$currentOp'taki operation'lar, tipi ve planıyla; collection'ın tamamını okuyan planda kırmızı COLLSCAN rozeti vardır. - ClickHouse'ta ayrıca Tablolar: part'lar ve disk ve Replikalar tabloları.
- Tower 1.4'ten (Oracle ve MongoDB için 1.4.2'den) eskiyse tablo yerine güncelleme uyarısı çıkar.
PostgreSQL: pg_stat_statements
Tablo boşsa sayfa eksik adımı gösterir. Modül yüklü değilse:
Ayarı görün:
sudo -u postgres psql -c "SHOW shared_preload_libraries;"Boşsa ekleyin (doluysa mevcut değerin sonuna
,pg_stat_statementsekleyerek yazın):sudo -u postgres psql -c "ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';"Yeniden başlatın:
sudo systemctl restart postgresqlExtension'ı izlenen veritabanında açın (
postgresyerine veritabanınızın adı):sudo -u postgres psql -d postgres -c "CREATE EXTENSION IF NOT EXISTS pg_stat_statements;"Kontrol: sayfada Yenile; tablo dolmalı.
MySQL: performance_schema
MySQL 5.7+ ve 8'de açıktır. Kapalıysa:
Ayarı yazın:
printf '[mysqld]\nperformance_schema=ON\n' | sudo tee /etc/mysql/conf.d/spitfire-performance-schema.cnf >/dev/nullYeniden başlatın:
sudo systemctl restart mysqlKontrol: sayfada Yenile; tablo dolmalı.
SQL Server ve ClickHouse
SQL Server sys.dm_exec_query_stats'ı okur, ek ayar gerekmez (VIEW SERVER STATE 1. adımda verilir).
ClickHouse system.query_log'u okur; varsayılan olarak açıktır. Tablo boşsa:
Log'u diske yazdırın:
clickhouse-client --query "SYSTEM FLUSH LOGS"Kontrol (
1yazmalı):clickhouse-client --query "EXISTS TABLE system.query_log"
Oracle: V$SQLSTATS
Liste V$SQLSTATS'ı (her ifade için bir satır, planlarının toplamı) şemasını V$SQL'den alarak
okur; Oracle'ın kendi şemaları ve izleme kullanıcısı dışarıda kalır. Lock beklemeleri V$SESSION
(blocking_session) ve V$LOCK'tan gelir. Kullanıcı bunları okuyamıyorsa sayfa grant'leri
kullanıcınız ve PDB'nizle gösterir:
SYS olarak bağlanın:
sqlplus / as sysdbaView'lara yetki verin (
FREEPDB1yerine kendi PDB'nizi yazın; servis bir PDB değilse ilk satırı atlayın):ALTER SESSION SET CONTAINER=FREEPDB1; GRANT SELECT ON V_$SQLSTATS TO SPITFIRE_MONITOR; GRANT SELECT ON V_$SQL TO SPITFIRE_MONITOR; GRANT SELECT ON V_$SESSION TO SPITFIRE_MONITOR; GRANT SELECT ON V_$LOCK TO SPITFIRE_MONITOR; GRANT SELECT ON DBA_OBJECTS TO SPITFIRE_MONITOR;Kontrol: sayfada Yenile; tablo dolar.
GRANT SELECT_CATALOG_ROLE TO SPITFIRE_MONITOR; aynısını tek satırda, gerekenden fazla
view ile verir.
MongoDB: $currentOp ve profiler
Şu an çalışanlar ve lock beklemeleri $currentOp'u okur; listeler her veritabanının
system.profile'ını okur (son 15 dakika; kaynağın veritabanları alanı doluysa yalnızca onlar).
Her operation şekliyle gösterilir: komut, collection'ı ve alan adları; her değer ? olur.
clusterMonitor rolü yeterlidir; collection'larınızı okuyamaz.
Kullanıcı $currentOp çalıştıramıyorsa:
PRIMARY'ye admin olarak bağlanın:
mongosh "mongodb://<host>:27017/admin?directConnection=true" -u admin -pRolü verin:
db.getSiblingDB("admin").grantRolesToUser("spitfire_monitor", [{role: "clusterMonitor", db: "admin"}])
Profiler kapalıysa yalnızca çalışan operation'lar listelenir ve sayfa bunu söyler. Yavaş operation'ları da listelemek için:
Yukarıdaki 1. adımdaki gibi bağlanın.
Veritabanında profiling'i açın (100 ms'den uzun operation'lar kaydedilir):
db.getSiblingDB("<database>").setProfilingLevel(1, {slowms: 100})Kontrol: sayfada Yenile; yavaş operation'lar çalıştıkça listeler dolar.
Cache hit oranı
PostgreSQL ve MySQL dashboard'unun üstündeki kutular son 15 dakikanın cache hit oranını ve sınırını gösterir. En az 1.000 okuma olmadan oran gösterilmez.
Eşik bulguları
| Teknoloji | Bulgu |
|---|---|
| PostgreSQL | Bağlantılar max_connections'ın %80'ini aştı (uyarı) |
| PostgreSQL | Cache hit oranı %90'ın altında, en az 1.000 okumada (uyarı) |
| PostgreSQL | Deadlock oluştu (uyarı) |
| MySQL | Buffer pool hit oranı %90'ın altında, en az 1.000 okumada (uyarı) |
| MySQL | Row lock beklemesi oldu (uyarı) |
| SQL Server | Deadlock oluştu (uyarı) |
| SQL Server | Saniyede 1'den fazla lock beklemesi (uyarı) |
| ClickHouse | Bir partition'da 300'den fazla aktif part (uyarı), 1.000'den fazla (kritik) |
| ClickHouse | Readonly replika var (kritik) |
| ClickHouse | Replikasyon gecikmesi 300 saniyenin üstünde (uyarı) |
| ClickHouse | Başarısız sorgu sayısı 10'dan fazla arttı (uyarı) |
| Redis | Bellek fragmentation oranı 1,5'in üstünde (uyarı) |
| Redis | Keyspace hit oranı %80'in altında, en az 100 istekte (uyarı) |
| Oracle | Oturumlar sessions sınırının %80'ini aştı (uyarı) |
| Oracle | Deadlock oluştu (uyarı) |
| InfluxDB | Yazma ya da sorgu istekleri hata dönüyor (uyarı) |
| InfluxDB | Point'ler reddedildi (uyarı) |
| InfluxDB | Bir bucket'ta 1.000.000'dan fazla series: yüksek cardinality (uyarı, 2.x) |
| InfluxDB | Bir shard'ın diski 15 dakikada 1 GiB'tan fazla büyüdü (uyarı, 2.x) |
| Oracle | Bir tablespace en büyük boyutunun %85'ini aştı (uyarı), %95'ini aştı (kritik) |
| Redis | Key'ler evict ediliyor (uyarı) |
| Redis | Bellek maxmemory'nin %90'ını aştı (uyarı) |
| Redis | Replica master bağlantısını kaybetti (kritik, canlı görünüm) |
| Redis | Son RDB kaydı ya da AOF yazımı başarısız (kritik, canlı görünüm) |
| MongoDB | Bir secondary 10 sn'den fazla geride (uyarı) |
| MongoDB | Bir üye PRIMARY ya da SECONDARY değil, ya da PRIMARY yok (kritik, canlı görünüm) |
| MongoDB | WiredTiger cache %95'i aştı (uyarı, canlı görünüm) |
| MongoDB | Bağlantılar sınırın %80'ini aştı (uyarı, canlı görünüm) |
| MongoDB | 60 sn'den uzun süren bir işlem (uyarı, canlı görünüm) |
| Couchbase | Node yanıt vermiyor (kritik) |
| Couchbase | Bucket belleği kotasının %90'ını aştı (uyarı) |
| Couchbase | Aktif dokümanların %10'undan azı bellekte (uyarı) |
| Couchbase | Geçici out-of-memory hataları (uyarı) |
| Couchbase | XDCR backlog 15 dakikada 1000'den fazla büyüyor (uyarı) |
| Cassandra | Bir node'un exporter'ı yanıt vermiyor, up = 0 (kritik) |
| Cassandra | Gossip'e göre kapalı node var (kritik) |
| Cassandra | Bir node'da heap %85'in üstünde (uyarı), %95'in üstünde (kritik) |
| Cassandra | Mesajlar düşürüldü, dropped (uyarı) |
| Cassandra | Bekleyen compaction 100'ün üstünde (uyarı) |
| Cassandra | Thread pool'da bloklanan task var (uyarı) |
| Cassandra | Read/write timeout ya da unavailable oldu (uyarı) |
Kritik bulgu çıktığında aynı eşiğin uyarısı ayrıca gösterilmez.
Tüm metrikler
Dashboard'daki hazır paneller kaynağın metriklerinin bir kısmını gösterir. Tüm metrikler sekmesi kaynağın gönderdiği her metriği listeler; Prometheus endpoint'lerinde de çalışır.
- Altyapı izleme → kaynağın satırında Dashboard.
- Üstteki Tüm metrikler sekmesine tıklayın.
- Arama kutusuna metriğin adından bir parça yazın, ör.
commitsya dahttp_requests. - Listeden metriğe tıklayın. Grafik çizilir; counter'lar saniyedeki artış olarak gösterilir.
- İsterseniz attribute kutularından bir değer seçin ya da Böl ile her değeri ayrı çizgi yapın.
- Panoya ekle → Başlık girin.
- Eşik isterseniz Eşik bulgusu → üstünde ya da altında → değer → Uyarı ya da Kritik.
- Panoya ekle ile kaydedin.
- Dashboard sekmesine dönün.
Başarı kontrolü: grafik hazır panellerin altında görünür; sayfayı yenileyince de yerinde durur. Eşik koyduysanız ve değer eşiği geçtiyse bulgular listesinde grafiğin başlığıyla bir satır çıkar. Grafiği kaldırmak için sağ üstteki çöp kutusu → Panodan kaldır.
Lisans
Her kaynak bir izlenen sistem sayılır. Sınır dolunca sayfa uyarır ve Lisans
sayfasına götürür. Ek izlenen sistemler +5 izlenen sistem paketiyle alınır.
Başarı kontrolü
- Kaynaklar tablosunda Son test = Bağlandı.
- 1-2 dakika içinde Son veri dolu, dashboard'da çizgiler var.
- Tüm metrikler sekmesi kaynağın metriklerini listeliyor.