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 — Kafka, RabbitMQ ve ActiveMQ

Kafka, RabbitMQ ve ActiveMQ metrikleri Tower üzerinden toplanır. Ekleme adımları veritabanlarıyla aynıdır.

Kafka

Hızlı kurulum

  1. Komutu bir Kafka broker'ında çalıştırın, soruları yanıtlayın.

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

    text
    OK: Kafka 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 SASL yöntemini sorar; SCRAM'da spitfire_monitor'ü oluşturur, ACL varsa yalnız Describe yetkisi verir. İsterseniz broker'a JMX exporter'ı kurar (Kafka yeniden başlar).

Manuel kurulum

  1. SCRAM kullanıyorsanız kullanıcıyı oluşturun.

    bash
    /opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type users --entity-name spitfire_monitor --add-config 'SCRAM-SHA-512=[iterations=8192,password=<password>]'
  2. ACL varsa Describe yetkilerini verin.

    bash
    /opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:spitfire_monitor --operation Describe --cluster
    /opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:spitfire_monitor --operation Describe --topic '*'
    /opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:spitfire_monitor --operation Describe --group '*'
  3. Broker'ın yanıt verdiğini deneyin.

    bash
    /opt/kafka/bin/kafka-broker-api-versions.sh --bootstrap-server <host>:9092 >/dev/null && echo 'OK: Kafka yanıt verdi'
  4. Altyapı izleme → Kafka → Manuel kurulum ile ekleyin.

Not

Kafka başka bir klasördeyse /opt/kafka kısmını değiştirin. Adres alanına broker'ları virgülle yazın (kafka1:9092,kafka2:9092). SASL mekanizması none dışındaysa kullanıcı ve şifre gerekir.

Broker metrikleri (JMX exporter, isteğe bağlı)

Bytes/mesaj hızı, request p99, under-replicated ve offline partition'lar, controller, heap ve GC broker'ın JMX'inden gelir. Her broker'da Prometheus JMX exporter javaagent olarak çalışır. Adımları her broker'da yapın:

  1. Javaagent'ı indirin:

    bash
    sudo mkdir -p /opt/jmx-exporter && 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
  2. Config dosyasını yazın (sayfadaki Broker metrikleri (JMX exporter) kutusunda da vardır):

    bash
    sudo tee /opt/jmx-exporter/kafka-jmx.yml >/dev/null <<'EOF'
    # Spitfire: Kafka broker metrics for the Prometheus JMX exporter javaagent.
    lowercaseOutputName: false
    includeObjectNames:
      - "kafka.server:type=BrokerTopicMetrics,*"
      - "kafka.server:type=ReplicaManager,*"
      - "kafka.controller:type=KafkaController,*"
      - "kafka.network:type=RequestMetrics,name=TotalTimeMs,*"
      - "java.lang:type=Memory"
      - "java.lang:type=GarbageCollector,*"
    rules:
      - pattern: 'kafka.server<type=BrokerTopicMetrics, name=BytesInPerSec><>Count'
        name: kafka_broker_bytes_in
        type: GAUGE
      - pattern: 'kafka.server<type=BrokerTopicMetrics, name=BytesOutPerSec><>Count'
        name: kafka_broker_bytes_out
        type: GAUGE
      - pattern: 'kafka.server<type=BrokerTopicMetrics, name=MessagesInPerSec><>Count'
        name: kafka_broker_messages_in
        type: GAUGE
      - pattern: 'kafka.server<type=BrokerTopicMetrics, name=TotalProduceRequestsPerSec><>Count'
        name: kafka_broker_produce_requests
        type: GAUGE
      - pattern: 'kafka.server<type=BrokerTopicMetrics, name=TotalFetchRequestsPerSec><>Count'
        name: kafka_broker_fetch_requests
        type: GAUGE
      - pattern: 'kafka.network<type=RequestMetrics, name=TotalTimeMs, request=(Produce|FetchConsumer|FetchFollower)><>99thPercentile'
        name: kafka_broker_request_p99_ms
        labels:
          request: "$1"
        type: GAUGE
      - pattern: 'kafka.server<type=ReplicaManager, name=UnderReplicatedPartitions><>Value'
        name: kafka_broker_under_replicated_partitions
        type: GAUGE
      - pattern: 'kafka.controller<type=KafkaController, name=OfflinePartitionsCount><>Value'
        name: kafka_broker_offline_partitions
        type: GAUGE
      - pattern: 'kafka.controller<type=KafkaController, name=ActiveControllerCount><>Value'
        name: kafka_broker_active_controllers
        type: GAUGE
      - pattern: 'java.lang<type=Memory><HeapMemoryUsage>used'
        name: kafka_broker_heap_used_bytes
        type: GAUGE
      - pattern: 'java.lang<(?:type=GarbageCollector, name=([^,>]+)|name=([^,>]+), type=GarbageCollector)><>CollectionTime'
        name: kafka_broker_gc_time_ms
        labels:
          gc: "$1$2"
        type: GAUGE
    EOF
  3. systemd ile kurulu Kafka'da agent'ı ekleyip yeniden başlatın (servis adı kafka değilse değiştirin):

    bash
    sudo mkdir -p /etc/systemd/system/kafka.service.d && sudo tee /etc/systemd/system/kafka.service.d/spitfire-jmx.conf >/dev/null <<'EOF'
    [Service]
    Environment="KAFKA_OPTS=-javaagent:/opt/jmx-exporter/jmx_prometheus_javaagent.jar=7071:/opt/jmx-exporter/kafka-jmx.yml"
    EOF
    sudo systemctl daemon-reload && sudo systemctl restart kafka

    Docker compose'da broker servisine ekleyin, sonra docker compose up -d:

    yaml
        environment:
          KAFKA_OPTS: "-javaagent:/opt/jmx-exporter/jmx_prometheus_javaagent.jar=7071:/opt/jmx-exporter/kafka-jmx.yml"
        volumes:
          - /opt/jmx-exporter:/opt/jmx-exporter:ro
        ports:
          - "7071:7071"
  4. Kontrol (sayı 0'dan büyük olmalı):

    bash
    curl -s http://localhost:7071/metrics | grep -c kafka_broker_
  5. Kafka kaynağında JMX exporter'lar alanına exporter adreslerini virgülle yazın (kafka1:7071,kafka2:7071) → Kaydet.

Consumer lag tablosu

Kafka dashboard'unun altında Consumer lag tablosu her consumer group'un toplam lag'ini gösterir, en geride olan üstte. Bir topic'e tıklayınca partition'ları açılır. Değerler son 15 dakikanın en yeni noktalarıdır; lag sınırını (10.000) aşan group'un değeri uyarı renginde görünür.

RabbitMQ

Hızlı kurulum (bir RabbitMQ node'unda)

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

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

    powershell
    Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/rabbitmq.ps1?t=<token>" -OutFile "$env:TEMP\sf-rabbitmq.ps1"; & "$env:TEMP\sf-rabbitmq.ps1"
  3. OK: rabbitmq ... 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 management plugin'i açmadan önce sorar, spitfire_monitor'ü monitoring tag'iyle oluşturur (varsa yeni şifreyi verir), her vhost'a okuma izni verir ve management API'yi test eder.

Manuel kurulum

  1. Management plugin'i açın.

    bash
    rabbitmq-plugins enable rabbitmq_management
  2. Monitoring kullanıcısını oluşturun.

    bash
    rabbitmqctl add_user spitfire_monitor '<password>' && rabbitmqctl set_user_tags spitfire_monitor monitoring
  3. Her vhost'a okuma izni verin.

    bash
    for v in $(rabbitmqctl -q --no-table-headers list_vhosts name); do rabbitmqctl set_permissions -p "$v" spitfire_monitor '' '' '.*'; done
  4. Management API'yi test edin.

    bash
    curl -fsS -o /dev/null -u spitfire_monitor:'<password>' http://<host>:15672/api/overview && echo "OK: spitfire_monitor"
  5. Altyapı izleme → RabbitMQ altında ekleyin, adres http://<host>:15672.

Not

monitoring tag'i management API'yi okur; '' '' '.*' izni kuyrukları okur ama yapılandıramaz ve publish edemez. Her vhost'ta okuma izni kuyruk tablosunun tüm kuyrukları göstermesini sağlar.

Canlı görünüm

RabbitMQ dashboard'unda Canlı görünüm kartı vardır. Şimdi oku her kuyruğu ready ve unacked mesajları, consumer sayısı ve publish/deliver hızlarıyla gösterir; sıralamak için sütun başlığına tıklayın (tersine çevirmek için tekrar). Mesajı olup consumer'ı olmayan kuyruk sarı işaretlenir. Yanında node'lar bellek, disk, file descriptor ve socket kullanımlarıyla görünür.

ActiveMQ

ActiveMQ Classic ve Artemis tek bir ActiveMQ izlenen sistemdir (Beta). Tower broker'ın web konsolundaki Jolokia REST API'sini doğrudan okur; Collector gerekmez. Bir broker ya da bir cluster tek izlenen sistem sayılır: cluster'ın ya da primary/backup çiftinin adreslerini virgülle verin.

Hızlı kurulum (broker sunucusunda)

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

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

    powershell
    Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/activemq.ps1?t=<token>" -OutFile "$env:TEMP\sf-activemq.ps1"; & "$env:TEMP\sf-activemq.ps1"
  3. OK: activemq ... 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 Classic ya da Artemis'i sorar, her dosyayı bir kez .spitfire.bak olarak yedekler, yalnız değişen dosyayı yazar ve broker'ı yalnız gerekiyorsa, onay alarak yeniden başlatır. İzleme kullanıcısının parolasını üretir ve yalnız Spitfire'a gönderir; admin parolasını sormaz.

Manuel kurulum: ActiveMQ Classic (/opt/apache-activemq)

  1. Dosyaları yedekleyin.

    bash
    for f in users.properties groups.properties jolokia-access.xml; do cp -n /opt/apache-activemq/conf/$f /opt/apache-activemq/conf/$f.spitfire.bak; done
  2. İzleme kullanıcısını ekleyin.

    bash
    grep -q '^spitfire_monitor=' /opt/apache-activemq/conf/users.properties || printf '\nspitfire_monitor=%s\n' '<password>' >> /opt/apache-activemq/conf/users.properties
  3. Kullanıcıyı users grubuna ekleyin.

    bash
    grep -q '^users=.*spitfire_monitor' /opt/apache-activemq/conf/groups.properties || { grep -q '^users=' /opt/apache-activemq/conf/groups.properties && sed -i 's/^users=\(..*\)$/&,spitfire_monitor/; s/^users=$/users=spitfire_monitor/' /opt/apache-activemq/conf/groups.properties || printf '\nusers=spitfire_monitor\n' >> /opt/apache-activemq/conf/groups.properties; }
  4. Jolokia'yı salt okunur yapın.

    bash
    printf '%s\n' '<?xml version="1.0" encoding="UTF-8"?>' '<restrict>' '  <cors><strict-checking/></cors>' '  <commands><command>read</command><command>list</command><command>version</command><command>search</command></commands>' '</restrict>' > /opt/apache-activemq/conf/jolokia-access.xml
  5. Broker'ı yeniden başlatın.

    bash
    /opt/apache-activemq/bin/activemq restart
  6. Okumayı test edin.

    bash
    curl -fsS -u 'spitfire_monitor:<password>' -H 'Origin: http://localhost' 'http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=*/BrokerVersion' | grep -q '"status":200' && echo "OK: spitfire_monitor"
  7. Altyapı izleme → ActiveMQ altında ekleyin: tür classic, adres http://<host>:8161.

Manuel kurulum: ActiveMQ Artemis (/var/lib/artemis-instance)

  1. Dosyaları yedekleyin.

    bash
    for f in artemis-users.properties artemis-roles.properties artemis.profile management.xml; do cp -n /var/lib/artemis-instance/etc/$f /var/lib/artemis-instance/etc/$f.spitfire.bak; done
  2. İzleme kullanıcısını hash'li parolayla ekleyin.

    bash
    grep -q '^spitfire_monitor *=' /var/lib/artemis-instance/etc/artemis-users.properties || printf '\nspitfire_monitor = ENC(%s)\n' "$(/var/lib/artemis-instance/bin/artemis mask --hash '<password>' | sed -n 's/^result: //p')" >> /var/lib/artemis-instance/etc/artemis-users.properties
  3. spitfire rolünü verin.

    bash
    grep -q '^spitfire *=' /var/lib/artemis-instance/etc/artemis-roles.properties || printf '\nspitfire = spitfire_monitor\n' >> /var/lib/artemis-instance/etc/artemis-roles.properties
  4. Rolü konsola ekleyin.

    bash
    grep -q '^HAWTIO_ROLES=.*spitfire' /var/lib/artemis-instance/etc/artemis.profile || sed -i "s/^HAWTIO_ROLES='\([^']*\)'/HAWTIO_ROLES='\1,spitfire'/" /var/lib/artemis-instance/etc/artemis.profile
  5. Role salt okunur MBean izni verin.

    bash
    grep -q 'roles="amq,spitfire"' /var/lib/artemis-instance/etc/management.xml || sed -i 's#<match domain="org.apache.activemq.artemis">#&<access method="getFirstMessageAsJSON" roles="amq"/><access method="get*" roles="amq,spitfire"/><access method="is*" roles="amq,spitfire"/>#' /var/lib/artemis-instance/etc/management.xml
  6. Broker'ı yeniden başlatın.

    bash
    /var/lib/artemis-instance/bin/artemis-service restart
  7. Okumayı test edin.

    bash
    curl -fsS -u 'spitfire_monitor:<password>' -H 'Origin: http://localhost' 'http://localhost:8161/console/jolokia/read/org.apache.activemq.artemis:broker=*/Version' | grep -q '"status":200' && echo "OK: spitfire_monitor"
  8. Altyapı izleme → ActiveMQ altında ekleyin: tür artemis, adres http://<host>:8161.

Not

Classic'te izleme kullanıcısı yalnız read, list, version ve search komutlarını çalıştırabilir; queue silme, mesaj gönderme gibi işlemler (exec) Jolokia'da herkese kapanır, konsolun bu düğmeleri de çalışmaz. Classic'in users grubu web konsolun salt okunur sayfalarını açabilir; bu sayfalar mesaj içeriğini gösterebilir. Artemis'te spitfire rolü yalnız get* ve is* okur, getFirstMessageAsJSON (mesaj içeriği) amq'ya kalır ve işlem çalıştıramaz. Artemis kullanıcı ve rol dosyalarını kendisi yeniden okur; artemis.profile ve management.xml için yeniden başlatma gerekir. Cluster'da adımları her broker'da tekrarlayın ve broker'ları tek tek başlatın. Web konsol yalnız localhost'u dinliyorsa (etc/bootstrap.xml, Classic'te conf/jetty.xml) Tower'ın erişeceği adrese açın.

Queue tablosu

ActiveMQ dashboard'unda en derin 20 queue'nun tablosu vardır: bekleyen mesaj, consumer, in-flight, en eski mesajın yaşı (Artemis) ve DLQ'lar. Mesajı olup consumer'ı olmayan queue consumer yok etiketiyle işaretlenir. Backup broker yalnız ayakta sayılır; metrikleri primary'den gelir.

Eşik bulguları

Teknoloji Bulgu
Kafka Bir consumer group'un lag'i 10.000'in üstünde (uyarı)
Kafka Under-replicated partition var (uyarı, JMX)
Kafka Offline partition var (kritik, JMX)
Kafka Aktif controller sayısı 1 değil (kritik, JMX)
RabbitMQ Kuyrukta bekleyen (ready) mesaj 10.000'in üstünde (uyarı)
RabbitMQ Bir node'da bellek ya da disk alarmı: publisher'lar bloklanır (kritik)
RabbitMQ Unacknowledged mesajlar 15 dakikada 1000'den fazla büyüyor (uyarı)
RabbitMQ Kuyrukta mesaj var ama consumer yok (uyarı, canlı görünüm)
RabbitMQ Bir cluster node'u çalışmıyor (kritik, canlı görünüm)
ActiveMQ Broker yanıt vermiyor (kritik)
ActiveMQ Bellek, store ya da temp kullanımı %80'in üstünde (uyarı), %95'in üstünde (kritik: flow control producer'ları durdurur)
ActiveMQ Bir queue'da 10.000'den fazla mesaj (uyarı)
ActiveMQ Mesajı olan ama consumer'ı olmayan queue (uyarı)
ActiveMQ DLQ büyüyor ya da mesajların süresi doluyor, 15 dakikada (uyarı)

Başarı kontrolü

  1. Son test = Bağlandı.
  2. Kafka dashboard'unda Broker sayısı broker adedinize eşit; RabbitMQ'da Consumer sayısı çiziliyor (RabbitMQ metrikleri kuyruk başınadır: hiç kuyruk yoksa dashboard boş kalır).
  3. ActiveMQ dashboard'unda Broker erişilebilir 1 ve queue tablosu dolu.