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}/offsets と Content-Type: application/vnd.kafka.v2+json ヘッダー |
consumer.committed-offsets+v2 |
GET /consumers/{group}/instances/{instance}/offsets と Accept: 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}/records と Accept: 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}/records と Accept: application/vnd.kafka.json.v2+json ヘッダー |
consumer.records.read-binary+v2 |
GET /consumers/{group}/instances/{instance}/records と Accept: application/vnd.kafka.binary.v2+json ヘッダー |
consumer.subscribe+v2 |
POST /consumers/{group}/instances/{instance}/subscription と Content-Type: application/vnd.kafka.v2+json ヘッダー |
consumer.subscription+v2 |
GET /consumers/{group}/instances/{instance}/subscription と Accept: application/vnd.kafka.v2+json ヘッダー |
consumer.unsubscribe+v2 |
DELETE /consumers/{group}/instances/{instance}/subscription と Accept: application/vnd.kafka.avro.v2+json ヘッダー |
consumer.seek-to-beginning+v2 |
POST /consumers/{group}/instances/{instance}/positions/beginning と Content-Type: application/vnd.kafka.v2+json ヘッダー |
consumer.seek-to-end+v2 |
POST /consumers/{group}/instances/{instance}/positions/end と Content-Type: application/vnd.kafka.v2+json ヘッダー |
consumer.seek-to-offset+v2 |
POST /consumers/{group}/instances/{instance}/positions と Content-Type: application/vnd.kafka.v2+json ヘッダー |
consumer.assign+v2 |
POST /consumers/{group}/instances/{instance}/assignment と Content-Type: application/vnd.kafka.v2+json ヘッダー |
consumer.assignment+v2 |
GET /consumers/{group}/instances/{instance}/assignment と Accept: 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}/partitions と Accept: application/vnd.kafka.v2+json ヘッダー |
topic.produce-avro+v2 |
POST /topics/{topic}/partitions と Content-Type: application/vnd.kafka.avro.v2+json ヘッダー |
topic.produce-jsonschema+v2 |
POST /topics/{topic}/partitions と Content-Type: application/vnd.kafka.jsonschema.v2+json ヘッダー |
topic.produce-protobuf+v2 |
POST /topics/{topic}/partitions と Content-Type: application/vnd.kafka.protobuf.v2+json ヘッダー |