Monedula

Questa pagina è stata tradotta automaticamente dall'inglese. Leggi l'originale

monedula-metrics-reporter v0.10.0, AGPL-3.0

Metriche Kafka, direttamente in OpenTelemetry

monedula-metrics-reporter gira dentro il broker e invia le metriche via OTLP al tuo collector: entrambi i registry di metriche di Kafka, le metriche JVM e la telemetria dei client KIP-714, con l'identità del broker come label. Se il collector sparisce, Kafka non se ne accorge.

Maven Central
VERSION=0.10.0
curl -L -o monedula-metrics-reporter-${VERSION}.jar \
  https://repo1.maven.org/maven2/dev/monedula/monedula-metrics-reporter/${VERSION}/monedula-metrics-reporter-${VERSION}.jar
GitHub Release
VERSION=0.10.0
curl -L -o monedula-metrics-reporter-${VERSION}.jar \
  https://github.com/monedula-dev/monedula-metrics-reporter/releases/download/v${VERSION}/monedula-metrics-reporter-${VERSION}.jar
server.properties
metric.reporters=dev.monedula.metricsreporter.OtlpMetricReporter

otlp.metric.reporter.endpoint=http://otel-collector:4317
otlp.metric.reporter.transport=grpc
terminale
cp monedula-metrics-reporter-0.10.0.jar $KAFKA_HOME/libs/# then add the lines above to server.properties# every series carries the broker's cluster and node IDs as resource attributes

Il problema

La maggior parte delle metriche Kafka fa il giro lungo.

Lo stack abituale aggancia un JMX exporter a ogni broker: rilegge le metriche di Kafka dagli MBean JMX, le mappa su nomi di metriche con file di regole e le espone per uno scrape o le inoltra a un collector.

monedula-metrics-reporter si collega all'interfaccia MetricsReporter di Kafka stesso e parla OTLP direttamente con il collector.

3
pipeline di esportazione: Kafka SPI e Yammer, runtime della JVM e telemetria dei client KIP-714
da 3.7 a 4.3
versioni di Apache Kafka testate per la 0.10.0, su JDK 17 e 21

Come funziona

  1. Broker Kafka registry Kafka SPI e Yammer
    Client KIP-714 producer e consumer inviano tramite il broker
  2. monedula-metrics-reporter in-process, asincrono
  3. OpenTelemetry Collector OTLP su gRPC o HTTP
  4. Prometheus, Grafana, qualsiasi backend OTLP instradamento e fan-out avvengono nel collector
Le metriche passano da Kafka, attraverso il reporter in-process, a un OpenTelemetry Collector, che le instrada verso qualsiasi backend.

Kafka continua a funzionare quando il collector non è disponibile

Le callback delle metriche aggiornano solo una mappa in memoria; tutto l'I/O di rete avviene su un thread daemon. Non c'è una coda di retry né memoria illimitata, quindi un collector lento o assente non rallenta mai le richieste di produce o fetch.

Come funziona il design fail-safe (in inglese)

  1. Collector non raggiungibile
  2. La chiamata di export va in timeout
  3. Batch scartato, contato nelle metriche di automonitoraggio
  4. Il tick successivo riparte da zero; Kafka non aspetta mai

Metriche SPI e Yammer da un solo plugin

I broker Kafka espongono le metriche attraverso due sistemi paralleli. Diversi segnali del broker si registrano solo nel registry legacy Yammer, quindi un reporter solo SPI li perde. Questo plugin si aggancia a entrambi con un'unica configurazione, e lo stesso JAR gira senza modifiche sui client.

  • UnderReplicatedPartitions
  • OfflinePartitionsCount
  • ActiveControllerCount
  • BrokerTopicMetrics per topic

KIP-714

Metriche dei client senza toccare i client

Sui broker, il plugin riceve anche la telemetria che i client KIP-714 inviano, come la latenza delle richieste lato client e i tempi di rebalance, e la inoltra allo stesso collector. Le serie dei client portano l'identità del broker e il client id, così si uniscono alle serie del broker in PromQL.

Raccogliere le metriche dei client (in inglese)

Label sulle metriche dei client inoltrate
kafka_cluster_id, kafka_node_idattivato per impostazione predefinita
client_idattivato per impostazione predefinita
client_instance_iddisattivato per impostazione predefinita, alta cardinalità
principal e indirizzo del clientdisattivato per impostazione predefinita, dati personali

Dashboard incluse

Il quickstart avvia Kafka, il reporter, un OpenTelemetry Collector, Prometheus e Grafana con Docker Compose, con dashboard Grafana e regole di alert Prometheus pronte all'uso.

Il quickstart di Grafana (in inglese)

Dashboard di panoramica Grafana delle metriche Kafka esportate da monedula-metrics-reporter

Installazione

Maven Central
VERSION=0.10.0
curl -L -o monedula-metrics-reporter-${VERSION}.jar \
  https://repo1.maven.org/maven2/dev/monedula/monedula-metrics-reporter/${VERSION}/monedula-metrics-reporter-${VERSION}.jar
GitHub Release
VERSION=0.10.0
curl -L -o monedula-metrics-reporter-${VERSION}.jar \
  https://github.com/monedula-dev/monedula-metrics-reporter/releases/download/v${VERSION}/monedula-metrics-reporter-${VERSION}.jar

Coordinate dev.monedula:monedula-metrics-reporter. Ogni release su GitHub include anche il JAR con un SBOM CycloneDX e le firme Sigstore.

Domande

monedula-metrics-reporter è gratuito e posso usarlo al lavoro?
Sì. È sotto licenza AGPL-3.0, senza edizioni a pagamento, ed eseguirlo nei tuoi broker e client non ti obbliga a condividere il tuo codice o la tua configurazione: gli obblighi della AGPL si applicano quando lo distribuisci, modificato o meno, o permetti ad altri di usarne una versione modificata attraverso una rete.
Le mie applicazioni client vanno modificate per le metriche dei client?
No. Il push KIP-714 è attivo per impostazione predefinita nel client Java e in librdkafka 2.5 e successivi. Lo attivi in modo centralizzato con una subscription client-metrics lato broker, e il reporter inoltra ciò che i client inviano. Vedi raccogliere le metriche dei client (in inglese).
Mi serve Prometheus?
No. Il reporter parla OTLP con un OpenTelemetry Collector, e il collector può esportare verso qualsiasi backend supportato. Instradamento, fan-out ed exporter dei vendor si configurano nel collector.
Quali versioni di Java e Kafka supporta?
Java 17 o successivo e Apache Kafka da 3.7.0 a 4.3.0, su broker e client: per la 0.10.0, la CI ha testato JDK 17 e 21 con Kafka 3.7.0, 3.9.0, 4.2.0 e 4.3.0. Le versioni di Kafka precedenti alla 3.7 non hanno l'interfaccia ClientTelemetry che il plugin implementa e non vengono testate. Vedi la compatibilità (in inglese).
In cosa si differenzia da jmx_exporter?
Entrambi possono girare dentro la JVM di Kafka. monedula-metrics-reporter non ha bisogno di file di regole: ricava i nomi da quelli di Kafka, etichetta le serie del broker con gli ID di cluster e di nodo, e inoltra le metriche dei client KIP-714. La pagina di confronto (in inglese) copre le altre opzioni.

Supporto

Aiuto da chi sviluppa lo strumento

Possiamo aiutarti a gestire monedula-metrics-reporter su un'infrastruttura estesa, dalla progettazione all'operatività quotidiana.

Parte di
Monedula Flock

Altri strumenti gratuiti per Apache Kafka, dallo stesso team. Informazioni su Flock