La reasignación de métricas de OTel Kafka está en fase alfa pública. Está disponible en las versiones >= 0.93.0 de Collector. Si tienes algún comentario al respecto, ponte en contacto con el equipo de tu cuenta.
El receptor de métricas de Kafka, receptor de JMX/recopilador de métricas de JMX permiten recopilar métricas de Kafka y acceder al dashboard de Kafka predefinido, “Kafka, Zookeeper and Kafka Consumer Overview”.
Ten en cuenta que el receptor de JMX y el recopilador de métricas de JMX deben considerarse sustitutos. Recopilan el mismo conjunto de métricas (receptor de JMX lanza el recopilador de métricas de JMX).
Receptor de métricas de Kafka
receivers:
kafkametrics:
brokers: "${env:KAFKA_BROKER_ADDRESS}"
protocol_version: 2.0.0
scrapers:
- brokers
- topics
- consumers
El receptor de métricas de Kafka debe utilizarse en un recopilador en modo deployment
con una única réplica. Esto asegura que la misma métrica no se recopile varias veces. El recopilador en modo de despliegue puede entonces aprovechar el Exportador de Datadog para exportar las métricas directamente a Datadog, o aprovechar el exportador OTLP para reenviar las métricas a otra instancia del recopilador.
Añade las siguientes líneas a values.yaml
:
Añade lo siguiente en la configuración de Collector:
receivers:
kafkametrics:
brokers: ${env:KAFKA_BROKER_ADDRESS}
protocol_version: 2.0.0
scrapers:
- brokers
- topics
- consumers
Receptor JMX
El receptor JMX tiene los siguientes requisitos:
- JRE está disponible en el host en el que se ejecuta el recopilador.
- El JAR del recopilador de métricas de JMX está disponible en el host donde estás ejecutando el recopilador. Puedes descargar la versión más reciente del JAR del recopilador de métricas de JMX desde la página de versiones de opentelemetry-java-contrib.
Añade lo siguiente en la configuración de Collector:
receivers:
jmx:
jar_path: /path/to/opentelemetry-jmx-metrics.jar
endpoint: ${env:KAFKA_BROKER_JMX_ADDRESS}
target_system: kafka,jvm
jmx/consumer:
jar_path: /path/to/opentelemetry-jmx-metrics.jar
endpoint: ${env:KAFKA_CONSUMER_JMX_ADDRESS}
target_system: kafka-consumer
jmx/producer:
jar_path: /path/to/opentelemetry-jmx-metrics.jar
endpoint: ${env:KAFKA_PRODUCER_JMX_ADDRESS}
target_system: kafka-producer
El receptor de JMX debe utilizarse en un recopilador en modo deployment
con una única réplica. Esto asegura que la misma métrica no se recopile varias veces. El recopilador en modo de despliegue puede entonces aprovechar el Exportador de Datadog para exportar las métricas directamente a Datadog, o aprovechar el exportador OTLP para reenviar las métricas a otra instancia del recopilador.
El receptor de JMX tiene los siguientes requisitos:
- JRE está disponible en el host en el que se está ejecutando el recopilador.
- El JAR del recopilador de métricas de JMX está disponible en el host donde estás ejecutando el recopilador. Puedes descargar la versión más reciente del JAR del recopilador de métricas de JMX aquí.
Debido a que la imagen por defecto de OTel Collector no cumple con los requisitos anteriores, es necesario crear una imagen personalizada. Consulta el archivo Dockerfile a continuación para ver una imagen de ejemplo que contiene el archivo binario del recopilador, JRE y JAR del recopilador de métricas de JMX.
Dockerfile:
FROM alpine:latest as prep
# Archivo binario de OpenTelemetry Collector
ARG OTEL_VERSION=0.92.0
ARG TARGETARCH=linux_amd64
ADD "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v${OTEL_VERSION}/otelcol-contrib_${OTEL_VERSION}_${TARGETARCH}.tar.gz" /otelcontribcol
RUN tar -zxvf /otelcontribcol
# JAR del recopilador de métricas de JMX
ARG JMX_GATHERER_JAR_VERSION=1.27.0
ADD https://github.com/open-telemetry/opentelemetry-java-contrib/releases/download/v${JMX_GATHERER_JAR_VERSION}/opentelemetry-jmx-metrics.jar /opt/opentelemetry-jmx-metrics.jar
# Id. de usuario no raíz (https://groups.google.com/g/distroless-users/c/-DpzCr7xRDY/m/eQqJmJroCgAJ)
ARG USER_UID=65532
RUN chown ${USER_UID} /opt/opentelemetry-jmx-metrics.jar
FROM gcr.io/distroless/java17-debian11:nonroot
COPY --from=prep /opt/opentelemetry-jmx-metrics.jar /opt/opentelemetry-jmx-metrics.jar
COPY --from=prep /otelcol-contrib /otelcol-contrib
EXPOSE 4317 55680 55679
ENTRYPOINT ["/otelcol-contrib"]
CMD ["--config", "/etc/otelcol-contrib/config.yaml"]
Añade las siguientes líneas a values.yaml
:
Añade lo siguiente en la configuración de Collector:
receivers:
jmx:
jar_path: /path/to/opentelemetry-jmx-metrics.jar
endpoint: ${env:KAFKA_BROKER_JMX_ADDRESS}
target_system: kafka,jvm
jmx/consumer:
jar_path: /path/to/opentelemetry-jmx-metrics.jar
endpoint: ${env:KAFKA_CONSUMER_JMX_ADDRESS}
target_system: kafka-consumer
jmx/producer:
jar_path: /path/to/opentelemetry-jmx-metrics.jar
endpoint: ${env:KAFKA_PRODUCER_JMX_ADDRESS}
target_system: kafka-producer
Recopilador de métricas de JMX
El Recopilador de métricas de JMX está pensado para ser ejecutado como un uber jar y está configurado con propiedades desde la línea de comandos.
Asegúrate de que JRE está disponible en el host en el que estás ejecutando el recopilador. Si no es así, asegúrate de descargarlo, por ejemplo.
apt-get update && \
apt-get -y install default-jre-headless
Una vez hecho esto, descarga la versión más reciente del JAR del Recopilador de métricas de JMX aquí y ejecútala:
// Kafka Broker
java -jar -Dotel.jmx.service.url=service:jmx:rmi:///jndi/rmi://{KAFKA_BROKER_JMX_ADDRESS}/jmxrmi \ -Dotel.jmx.target.system=kafka,jvm \
-Dotel.metrics.exporter=otlp \
-Dotel.exporter.otlp.endpoint=http://localhost:4317 \
-jar /path/to/opentelemetry-jmx-metrics.jar
// Kafka Producer
java -jar -Dotel.jmx.service.url=service:jmx:rmi:///jndi/rmi://{KAFKA_PRODUCER_JMX_ADDRESS}/jmxrmi \ -Dotel.jmx.target.system=kafka-producer \
-Dotel.metrics.exporter=otlp \
-Dotel.exporter.otlp.endpoint=http://localhost:4317 \
-jar /path/to/opentelemetry-jmx-metrics.jar
// Kafka Consumer
java -jar -Dotel.jmx.service.url=service:jmx:rmi:///jndi/rmi://{KAFKA_CONSUMER_JMX_ADDRESS}/jmxrmi \ -Dotel.jmx.target.system=kafka-consumer \
-Dotel.metrics.exporter=otlp \
-Dotel.exporter.otlp.endpoint=http://localhost:4317 \
-jar /path/to/opentelemetry-jmx-metrics.jar
El Recopilador de métricas de JMX está pensado para ser ejecutado como un uber jar y está configurado con propiedades desde la línea de comandos.
Para desplegar esto en Kubernetes, necesitas crear una imagen que contenga JRE y el JAR del Recopilador de métricas de JMX. Consulta el Dockerfile a continuación para ver una imagen de ejemplo que contiene JRE y el JAR del Recopilador de métricas de JMX.
Dockerfile:
FROM alpine:latest as prep
# JAR del Recopilador de métricas de JMX
ARG JMX_GATHERER_JAR_VERSION=1.27.0
ADD https://github.com/open-telemetry/opentelemetry-java-contrib/releases/download/v${JMX_GATHERER_JAR_VERSION}/opentelemetry-jmx-metrics.jar /opt/opentelemetry-jmx-metrics.jar
# Id. de usuario no raíz (https://groups.google.com/g/distroless-users/c/-DpzCr7xRDY/m/eQqJmJroCgAJ)
ARG USER_UID=65532
RUN chown ${USER_UID} /opt/opentelemetry-jmx-metrics.jar
FROM gcr.io/distroless/java17-debian11:nonroot
COPY --from=prep /opt/opentelemetry-jmx-metrics.jar /opt/opentelemetry-jmx-metrics.jar
EXPOSE 4317 55680 55679
ENTRYPOINT ["java"]
CMD ["-Dotel.jmx.service.url=service:jmx:rmi:///jndi/rmi://kafka:1099/jmxrmi", \
"-Dotel.jmx.target.system=kafka,jvm", \
"-Dotel.metrics.exporter=otlp", \
"-Dotel.exporter.otlp.endpoint=http://otelcol:4317", \
"-jar", \
"/opt/opentelemetry-jmx-metrics.jar"]
APM
Consulta Recopilación de logs para obtener instrucciones sobre cómo recopilar logs con OpenTelemetry Collector.
Para que aparezca en el dashboard predefinido de Kafka, los logs de Kafka deben tener la etiqueta source:kafka
. Para ello, utiliza un procesador de atributos:
processors:
attributes:
actions:
- key: ddtags
value: "source:kafka"
action: insert
Para asegurarte de que este atributo solo se añade a tus logs de Kafka, utiliza el filtro include/exclude del procesador de atributos.
Datos recopilados
Consulta asignación de métricas de OpenTelemetry para obtener información sobre las métricas de Kafka recopiladas.
Ejemplo completo de configuración
Para ver un ejemplo completo de configuración en funcionamiento con el exportador de Datadog, consulta kafka.yaml
.
Ejemplo de salida de registro
Resource SchemaURL: https://opentelemetry.io/schemas/1.20.0
Resource attributes:
-> service.name: Str(unknown_service:java)
-> telemetry.sdk.language: Str(java)
-> telemetry.sdk.name: Str(opentelemetry)
-> telemetry.sdk.version: Str(1.27.0)
ScopeMetrics #0
ScopeMetrics SchemaURL:
InstrumentationScope io.opentelemetry.contrib.jmxmetrics 1.27.0-alpha
Metric #0
Descriptor:
-> Name: kafka.message.count
-> Description: The number of messages received by the broker
-> Unit: {messages}
-> DataType: Sum
-> IsMonotonic: true
-> AggregationTemporality: Cumulative
NumberDataPoints #0
StartTimestamp: 2024-01-22 15:50:24.212 +0000 UTC
Timestamp: 2024-01-22 15:51:24.218 +0000 UTC
Value: 25
Ejemplo de aplicación
Consulta el siguiente ejemplo de aplicación que demuestra las configuraciones que se abordan en esta documentación. Esta aplicación de ejemplo está compuesta por un productor, un consumidor, un broker y una instancia de zookeeper. Demuestra el uso del receptor de métricas de Kafka, el receptor de JMX o el Recopilador de métricas de JMX.