REST Proxy のモニタリング

REST Proxy は、JMX を通じてさまざまなメトリクスを報告します。また、metrics.reporters 構成オプションを使用して、プラグ可能な他の統計情報レポーターを通じて統計情報を報告するように構成することもできます。

利用できるメトリクスを確認するには、jconsole を使用して JMX MBeans を表示するのが最も簡単です。以下に示す REST Proxy に固有のメトリクスに加えて、実行されているプロデューサーおよびコンシューマーのメトリクスも表示およびモニタリングできます。

REST Proxy には、2 種類のメトリクスが存在します。グローバルメトリクスでは、サービスの全体的な正常性をモニタリングすることができます。エンドポイントごとのメトリクスでは、各 API エンドポイントのリクエストメソッドがモニタリングされます。エンドポイントごとのメトリクスは、プレフィックスとして先頭にエンドポイントの名前が付きます(例: brokers.list )。これらのメトリクスを利用することで、プロキシがどのように使用されているかを把握し、具体的なパフォーマンスの問題を追跡することができます。

以下で定義されるメトリクスに加えて、REST Proxy は、基礎となる Jetty サーバーによって提供される豊富なメトリクスも公開します。

グローバルメトリクス

MBean: kafka.rest:type=jetty-metrics connections-active アクティブな TCP 接続の合計数。

connections-accepted-rate (2.0 以降は非推奨) * 1.x: 受け入れられた TCP 接続の平均レート(1 秒あたりのレート)。* 2.x: connections-opened-rate と同じ。

connections-opened-rate 開かれた TCP 接続の平均レート(1 秒あたりのレート)

connections-closed-rate 閉じられた TCP 接続の平均レート(1 秒あたりのレート)

エンドポイントごとのメトリクス

各エンドポイントのリクエストメソッドで利用できるメトリクスは以下のとおりです。また、すべてのリクエストに対するメトリクスが、それぞれのグローバルインスタンスに集計されます。そうした集計インスタンスの名前に、プレフィックスは付きません。

MBean: kafka.rest:type=jersey-metrics <endpoint>.request-byte-rate 受信リクエストのバイト数/秒

<endpoint>.request-error-rate HTTP エラー応答になったリクエスト数の 1 秒あたりの平均値

<endpoint>.request-latency-avg リクエストの平均レイテンシ(ミリ秒)

<endpoint>.request-latency-max リクエストの最大レイテンシ(ミリ秒)

<endpoint>.request-rate 1 秒あたりの HTTP リクエストの平均数

<endpoint>.request-size-avg リクエストの平均サイズ(バイト)

<endpoint>.request-size-max リクエストの最大サイズ(バイト)

<endpoint>.response-byte-rate 送信応答のバイト数/秒

<endpoint>.response-rate 1 秒あたりの HTTP 応答の平均数

<endpoint>.response-size-avg 応答の平均サイズ(バイト)

<endpoint>.response-size-max 応答の最大サイズ(バイト)

エンドポイント

以下の表は、すべての API エンドポイントメソッドの一覧です。名前は、各 API 操作に直観的に対応しているはずです。完全なメトリック名を作成するには、エンドポイントごとのメトリック名に、いずれかのエンドポイント名をプレフィックスとして付けます。たとえば、GET /brokers API 呼び出しのレートを見つけるには、エンドポイント名 brokers.list とメトリック名 request-rate とを組み合わせて brokers.list.request-rate とします。

エンドポイント名 API エンドポイントメソッド
brokers.list GET /brokers
consumer.commit POST /consumers/{group}/instances/{instance}/offsets
consumer.create POST /consumers/{group}
consumer.delete DELETE /consumers/{group}/instances/{instance}
consumer.topic.read-avro GET /consumers/{group}/instances/{instance}/topics/{topic}Accept: application/vnd.kafka.avro.v1+json ヘッダー
consumer.topic.read-binary GET /consumers/{group}/instances/{instance}/topics/{topic}Accept: application/vnd.kafka.binary.v1+json ヘッダー
partition.get GET /topics/{topic}/partitions/{partition}
partition.produce-avro POST /topics/{topic}/partitions/{partition}Content-Type: application/vnd.kafka.avro.v1+json ヘッダー
partition.produce-json POST /topics/{topic}/partitions/{partition}Content-Type: application/vnd.kafka.json.v1+json ヘッダー
partition.produce-binary POST /topics/{topic}/partitions/{partition}Content-Type: application/vnd.kafka.binary.v1+json ヘッダー
partitions.list GET /topics/{topic}/partitions
topic.get GET /topics/{topic}
topic.produce-avro POST /topics/{topic}Content-Type: application/vnd.kafka.avro.v1+json ヘッダー
topic.produce-binary POST /topics/{topic}Content-Type: application/vnd.kafka.binary.v1+json ヘッダー
topics.list GET /topics

API v2 向け:

エンドポイント名 API エンドポイントメソッド
consumer.commit-offsets+v2 POST /consumers/{group}/instances/{instance}/offsetsContent-Type: application/vnd.kafka.v2+json ヘッダー
consumer.committed-offsets+v2 GET /consumers/{group}/instances/{instance}/offsetsAccept: application/vnd.kafka.v2+json ヘッダー
consumer.create+v2 POST /consumers/{group}Content-Type: application/vnd.kafka.v2+json ヘッダー
consumer.delete+v2 DELETE /consumers/{group}/instances/{instance}Accept: application/vnd.kafka.avro.v2+json ヘッダー
consumer.records.read-avro+v2 GET /consumers/{group}/instances/{instance}/recordsAccept: application/vnd.kafka.avro.v2+json ヘッダー
consumer.topic.read-jsonschema GET /consumers/{group}/instances/{instance}/topics/{topic}Accept: application/vnd.kafka.jsonschema.v2+json ヘッダー
consumer.topic.read-protobuf GET /consumers/{group}/instances/{instance}/topics/{topic}Accept: application/vnd.kafka.protobuf.v2+json ヘッダー
consumer.records.read-json+v2 GET /consumers/{group}/instances/{instance}/recordsAccept: application/vnd.kafka.json.v2+json ヘッダー
consumer.records.read-binary+v2 GET /consumers/{group}/instances/{instance}/recordsAccept: application/vnd.kafka.binary.v2+json ヘッダー
consumer.subscribe+v2 POST /consumers/{group}/instances/{instance}/subscriptionContent-Type: application/vnd.kafka.v2+json ヘッダー
consumer.subscription+v2 GET /consumers/{group}/instances/{instance}/subscriptionAccept: application/vnd.kafka.v2+json ヘッダー
consumer.unsubscribe+v2 DELETE /consumers/{group}/instances/{instance}/subscriptionAccept: application/vnd.kafka.avro.v2+json ヘッダー
consumer.seek-to-beginning+v2 POST /consumers/{group}/instances/{instance}/positions/beginningContent-Type: application/vnd.kafka.v2+json ヘッダー
consumer.seek-to-end+v2 POST /consumers/{group}/instances/{instance}/positions/endContent-Type: application/vnd.kafka.v2+json ヘッダー
consumer.seek-to-offset+v2 POST /consumers/{group}/instances/{instance}/positionsContent-Type: application/vnd.kafka.v2+json ヘッダー
consumer.assign+v2 POST /consumers/{group}/instances/{instance}/assignmentContent-Type: application/vnd.kafka.v2+json ヘッダー
consumer.assignment+v2 GET /consumers/{group}/instances/{instance}/assignmentAccept: application/vnd.kafka.v2+json ヘッダー
partition.get+v2 GET /topics/{topic}/partitions/{partition}Accept: application/vnd.kafka.v2+json ヘッダー
partition.produce-avro+v2 POST /topics/{topic}/partitions/{partition}Content-Type: application/vnd.kafka.avro.v2+json ヘッダー
partition.produce-jsonschema POST /topics/{topic}/partitions/{partition}Content-Type: application/vnd.kafka.jsonschema.v2+json ヘッダー
partition.produce-protobuf POST /topics/{topic}/partitions/{partition}Content-Type: application/vnd.kafka.protobuf.v2+json ヘッダー
partition.produce-json+v2 POST /topics/{topic}/partitions/{partition}Content-Type: application/vnd.kafka.json.v2+json ヘッダー
partition.produce-binary+v2 POST /topics/{topic}/partitions/{partition}Content-Type: application/vnd.kafka.binary.v2+json ヘッダー
partitions.list+v2 GET /topics/{topic}/partitionsAccept: application/vnd.kafka.v2+json ヘッダー
topic.produce-avro+v2 POST /topics/{topic}/partitionsContent-Type: application/vnd.kafka.avro.v2+json ヘッダー
topic.produce-jsonschema+v2 POST /topics/{topic}/partitionsContent-Type: application/vnd.kafka.jsonschema.v2+json ヘッダー
topic.produce-protobuf+v2 POST /topics/{topic}/partitionsContent-Type: application/vnd.kafka.protobuf.v2+json ヘッダー