Monedula

Esta página se tradujo automáticamente del inglés. Leer el original

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

Métricas de Kafka, directas a OpenTelemetry

monedula-metrics-reporter se ejecuta dentro del broker y envía métricas por OTLP a tu collector: los dos registros de métricas de Kafka, las métricas de la JVM y la telemetría de clientes KIP-714, con la identidad del broker como etiquetas. Si el collector desaparece, Kafka ni se entera.

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

El problema

La mayoría de las métricas de Kafka dan un rodeo.

El stack habitual acopla un exportador JMX a cada broker: vuelve a leer las métricas de Kafka desde los MBeans de JMX, las mapea a nombres de métricas con archivos de reglas y las sirve para un scrape o las envía a un collector.

monedula-metrics-reporter se conecta a la propia interfaz MetricsReporter de Kafka y habla OTLP directamente con el collector.

3
pipelines de exportación: Kafka SPI y Yammer, runtime de la JVM y telemetría de clientes KIP-714
3.7 a 4.3
versiones de Apache Kafka probadas para la 0.10.0, en JDK 17 y 21

Cómo funciona

  1. Broker de Kafka registros Kafka SPI y Yammer
    Clientes KIP-714 productores y consumidores envían a través del broker
  2. monedula-metrics-reporter en el proceso, asíncrono
  3. OpenTelemetry Collector OTLP por gRPC o HTTP
  4. Prometheus, Grafana, cualquier backend OTLP el collector se encarga del enrutamiento y el fan-out
Las métricas fluyen desde Kafka, a través del reporter integrado en el proceso, hasta un OpenTelemetry Collector, que las enruta a cualquier backend.

Kafka sigue funcionando cuando el collector está caído

Los callbacks de métricas solo actualizan un mapa en memoria; toda la E/S de red ocurre en un hilo daemon. No hay cola de reintentos ni memoria sin límite, así que un collector lento o ausente nunca retrasa las peticiones de produce o fetch.

Cómo funciona el diseño a prueba de fallos (en inglés)

  1. Collector inaccesible
  2. La llamada de exportación agota su tiempo de espera
  3. Lote descartado, contado en las métricas de automonitorización
  4. El siguiente tick empieza de cero; Kafka nunca espera

Métricas SPI y Yammer desde un solo plugin

Los brokers de Kafka exponen métricas a través de dos sistemas paralelos. Varias señales del broker solo aparecen en el registro heredado de Yammer, así que un reporter que solo usa la SPI se las pierde. Este plugin se conecta a ambos con una sola configuración, y el mismo JAR funciona sin cambios en los clientes.

  • UnderReplicatedPartitions
  • OfflinePartitionsCount
  • ActiveControllerCount
  • BrokerTopicMetrics por topic

KIP-714

Métricas de cliente sin tocar los clientes

En los brokers, el plugin también recibe la telemetría que envían los clientes KIP-714, como la latencia de peticiones del lado del cliente y los tiempos de rebalanceo, y la reenvía al mismo collector. Las series de cliente llevan la identidad del broker y el client id, así que se pueden unir a las series del broker en PromQL.

Recopilar métricas de cliente (en inglés)

Etiquetas en las métricas de cliente reenviadas
kafka_cluster_id, kafka_node_idactivado por defecto
client_idactivado por defecto
client_instance_iddesactivado por defecto, alta cardinalidad
principal y dirección del clientedesactivado por defecto, datos personales

Dashboards incluidos

El quickstart arranca Kafka, el reporter, un OpenTelemetry Collector, Prometheus y Grafana con Docker Compose, con dashboards de Grafana y reglas de alerta de Prometheus listos para usar.

El quickstart de Grafana (en inglés)

Dashboard de resumen de Grafana con métricas de Kafka exportadas por monedula-metrics-reporter

Instalación

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

Coordenadas dev.monedula:monedula-metrics-reporter. Cada release de GitHub incluye también el JAR con un SBOM de CycloneDX y firmas de Sigstore.

Preguntas

¿monedula-metrics-reporter es gratuito y puedo usarlo en el trabajo?
Sí. Tiene licencia AGPL-3.0, sin edición de pago, y ejecutarlo en tus propios brokers y clientes no te obliga a compartir tu código ni tu configuración: las obligaciones de la AGPL se aplican cuando lo distribuyes, modificado o no, o cuando permites que otros usen una versión modificada a través de una red.
¿Mis aplicaciones cliente necesitan cambios para las métricas de cliente?
No. El push de KIP-714 está activado por defecto en el cliente Java y en librdkafka 2.5 y posteriores. Lo activas de forma centralizada con una suscripción client-metrics en el broker, y el reporter reenvía lo que envían los clientes. Consulta recopilar métricas de cliente (en inglés).
¿Necesito Prometheus?
No. El reporter habla OTLP con un OpenTelemetry Collector, y el collector puede exportar a cualquier backend que admita. El enrutamiento, el fan-out y los exportadores de cada proveedor se configuran en el collector.
¿Qué versiones de Java y Kafka admite?
Java 17 o posterior y Apache Kafka 3.7.0 a 4.3.0, en brokers y clientes: para la 0.10.0, la CI probó JDK 17 y 21 con Kafka 3.7.0, 3.9.0, 4.2.0 y 4.3.0. Las versiones de Kafka anteriores a 3.7 carecen de la interfaz ClientTelemetry que implementa el plugin y no se prueban. Consulta la compatibilidad (en inglés).
¿En qué se diferencia de jmx_exporter?
Ambos pueden ejecutarse dentro de la JVM de Kafka. monedula-metrics-reporter no necesita archivo de reglas: deriva los nombres de los de Kafka, etiqueta las series del broker con los ID de clúster y de nodo, y reenvía las métricas de clientes KIP-714. La página de comparación (en inglés) cubre las demás opciones.

Soporte

Ayuda de quienes lo desarrollan

Podemos ayudarte a usar monedula-metrics-reporter en una infraestructura grande, desde el diseño hasta la operación diaria.

Parte de
Monedula Flock

Más herramientas gratuitas para Apache Kafka del mismo equipo. Acerca de Flock