Monedula

このページは英語から機械翻訳されています。 原文を読む

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

Kafka のメトリクスを OpenTelemetry に直接送る

monedula-metrics-reporter はブローカーの中で動作し、メトリクスを OTLP で collector にプッシュします。Kafka の 2 つのメトリクスレジストリ、JVM メトリクス、KIP-714 クライアントテレメトリを、ブローカーの識別情報をラベルとして付けて送ります。collector が停止しても、Kafka は気づきません。

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
ターミナル
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

課題

Kafka のメトリクスの多くは遠回りをしています。

一般的なスタックでは、すべてのブローカーに JMX エクスポーターを取り付けます。エクスポーターは Kafka のメトリクスを JMX MBean から読み戻し、ルールファイルでメトリクス名にマッピングし、スクレイプ用に公開するか、collector へさらにプッシュします。

monedula-metrics-reporter は Kafka 自身の MetricsReporter インターフェースに組み込まれ、collector と直接 OTLP で通信します。

3
エクスポートパイプライン:Kafka SPI と Yammer、JVM ランタイム、KIP-714 クライアントテレメトリ
3.7 から 4.3
0.10.0 でテスト済みの Apache Kafka のバージョン(JDK 17 と 21)

仕組み

  1. Kafka ブローカー Kafka SPI と Yammer のレジストリ
    KIP-714 クライアント プロデューサーとコンシューマーがブローカー経由でプッシュ
  2. monedula-metrics-reporter インプロセス、非同期
  3. OpenTelemetry Collector gRPC または HTTP 上の OTLP
  4. Prometheus、Grafana、任意の OTLP バックエンド ルーティングとファンアウトは collector で行います
メトリクスは Kafka からインプロセスのレポーターを経て OpenTelemetry Collector に流れ、そこから任意のバックエンドへルーティングされます。

collector が停止しても Kafka は動き続ける

メトリクスのコールバックはメモリ内のマップを更新するだけで、ネットワーク I/O はすべてデーモンスレッドで行われます。リトライキューも無制限のメモリ使用もないため、collector が遅くても停止していても、produce や fetch のリクエストが待たされることはありません。

フェイルセーフ設計の仕組み(英語)

  1. collector に到達できない
  2. エクスポート呼び出しがタイムアウト
  3. バッチを破棄し、自己監視メトリクスでカウント
  4. 次のティックはまっさらな状態で開始。Kafka は決して待たない

SPI と Yammer のメトリクスを 1 つのプラグインで

Kafka のブローカーは、2 つの並行するシステムを通じてメトリクスを公開します。ブローカーのシグナルの一部は、レガシーの Yammer レジストリにしか登録されないため、SPI だけのレポーターはそれらを取りこぼします。このプラグインは 1 つの設定で両方にアタッチし、同じ JAR がクライアントでも変更なしで動作します。

  • UnderReplicatedPartitions
  • OfflinePartitionsCount
  • ActiveControllerCount
  • トピックごとの BrokerTopicMetrics

KIP-714

クライアントに手を入れずにクライアントメトリクスを

ブローカー上では、このプラグインは KIP-714 クライアントがプッシュするテレメトリ(クライアント側のリクエストレイテンシやリバランスの所要時間など)も受け取り、同じ collector に転送します。クライアントの系列にはブローカーの識別情報と client id が付くので、PromQL でブローカーの系列と結合できます。

クライアントメトリクスを収集する(英語)

転送されるクライアントメトリクスのラベル
kafka_cluster_id, kafka_node_idデフォルトで有効
client_idデフォルトで有効
client_instance_idデフォルトで無効、高カーディナリティ
プリンシパルとクライアントアドレスデフォルトで無効、個人データ

ダッシュボード付き

クイックスタートは Docker Compose で Kafka、レポーター、OpenTelemetry Collector、Prometheus、Grafana を起動し、すぐに使える Grafana ダッシュボードと Prometheus のアラートルールも用意します。

Grafana クイックスタート(英語)

monedula-metrics-reporter がエクスポートした Kafka メトリクスの Grafana 概要ダッシュボード

インストール

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

座標:dev.monedula:monedula-metrics-reporter。各 GitHub リリースには、CycloneDX SBOM と Sigstore 署名付きの JAR も含まれています。

よくある質問

monedula-metrics-reporter は無料ですか?仕事で使えますか?
はい、AGPL-3.0 ライセンスで有料版はなく、自社のブローカーやクライアントで実行しても、コードや設定を公開する義務は生じません。AGPL の義務は、改変の有無にかかわらずソフトウェアを配布する場合、または改変版をネットワーク経由で他者に利用させる場合に適用されます。
クライアントメトリクスのために、クライアントアプリケーションを変更する必要はありますか?
いいえ。KIP-714 のプッシュは、Java クライアントと librdkafka 2.5 以降でデフォルトで有効です。ブローカー側のクライアントメトリクスサブスクリプションで一元的に有効化すれば、レポーターがクライアントのプッシュした内容を転送します。詳しくはクライアントメトリクスの収集(英語)をご覧ください。
Prometheus は必要ですか?
いいえ。レポーターは OpenTelemetry Collector と OTLP で通信し、collector はサポートする任意のバックエンドにエクスポートできます。ルーティング、ファンアウト、ベンダーのエクスポーターは collector で設定します。
どの Java と Kafka のバージョンに対応していますか?
Java 17 以降と Apache Kafka 3.7.0 から 4.3.0 まで、ブローカーとクライアントの両方に対応しています。0.10.0 については、CI で JDK 17 と 21 が Kafka 3.7.0、3.9.0、4.2.0、4.3.0 に対してテストされました。3.7 より前の Kafka にはプラグインが実装する ClientTelemetry インターフェースがなく、テストもされていません。詳しくは互換性(英語)をご覧ください。
jmx_exporter とは何が違いますか?
どちらも Kafka JVM の中で動作できます。monedula-metrics-reporter はルールファイルを必要とせず、Kafka 自身の名前からメトリクス名を導き、ブローカーの系列にクラスター ID とノード ID のラベルを付け、KIP-714 のクライアントメトリクスを転送します。比較ページ(英語)では、その他の選択肢を取り上げています。

サポート

開発者自身によるサポート

大規模な環境で monedula-metrics-reporter を動かすために、設計から日々の運用まで私たちがお手伝いできます。

所属
Monedula Flock

同じチームによる、Apache Kafka のための無料ツールがほかにもあります。Flock について