OTel Kafka Metrics Remapping は公開アルファ版です。コレクターのバージョン >= 0.93.0 で利用可能です。これに関連するフィードバックがある場合は、アカウントチームに連絡して意見を提供してください。

概要

OOTB Kafka ダッシュボードの OpenTelemetry Kafka メトリクス

Kafka メトリクスレシーバーJMX Receiver/ JMX Metrics Gatherer を使用すると、Kafka メトリクスを収集し、すぐに使える Kafka Dashboard “Kafka, Zookeeper and Kafka Consumer Overview” にアクセスできます。

JMX ReceiverJMX Metrics Gatherer は代用品とお考えください。これらは同じメトリクスセットを収集します (JMX ReceiverJMX Metrics Gatherer を起動します)。

Kafka メトリクスレシーバー

receivers:   kafkametrics:     brokers: "${env:KAFKA_BROKER_ADDRESS}"     protocol_version: 2.0.0     scrapers:       - brokers       - topics       - consumers 

Kafka メトリクスレシーバーは、単一のレプリカを持つ deployment モードのコレクターで使用する必要があります。これにより、同じメトリクスが複数回収集されることはありません。デプロイメントモードのコレクターは、Datadog Exporter を活用してメトリクスを直接 Datadog にエクスポートしたり、OTLP エクスポーターを活用してメトリクスを別のコレクターインスタンスに転送したりできます。

以下の行を values.yaml に追加します。

mode: deployment 

Collector 構成に以下を追加します。

receivers:   kafkametrics:     brokers: ${env:KAFKA_BROKER_ADDRESS}     protocol_version: 2.0.0     scrapers:       - brokers       - topics       - consumers 

JMX Receiver

JMX Receiver には以下の要件があります。

  • コレクターを実行しているホストで JRE が使用可能であること。
  • コレクターを実行しているホストで JMX Metric Gatherer JAR が使用可能であること。JMX Metric Gatherer JAR の最新リリースは、opentelemetry-java-contrib リリースページからダウンロードできます。

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 

JMX Receiver は、単一のレプリカを持つ deployment モードのコレクターで使用する必要があります。これにより、同じメトリクスが複数回収集されることはありません。デプロイメントモードのコレクターは、Datadog Exporter を活用してメトリクスを直接 Datadog にエクスポートしたり、OTLP エクスポーターを活用してメトリクスを別のコレクターインスタンスに転送したりできます。

JMX Receiver には以下の要件があります。

  • コレクターを実行しているホストで JRE が使用可能であること。
  • コレクターを実行しているホストで JMX Metric Gatherer JAR が利用可能であること。JMX Metric Gatherer JAR の最新リリースは、こちらでダウンロードできます。

OTel コレクターのデフォルトイメージは上記の要件を満たさないため、カスタムイメージをビルドする必要があります。コレクターのバイナリ、JRE、JMX Metrics Gatherer JAR を含むイメージの例については、以下の Dockerfile を参照してください。

Dockerfile:

FROM alpine:latest as prep  # OpenTelemetry コレクターのバイナリ 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  # JMX Metrics Gatherer Jar 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 # 非 root ユーザーの ID (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"] 

以下の行を values.yaml に追加します。

mode: deployment 

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 

JMX Metrics Gatherer

JMX Metric Gatherer は、uber jar として実行し、コマンドラインからプロパティを構成することを目的としています。

コレクターを実行するホストで JRE が使用可能であることを確認してください。JRE がない場合は、必ずダウンロードしてください。例:

apt-get update && \ apt-get -y install default-jre-headless 

これが完了したら、JMX Metric Gatherer JAR の最新リリースをこちらでダウンロードして、以下を実行してください。

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

JMX Metric Gatherer は、uber jar として実行し、コマンドラインからプロパティを構成することを目的としています。

これを Kubernetes でデプロイするには、JRE と JMX Metrics Gatherer Jar を含むイメージをビルドする必要があります。JRE と JMX Metrics Gatherer Jar を含むイメージの例については、以下の Dockerfile を参照してください。

Dockerfile:

FROM alpine:latest as prep  # JMX Metrics Gatherer Jar 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 # 非 root ユーザー ID (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"] 

収集データ

OpenTelemetry Collector を使用してログを収集する方法については、ログ収集を参照してください。

すぐに使える Kafka ダッシュボードに表示するには、Kafka ログに source:kafka タグを付ける必要があります。これを行うには、属性プロセッサーを使用します。

processors:   attributes:     actions:       - key: ddtags         value: "source:kafka"         action: insert 

この属性のみが Kafka ログに追加されるようにするには、属性プロセッサーの包含/除外フィルターを使用します。

データ収集

収集した Kafka メトリクスについては、OpenTelemetry Metrics Mapping を参照してください。

完全な構成例

Datadog エクスポーターを使用した完全な構成例については、kafka.yaml を参照してください。

ログ出力例

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 

アプリ例

このドキュメントで説明する構成を次のアプリケーション例で示します。このサンプルアプリケーションは、プロデューサー、コンシューマー、ブローカー、および zookeeper インスタンスで構成されています。Kafka メトリクスレシーバー、JMX Receiver、JMX Metrics Gatherer の使用例を示しています。