Monedula

Diese Seite wurde maschinell aus dem Englischen übersetzt. Original lesen

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

Kafka-Metriken direkt an OpenTelemetry

monedula-metrics-reporter läuft im Broker und pusht Metriken über OTLP an Ihren Collector: beide Kafka-Metrik-Registries, JVM-Metriken und KIP-714-Client-Telemetrie, mit der Broker-Identität als Labels. Fällt der Collector weg, merkt Kafka nichts davon.

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
Terminal
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

Das Problem

Die meisten Kafka-Metriken nehmen einen Umweg.

Der übliche Stack hängt an jeden Broker einen JMX-Exporter: Er liest Kafkas Metriken wieder aus JMX-MBeans aus, bildet sie mit Regeldateien auf Metriknamen ab und stellt sie für einen Scrape bereit oder pusht sie weiter an einen Collector.

monedula-metrics-reporter klinkt sich in Kafkas eigenes MetricsReporter-Interface ein und spricht OTLP direkt mit dem Collector.

3
Export-Pipelines: Kafka SPI und Yammer, JVM-Runtime und KIP-714-Client-Telemetrie
3.7 bis 4.3
für 0.10.0 getestete Apache-Kafka-Versionen, auf JDK 17 und 21

So funktioniert es

  1. Kafka-Broker Kafka-SPI- und Yammer-Registry
    KIP-714-Clients Producer und Consumer pushen über den Broker
  2. monedula-metrics-reporter In-Process, asynchron
  3. OpenTelemetry Collector OTLP über gRPC oder HTTP
  4. Prometheus, Grafana, jedes OTLP-Backend Routing und Fan-out liegen im Collector
Metriken fließen von Kafka über den In-Process-Reporter zu einem OpenTelemetry Collector, der sie an ein beliebiges Backend weiterleitet.

Kafka läuft weiter, wenn der Collector ausfällt

Metrik-Callbacks aktualisieren nur eine Map im Speicher; die gesamte Netzwerk-I/O läuft auf einem Daemon-Thread. Es gibt keine Retry-Queue und keinen unbegrenzten Speicher, sodass ein langsamer oder fehlender Collector Produce- und Fetch-Requests nie aufhält.

Wie das Fail-safe-Design funktioniert (auf Englisch)

  1. Collector nicht erreichbar
  2. Export-Aufruf läuft in einen Timeout
  3. Batch verworfen, in den Self-Monitoring-Metriken gezählt
  4. Nächster Tick beginnt von vorn; Kafka wartet nie

SPI- und Yammer-Metriken aus einem Plugin

Kafka-Broker stellen Metriken über zwei parallele Systeme bereit. Mehrere Broker-Signale registrieren sich nur in der alten Yammer-Registry, sodass ein reiner SPI-Reporter sie verpasst. Dieses Plugin hängt sich mit einer Konfiguration an beide, und dieselbe JAR läuft unverändert auf Clients.

  • UnderReplicatedPartitions
  • OfflinePartitionsCount
  • ActiveControllerCount
  • BrokerTopicMetrics pro Topic

KIP-714

Client-Metriken, ohne die Clients anzufassen

Auf Brokern empfängt das Plugin auch die Telemetrie, die KIP-714-Clients pushen, etwa clientseitige Request-Latenz und Rebalance-Zeiten, und leitet sie an denselben Collector weiter. Client-Serien tragen die Identität des Brokers und die Client-ID, sodass sie sich in PromQL mit Broker-Serien verknüpfen lassen.

Client-Metriken sammeln (auf Englisch)

Labels an weitergeleiteten Client-Metriken
kafka_cluster_id, kafka_node_idstandardmäßig aktiv
client_idstandardmäßig aktiv
client_instance_idOpt-in, hohe Kardinalität
Principal und Client-AdresseOpt-in, personenbezogene Daten

Dashboards inklusive

Der Quickstart startet Kafka, den Reporter, einen OpenTelemetry Collector, Prometheus und Grafana mit Docker Compose, mit einsatzbereiten Grafana-Dashboards und Prometheus-Alert-Regeln.

Der Grafana-Quickstart (auf Englisch)

Grafana-Übersichtsdashboard mit Kafka-Metriken, exportiert von monedula-metrics-reporter

Installation

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

Koordinaten dev.monedula:monedula-metrics-reporter. Jedes GitHub-Release enthält außerdem die JAR mit einer CycloneDX-SBOM und Sigstore-Signaturen.

Fragen

Ist monedula-metrics-reporter kostenlos, und darf ich es bei der Arbeit nutzen?
Ja. Es steht unter der AGPL-3.0, ohne kostenpflichtige Edition, und wenn Sie es in Ihren eigenen Brokern und Clients betreiben, müssen Sie weder Ihren Code noch Ihre Konfiguration offenlegen: Pflichten aus der AGPL greifen, wenn Sie es verbreiten, ob verändert oder nicht, oder anderen ermöglichen, eine veränderte Version über ein Netzwerk zu nutzen.
Müssen meine Client-Anwendungen für Client-Metriken geändert werden?
Nein. Der KIP-714-Push ist im Java-Client und in librdkafka ab 2.5 standardmäßig aktiv. Sie aktivieren ihn zentral mit einem brokerseitigen client-metrics-Abonnement, und der Reporter leitet weiter, was die Clients pushen. Siehe Client-Metriken sammeln (auf Englisch).
Brauche ich Prometheus?
Nein. Der Reporter spricht OTLP mit einem OpenTelemetry Collector, und der Collector kann an jedes Backend exportieren, das er unterstützt. Routing, Fan-out und Hersteller-Exporter werden im Collector konfiguriert.
Welche Java- und Kafka-Versionen werden unterstützt?
Java 17 oder neuer und Apache Kafka 3.7.0 bis 4.3.0, auf Brokern und Clients: Für 0.10.0 hat die CI JDK 17 und 21 gegen Kafka 3.7.0, 3.9.0, 4.2.0 und 4.3.0 getestet. Kafka-Versionen vor 3.7 fehlt das ClientTelemetry-Interface, das das Plugin implementiert, und sie werden nicht getestet. Siehe Kompatibilität (auf Englisch).
Was unterscheidet es von jmx_exporter?
Beide können in der Kafka-JVM laufen. monedula-metrics-reporter braucht keine Regeldatei: Es leitet die Namen aus Kafkas eigenen ab, versieht Broker-Serien mit Cluster- und Node-ID als Labels und leitet KIP-714-Client-Metriken weiter. Die Vergleichsseite (auf Englisch) behandelt die anderen Optionen.

Support

Hilfe von den Entwicklern des Tools

Wir können Ihnen helfen, monedula-metrics-reporter in einer großen Umgebung einzusetzen, vom Design bis zum täglichen Betrieb.

Teil von
Monedula Flock

Weitere kostenlose Tools für Apache Kafka vom selben Team. Über Flock