SpitfireYük Testi ve Gözlemlenebilirlikv1.4.9 · Yenilikler

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

  1. En az bir Tower kurulu ve bağlı. Tower Collector'ı SPITFIRE_COLLECTOR_MANAGED=1 ile çalışıyor (Tower ve Docker compose dosyalarında açıktır).
  2. Tower'lar ve metrikler sayfasında metrik toplama açık.
  3. 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

  1. Altyapı izleme → Kaynak ekle → teknolojinin kartına tıklayın.
  2. Hızlı kurulum sekmesinde işletim sisteminizi seçin.
  3. Komutu Kopyala ile kopyalayıp sunucuda çalıştırın, soruları yanıtlayın.
  4. OK: ... satırı çıkınca Kurulum bekleniyor… yeşile döner; Dashboard'a git.
Not

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

  1. Altyapı izleme → Kaynak ekle → teknolojinin kartı → Manuel kurulum sekmesi.
  2. 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.
  3. 2. adım: adres (host:port), kullanıcı (spitfire_monitor) ve şifreyi girin.
  4. 3. adım: Test et. Test Tower'dan yapılır; Tower yoksa Spitfire sunucusundan.
  5. 4. adım: Kaydet. Dashboard açılır.

Salt okunur kullanıcılar

PostgreSQL

Hızlı kurulum

  1. Komutu veritabanı sunucusunda çalıştırın, soruları yanıtlayın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/postgresql.sh?t=<token>" -o /tmp/sf-postgresql.sh && bash /tmp/sf-postgresql.sh
  2. Bu satırı görünce bitti.

    text
    OK: PostgreSQL Spitfire'a eklendi, ilk metrikler ~1 dk içinde
Not

Ü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

  1. Salt okunur kullanıcıyı oluşturun.

    bash
    psql -h <host> -U postgres -c "CREATE ROLE spitfire_monitor WITH LOGIN PASSWORD '<password>';" -c "GRANT pg_monitor TO spitfire_monitor;"
  2. Bağlantıyı deneyin.

    bash
    psql "host=<host> user=spitfire_monitor dbname=postgres" -c "select 'OK: spitfire_monitor bağlandı';"
  3. Altyapı izleme → PostgreSQL → Manuel kurulum ile ekleyin.

MySQL

Hızlı kurulum

  1. Komutu veritabanı sunucusunda çalıştırın, soruları yanıtlayın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/mysql.sh?t=<token>" -o /tmp/sf-mysql.sh && bash /tmp/sf-mysql.sh
  2. Bu satırı görünce bitti.

    text
    OK: MySQL Spitfire'a eklendi, ilk metrikler ~1 dk içinde
Not

Ü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

  1. Salt okunur kullanıcıyı oluşturun.

    bash
    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'@'%';"
  2. Bağlantıyı deneyin.

    bash
    mysql -h <host> -u spitfire_monitor -p -N -e "SELECT 'OK: spitfire_monitor bağlandı'"
  3. Altyapı izleme → MySQL → Manuel kurulum ile ekleyin.

SQL Server

Hızlı kurulum

  1. Komutu SQL Server sunucusunda çalıştırın, soruları yanıtlayın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/sqlserver.sh?t=<token>" -o /tmp/sf-sqlserver.sh && bash /tmp/sf-sqlserver.sh
  2. Windows'ta bunu PowerShell'de çalıştırın.

    powershell
    [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"
  3. Bu satırı görünce bitti.

    text
    OK: SQL Server Spitfire'a eklendi, ilk metrikler ~1 dk içinde
Not

Ü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

  1. Salt okunur login'i oluşturun.

    bash
    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;"
  2. Bağlantıyı deneyin.

    bash
    sqlcmd -S <host>,1433 -U spitfire_monitor -C -h -1 -Q "SET NOCOUNT ON; SELECT 'OK: spitfire_monitor bağlandı'"
  3. Altyapı izleme → SQL Server → Manuel kurulum ile ekleyin.

Oracle (Beta)

Hızlı kurulum (veritabanı sunucusunda, oracle kullanıcısıyla)

  1. Komutu kopyalayın, terminale yapıştırıp çalıştırın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/oracledb.sh?t=<token>" -o /tmp/sf-oracledb.sh && bash /tmp/sf-oracledb.sh
  2. Windows'ta bunun yerine PowerShell'de çalıştırın.

    powershell
    Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/oracledb.ps1?t=<token>" -OutFile "$env:TEMP\sf-oracledb.ps1"; & "$env:TEMP\sf-oracledb.ps1"
  3. OK: oracledb ... satırını görünce bitti.

Not

Ü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

  1. SYS olarak bağlanın.

    bash
    sqlplus / as sysdba
  2. PDB'nize geçin.

    sql
    ALTER SESSION SET CONTAINER=FREEPDB1;
  3. Salt okunur kullanıcıyı oluşturun.

    sql
    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;
  4. Top SQL view'larına yetki verin.

    sql
    GRANT SELECT ON V_$SQLSTATS TO spitfire_monitor;
    GRANT SELECT ON V_$SQL TO spitfire_monitor;
    GRANT SELECT ON DBA_OBJECTS TO spitfire_monitor;
  5. Girişi test edin.

    bash
    echo "SELECT 'OK: spitfire_monitor' FROM dual;" | sqlplus -s -L 'spitfire_monitor/"<password>"@//<host>:1521/FREEPDB1'
  6. Altyapı izleme → Oracle altında ekleyin, adres <host>:1521. Servis adı: FREEPDB1.

Not

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):

  1. 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):

    bash
    influx auth create --host http://<host>:8086 --token '<admin-token>' --org '<org>' --read-buckets --read-orgs --description spitfire_monitor
  2. Çıktıdaki token değerini kopyalayın.

  3. 2. adımda adres (http://<host>:8086), API token ve Organizasyon alanlarını girin.

  4. Test et: sonuç Bağlantı başarılı olmalı.

InfluxDB 3.x (port 8181):

  1. Sunucuyu sağlık ve metrik adresleri açık olacak şekilde başlatın (Docker'da -e ile, servis dosyasında ortam değişkeni olarak):

    text
    INFLUXDB3_DISABLE_AUTHZ=health,ping,metrics
  2. Açıldığını kontrol edin, HTTP 200 yazmalı:

    bash
    curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://<host>:8181/metrics
  3. 2. adımda adres (http://<host>:8181) girin, API token alanını boş bırakın.

  4. Test et: sonuç Bağlantı başarılı olmalı.

MongoDB

Hızlı kurulum (mongosh olan herhangi bir makinede)

  1. Komutu kopyalayın, terminale yapıştırıp çalıştırın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/mongodb.sh?t=<token>" -o /tmp/sf-mongodb.sh && bash /tmp/sf-mongodb.sh
  2. Windows'ta bunun yerine PowerShell'de çalıştırın.

    powershell
    Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/mongodb.ps1?t=<token>" -OutFile "$env:TEMP\sf-mongodb.ps1"; & "$env:TEMP\sf-mongodb.ps1"
  3. OK: mongodb ... satırını görünce bitti.

Not

Ü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

  1. PRIMARY'ye admin olarak bağlanın.

    bash
    mongosh "mongodb://<host>:27017/admin?directConnection=true" -u admin -p
  2. Salt okunur kullanıcıyı oluşturun.

    javascript
    db.getSiblingDB("admin").createUser({user: "spitfire_monitor", pwd: "<password>", roles: [{role: "clusterMonitor", db: "admin"}]})
  3. İsteğe bağlı: profiling'i açın.

    javascript
    db.getSiblingDB("<database>").setProfilingLevel(1, {slowms: 100})
  4. Girişi test edin.

    bash
    mongosh --quiet "mongodb://<host>:27017/admin?directConnection=true" -u spitfire_monitor -p '<password>' --eval 'print("OK: serverStatus " + db.adminCommand({serverStatus: 1}).ok)'
  5. Altyapı izleme → MongoDB altında ekleyin, adres <host>:27017.

Not

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

  1. Komutu CouchDB'ye erişen bir makinede çalıştırın, soruları yanıtlayın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/couchdb.sh?t=<token>" -o /tmp/sf-couchdb.sh && bash /tmp/sf-couchdb.sh
  2. Bu satırı görünce bitti.

    text
    OK: CouchDB Spitfire'a eklendi, ilk metrikler ~1 dk içinde
Not

Ü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

  1. İzleme kullanıcısını oluşturun.

    bash
    curl -u admin -X PUT 'http://<host>:5984/_node/_local/_config/admins/spitfire_monitor' -d '"<password>"'
  2. Bağlantıyı deneyin.

    bash
    curl -fsS -u spitfire_monitor 'http://<host>:5984/_node/_local/_stats/couchdb/request_time' >/dev/null && echo 'OK: spitfire_monitor bağlandı'
  3. Altyapı izleme → CouchDB → Manuel kurulum ile ekleyin.

Redis

Hızlı kurulum (redis-cli olan herhangi bir makinede)

  1. Komutu kopyalayın, terminale yapıştırıp çalıştırın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/redis.sh?t=<token>" -o /tmp/sf-redis.sh && bash /tmp/sf-redis.sh
  2. OK: redis ... satırını görünce bitti.

Not

Ü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

  1. Salt okunur ACL kullanıcısını oluşturun.

    bash
    redis-cli -h <host> -p 6379 --askpass ACL SETUSER spitfire_monitor reset on '><password>' -@all +info +ping +slowlog
  2. Her replica'da tekrarlayın.

    bash
    redis-cli -h <replica-host> -p 6379 --askpass ACL SETUSER spitfire_monitor reset on '><password>' -@all +info +ping +slowlog
  3. Girişi test edin.

    bash
    redis-cli -h <host> -p 6379 --user spitfire_monitor --pass '<password>' --no-auth-warning SLOWLOG LEN && echo "OK: spitfire_monitor"
  4. Altyapı izleme → Redis altında ekleyin, adres <host>:6379.

Not

+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)

  1. Komutu kopyalayın, terminale yapıştırıp çalıştırın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/couchbase.sh?t=<token>" -o /tmp/sf-couchbase.sh && bash /tmp/sf-couchbase.sh
  2. Windows'ta bunun yerine PowerShell'de çalıştırın.

    powershell
    Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/couchbase.ps1?t=<token>" -OutFile "$env:TEMP\sf-couchbase.ps1"; & "$env:TEMP\sf-couchbase.ps1"
  3. OK: couchbase ... satırını görünce bitti.

Not

Ü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

  1. Yalnızca stats okuyan kullanıcıyı oluşturun.

    bash
    /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 local
  2. Tower makinesinden test edin.

    bash
    curl -fsS -o /dev/null -u spitfire_monitor:'<password>' http://<host>:8091/metrics && echo "OK: spitfire_monitor"
  3. Altyapı izleme → Couchbase altında ekleyin, adres http://<host>:8091.

Not

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).

  1. ClickHouse sunucusunda Prometheus endpoint'ini açın:

    bash
    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-server

    Docker'da: aynı dosyayı container'ın /etc/clickhouse-server/config.d/ klasörüne koyup docker restart <container> çalıştırın (sayfadaki Docker kutusu hazır komutu verir).

  2. Kontrol (sayı 0'dan büyük olmalı):

    bash
    curl -s http://localhost:9363/metrics | grep -c ClickHouseProfileEvents_
  3. Salt okunur kullanıcıyı clickhouse-client ile oluşturun:

    sql
    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 TABLES yalnız tablo adlarını ve part sayılarını gösterir; tablo verisini okuyamaz.

  4. 2. adımda adres (http://<host>:8123), kullanıcı ve şifreyi girin. Prometheus endpoint boşsa http://<host>:9363/metrics kullanılır. Veritabanları boşsa hepsi okunur.

  5. 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

  1. Komutu kopyalayın, bir Cassandra node'unda root olarak çalıştırın, soruları yanıtlayın.
    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/cassandra.sh?t=<token>" -o /tmp/sf-cassandra.sh && sudo bash /tmp/sf-cassandra.sh
    (Üründe bu satır adres ve yeni bir token ile hazır gelir.)
  2. OK: ... satırını görünce bitti.

Elle kurulum (her node'da sırayla, root olarak)

  1. Klasörü oluşturun.
    bash
    sudo mkdir -p /opt/jmx-exporter
  2. Javaagent'ı indirin.
    bash
    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
  3. Kural dosyasını yazın.
    bash
    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
  4. JVM seçeneğini bir kez ekleyin.
    bash
    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
  5. Node'u yeniden başlatın.
    bash
    nodetool drain && sudo systemctl restart cassandra
  6. Node UN olana kadar bekleyin.
    bash
    until nodetool status 2>/dev/null | grep -q '^UN'; do sleep 5; done; echo 'OK: node UN'
  7. Exporter'ı kontrol edin.
    bash
    curl -s http://localhost:7070/metrics | grep -q cassandra_gossip_up_endpoints && echo 'OK: Cassandra exporter'
  8. Sonraki node'da 1. adımdan başlayın.
    bash
    nodetool status
  9. Spitfire'da kaynağı ekleyin: Altyapı izleme → Cassandra, her node'un adresi.
    text
    cass-1.corp:7070, cass-2.corp:7070, cass-3.corp:7070
  10. Tower makinesinden erişimi kontrol edin.
bash
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:

  1. Ayarı görün:

    bash
    sudo -u postgres psql -c "SHOW shared_preload_libraries;"
  2. Boşsa ekleyin (doluysa mevcut değerin sonuna ,pg_stat_statements ekleyerek yazın):

    bash
    sudo -u postgres psql -c "ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';"
  3. Yeniden başlatın:

    bash
    sudo systemctl restart postgresql
  4. Extension'ı izlenen veritabanında açın (postgres yerine veritabanınızın adı):

    bash
    sudo -u postgres psql -d postgres -c "CREATE EXTENSION IF NOT EXISTS pg_stat_statements;"
  5. Kontrol: sayfada Yenile; tablo dolmalı.

MySQL: performance_schema

MySQL 5.7+ ve 8'de açıktır. Kapalıysa:

  1. Ayarı yazın:

    bash
    printf '[mysqld]\nperformance_schema=ON\n' | sudo tee /etc/mysql/conf.d/spitfire-performance-schema.cnf >/dev/null
  2. Yeniden başlatın:

    bash
    sudo systemctl restart mysql
  3. Kontrol: 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:

  1. Log'u diske yazdırın:

    bash
    clickhouse-client --query "SYSTEM FLUSH LOGS"
  2. Kontrol (1 yazmalı):

    bash
    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:

  1. SYS olarak bağlanın:

    bash
    sqlplus / as sysdba
  2. View'lara yetki verin (FREEPDB1 yerine kendi PDB'nizi yazın; servis bir PDB değilse ilk satırı atlayın):

    sql
    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;
  3. Kontrol: sayfada Yenile; tablo dolar.

Not

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:

  1. PRIMARY'ye admin olarak bağlanın:

    bash
    mongosh "mongodb://<host>:27017/admin?directConnection=true" -u admin -p
  2. Rolü verin:

    javascript
    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:

  1. Yukarıdaki 1. adımdaki gibi bağlanın.

  2. Veritabanında profiling'i açın (100 ms'den uzun operation'lar kaydedilir):

    javascript
    db.getSiblingDB("<database>").setProfilingLevel(1, {slowms: 100})
  3. 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.

  1. Altyapı izleme → kaynağın satırında Dashboard.
  2. Üstteki Tüm metrikler sekmesine tıklayın.
  3. Arama kutusuna metriğin adından bir parça yazın, ör. commits ya da http_requests.
  4. Listeden metriğe tıklayın. Grafik çizilir; counter'lar saniyedeki artış olarak gösterilir.
  5. İsterseniz attribute kutularından bir değer seçin ya da Böl ile her değeri ayrı çizgi yapın.
  6. Panoya ekle → Başlık girin.
  7. Eşik isterseniz Eşik bulgusu → üstünde ya da altında → değer → Uyarı ya da Kritik.
  8. Panoya ekle ile kaydedin.
  9. 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ü

  1. Kaynaklar tablosunda Son test = Bağlandı.
  2. 1-2 dakika içinde Son veri dolu, dashboard'da çizgiler var.
  3. Tüm metrikler sekmesi kaynağın metriklerini listeliyor.