テンセントクラウド CKafka (Prometheus)¶
テンセントクラウド CKafka は Prometheus Exporter を通じて Broker、ノード、クライアントのメトリクスを収集し、メッセージスループット、リクエスト遅延、接続状態、Topic の読み書き、リソース水位、リバランスなどの観点を網羅して、CKafka の性能と運用安定性を評価するために使用します。
設定¶
前提条件¶
テンセントクラウド CKafka 専用版インスタンスにアクセスできるネットワーク環境に DataKit を配置する必要があります。DataKit は、Prometheus 監視対象を取得するときに選択した VPC とサブネットと疎通できる CVM または自前のホストに配置することを推奨します。ホストにセキュリティグループやアクセス制御ポリシーが設定されている場合は、CKafka コンソールが返す Exporter の IP とポートを許可してください。
テンセントクラウド CKafka 専用版は、オープンソース標準の Prometheus Exporter に基づく接続方式を提供しており、コンソールが返す監視対象は通常次の 2 種類です。
- Broker JMX Exporter: Kafka Broker の JMX メトリクスを収集します。たとえば、リクエストレート、リクエスト時間、Topic の読み書きレート、Controller、Log などのメトリクスです。
- Node Exporter: Broker が稼働するノードの基本メトリクスを収集します。たとえば、CPU、メモリ、ディスク、ネットワークなどのメトリクスです。
Producer、Consumer、Kafka Streams、Kafka Connect のメトリクスは CKafka Broker のネイティブ Exporter の公開範囲に含まれません。クライアント側のメトリクスを収集するには、対象の業務プロセスに個別で JMX Exporter を組み込み、その /metrics アドレスを DataKit の Prometheus 収集設定に追加してください。
Prometheus 監視対象の取得¶
- CKafka コンソール にログインし、対象インスタンスの詳細ページを開きます。
- インスタンス詳細ページで「Prometheus 監視を使用」モジュールを見つけ、「監視対象を取得」をクリックし、連携する VPC とサブネットを選択して送信します。
- 取得に成功したら、コンソールに返された Broker JMX Exporter と Node Exporter のターゲットアドレスを記録します。
監視対象の例:
| 種類 | 例のアドレス | 説明 |
|---|---|---|
| Broker JMX Exporter | <jmx-exporter-ip>:60001、<jmx-exporter-ip>:60003 |
Broker の JMX メトリクスを収集します。 |
| Node Exporter | <node-exporter-ip>:60002、<node-exporter-ip>:60004 |
Broker ノードの基本メトリクスを収集します。 |
CKafka インスタンスが移行、構成変更、または可用性ゾーン変更を行った場合、基盤となる Broker が変わる可能性があります。そのため、コンソールで最新の Exporter の IP とポートを再取得する必要があります。
DataKit の設定¶
- datakit のインストールディレクトリ内の
conf.d/samplesディレクトリに移動し、prom.conf.sampleをコピーしてckafka.confに名前を変更します
cp prom.conf.sample ckafka.conf
ckafka.confを調整します
[[inputs.prom]]
urls = [
"http://<jmx-exporter-ip>:60001/metrics",
"http://<jmx-exporter-ip>:60003/metrics",
"http://<jmx-exporter-ip>:60005/metrics",
"http://<jmx-exporter-ip>:60007/metrics",
]
source = "kafka_jmx"
metric_name_filter = ["^kafka_"]
measurement_prefix = ""
keep_exist_metric_name = false
honor_timestamps = true
election = false
disable_host_tag = true
disable_instance_tag = true
disable_info_tag = false
[[inputs.prom.measurements]]
prefix = "kafka_controller_"
name = "kafka_controller"
[[inputs.prom.measurements]]
prefix = "kafka_network_"
name = "kafka_network"
[[inputs.prom.measurements]]
prefix = "kafka_log_"
name = "kafka_log"
[[inputs.prom.measurements]]
prefix = "kafka_server_"
name = "kafka_server"
[inputs.prom.tags]
cloud_provider = "tencentcloud"
service = "ckafka"
region_id = "<region-id>"
cluster_id = "<ckafka-instance-id>"
cluster_name = "<ckafka-instance-name>"
[[inputs.prom]]
urls = [
"http://<node-exporter-ip>:60002/metrics",
"http://<node-exporter-ip>:60004/metrics",
"http://<node-exporter-ip>:60006/metrics",
"http://<node-exporter-ip>:60008/metrics",
]
source = "kafka_node"
metric_name_filter = ["^node_"]
measurement_prefix = ""
keep_exist_metric_name = false
honor_timestamps = true
election = false
disable_host_tag = true
disable_instance_tag = true
disable_info_tag = false
[[inputs.prom.measurements]]
prefix = "node_"
name = "kafka_node"
[inputs.prom.tags]
cloud_provider = "tencentcloud"
service = "ckafka"
region_id = "<region-id>"
cluster_id = "<ckafka-instance-id>"
cluster_name = "<ckafka-instance-name>"
# 任意: 業務側の Producer、Consumer、Kafka Streams、Kafka Connect などのクライアント側 JMX Exporter メトリクスを収集します。
[[inputs.prom]]
urls = [
"http://<producer-client-ip>:7072/metrics",
"http://<consumer-client-ip>:7073/metrics",
"http://<streams-client-ip>:7074/metrics",
"http://<connect-worker-ip>:7075/metrics",
]
source = "kafka_client"
metric_name_filter = ["^kafka_(producer|consumer|stream|connect)_"]
measurement_prefix = ""
keep_exist_metric_name = false
honor_timestamps = true
election = false
disable_host_tag = false
disable_instance_tag = true
disable_info_tag = false
[[inputs.prom.measurements]]
prefix = "kafka_producer_"
name = "kafka_producer"
[[inputs.prom.measurements]]
prefix = "kafka_consumer_"
name = "kafka_consumer"
[[inputs.prom.measurements]]
prefix = "kafka_connect_"
name = "kafka_connect"
[[inputs.prom.measurements]]
prefix = "kafka_stream_"
name = "kafka_stream"
[inputs.prom.tags]
cloud_provider = "tencentcloud"
service = "ckafka"
region_id = "<region-id>"
cluster_id = "<ckafka-instance-id>"
cluster_name = "<ckafka-instance-name>"
- DataKit を再起動します
以下のコマンドを実行します。
メトリクス¶
Prometheus 収集を設定した後、推奨されるメトリクス範囲には、以下の 9 個のメトリクスセット、111 個の measurement、field、および固定セマンティックタグで区別されるメトリクスコンテキストが含まれます。テンセントクラウド CKafka コンソールが返す監視対象は主に Broker JMX と Node Exporter のメトリクスを提供します。Producer、Consumer、Kafka Streams、Kafka Connect のメトリクスは、対応するクライアントプロセスで個別に JMX Exporter を有効化する必要があります。
Controller メトリクス¶
kafka_controller メトリクスセットには 4 個の推奨メトリクスコンテキストが含まれます。
| メトリクス名 | 説明 | ディメンション | 単位 |
|---|---|---|---|
KafkaController_Value{name=ActiveControllerCount} |
クラスタ内で現在アクティブな Controller の数。通常は 1 になります | cloud_provider, cluster_name, host |
count |
KafkaController_Value{name=GlobalPartitionCount} |
クラスタの現在の総パーティション数。複数の Broker が同じグローバル値を公開する場合は最大値を採用します | host |
count |
KafkaController_Value{name=GlobalTopicCount} |
クラスタの現在の Topic 総数。複数の Broker が同じグローバル値を公開する場合は最大値を採用します | host |
count |
KafkaController_Value{name=OfflinePartitionsCount} |
現在 Leader を持たず、正常に読み書きできないパーティション数 | cloud_provider, cluster_name, host |
count |
ネットワークリクエストメトリクス¶
kafka_network メトリクスセットには 23 個の推奨メトリクスコンテキストが含まれます。
| メトリクス名 | 説明 | ディメンション | 単位 |
|---|---|---|---|
RequestChannel_Value{name=RequestQueueSize} |
Broker のリクエストキューで現在処理待ちのエントリ数 | host |
count |
RequestChannel_Value{name=ResponseQueueSize} |
Broker のレスポンスキューで現在処理待ちのエントリ数 | host |
count |
RequestMetrics_95thPercentile{name=TotalTimeMs;request=FetchConsumer} |
FetchConsumer リクエストのエンドツーエンド P95 処理時間 | cloud_provider, cluster_name, host |
ms |
RequestMetrics_95thPercentile{name=TotalTimeMs;request=Produce} |
Produce リクエストのエンドツーエンド P95 処理時間 | cloud_provider, cluster_name, host |
ms |
RequestMetrics_Mean{name=LocalTimeMs;request=FetchConsumer} |
FetchConsumer リクエストのローカル処理平均時間 | host |
ms |
RequestMetrics_Mean{name=LocalTimeMs;request=FetchFollower} |
FetchFollower リクエストのローカル処理平均時間 | host |
ms |
RequestMetrics_Mean{name=MessageConversionsTimeMs;request=Produce} |
Produce リクエストのメッセージ形式変換の平均時間 | host |
ms |
RequestMetrics_Mean{name=RemoteTimeMs;request=FetchConsumer} |
FetchConsumer リクエストのリモート処理平均時間 | host |
ms |
RequestMetrics_Mean{name=RemoteTimeMs;request=FetchFollower} |
FetchFollower リクエストのリモート処理平均時間 | host |
ms |
RequestMetrics_Mean{name=RemoteTimeMs;request=Produce} |
Produce リクエストのリモート処理平均時間 | host |
ms |
RequestMetrics_Mean{name=RequestQueueTimeMs;request=FetchConsumer} |
FetchConsumer リクエストのリクエストキュー内での平均待機時間 | host |
ms |
RequestMetrics_Mean{name=RequestQueueTimeMs;request=Produce} |
Produce リクエストのリクエストキュー内での平均待機時間 | host |
ms |
RequestMetrics_Mean{name=ResponseQueueTimeMs;request=FetchConsumer} |
FetchConsumer リクエストのレスポンスキュー内での平均待機時間 | host |
ms |
RequestMetrics_Mean{name=ResponseQueueTimeMs;request=FetchFollower} |
FetchFollower リクエストのレスポンスキュー内での平均待機時間 | host |
ms |
RequestMetrics_Mean{name=ResponseQueueTimeMs;request=Produce} |
Produce リクエストのレスポンスキュー内での平均待機時間 | host |
ms |
RequestMetrics_Mean{name=ResponseSendTimeMs;request=FetchConsumer} |
FetchConsumer リクエストのレスポンス送信平均時間 | host |
ms |
RequestMetrics_Mean{name=ResponseSendTimeMs;request=FetchFollower} |
FetchFollower リクエストのレスポンス送信平均時間 | host |
ms |
RequestMetrics_Mean{name=ResponseSendTimeMs;request=Produce} |
Produce リクエストのレスポンス送信平均時間 | host |
ms |
RequestMetrics_Mean{name=TotalTimeMs;request=FetchConsumer} |
FetchConsumer リクエストのエンドツーエンド平均処理時間 | host |
ms |
RequestMetrics_Mean{name=TotalTimeMs;request=Produce} |
Produce リクエストのエンドツーエンド平均処理時間 | host |
ms |
RequestMetrics_OneMinuteRate{name=RequestsPerSec} |
Broker の直近 1 分間のリクエストレート | host, request |
ops |
SocketServer_Value{name=MemoryPoolUsed} |
Broker ネットワーク層のメモリプールで現在使用中のメモリ量 | host |
B |
SocketServer_Value{name=NetworkProcessorAvgIdlePercent} |
Broker のネットワーク処理スレッドがアイドル状態にある時間比率 | host |
percent |
ログメトリクス¶
kafka_log メトリクスセットには 4 個の推奨メトリクスコンテキストが含まれます。
| メトリクス名 | 説明 | ディメンション | 単位 |
|---|---|---|---|
LogFlushStats_OneMinuteRate{name=LogFlushRateAndTimeMs} |
Broker が 1 秒あたりに実行するログフラッシュ操作の平均回数 | host |
ops |
Log_Value{name=LogEndOffset} |
選択した Topic パーティションの現在のログ末端オフセット | host, partition, topic |
offset |
Log_Value{name=LogStartOffset} |
選択した Topic パーティションの現在の最古の読み取り可能なログオフセット | host, partition, topic |
offset |
Log_Value{name=Size} |
選択した Topic パーティションのログが占有するディスク容量 | host, topic |
B |
Broker サービスメトリクス¶
kafka_server メトリクスセットには 9 個の推奨メトリクスコンテキストが含まれます。
| メトリクス名 | 説明 | ディメンション | 単位 |
|---|---|---|---|
BrokerTopicMetrics_OneMinuteRate{name=BytesInPerSec} |
Broker または Topic が 1 秒あたりに受信するプロデュースメッセージのバイト数 | host, topic |
B/S |
BrokerTopicMetrics_OneMinuteRate{name=BytesOutPerSec} |
Broker または Topic が 1 秒あたりにコンシューマへ送信するバイト数 | host, topic |
B/S |
BrokerTopicMetrics_OneMinuteRate{name=FetchMessageConversionsPerSec} |
Broker が 1 秒あたりに実行する Fetch メッセージ形式変換の回数 | host, topic |
ops |
BrokerTopicMetrics_OneMinuteRate{name=MessagesInPerSec} |
Broker または Topic が 1 秒あたりに受信するメッセージ数 | host, topic |
ops |
BrokerTopicMetrics_OneMinuteRate{name=TotalFetchRequestsPerSec} |
Broker または Topic が 1 秒あたりに受信する Fetch リクエスト数 | host, topic |
ops |
BrokerTopicMetrics_OneMinuteRate{name=TotalProduceRequestsPerSec} |
Broker または Topic が 1 秒あたりに受信する Produce リクエスト数 | host, topic |
ops |
KafkaRequestHandlerPool_FiveMinuteRate{name=RequestHandlerAvgIdlePercent} |
Broker のリクエスト処理スレッドの直近 5 分間の平均アイドル率 | cloud_provider, cluster_name, host |
percent |
ReplicaManager_Value{name=UnderMinIsrPartitionCount} |
同期レプリカ数が min.insync.replicas を下回るパーティション数 | cloud_provider, cluster_name |
count |
ReplicaManager_Value{name=UnderReplicatedPartitions} |
レプリカ数が目標レプリカ係数を下回るパーティション数 | cloud_provider, cluster_name |
count |
ノードリソースメトリクス¶
kafka_node メトリクスセットには 11 個の推奨メトリクスコンテキストが含まれます。
| メトリクス名 | 説明 | ディメンション | 単位 |
|---|---|---|---|
cpu_seconds_total{mode=idle} |
idle CPU 時間の増加率から逆算した Broker ノードの CPU 使用率 | host |
percent |
disk_read_bytes_total |
Broker ノードのディスクが 1 秒あたりに読み取るバイト数 | host |
B/S |
disk_reads_completed_total |
Broker ノードのディスクで 1 秒あたりに完了した読み取り操作数 | host |
ops |
disk_writes_completed_total |
Broker ノードのディスクで 1 秒あたりに完了した書き込み操作数 | host |
ops |
disk_written_bytes_total |
Broker ノードのディスクが 1 秒あたりに書き込むバイト数 | host |
B/S |
load1 |
Broker ノードの過去 1 分間のシステム平均負荷 | host |
- |
load15 |
Broker ノードの過去 15 分間のシステム平均負荷 | host |
- |
load5 |
Broker ノードの過去 5 分間のシステム平均負荷 | host |
- |
memory_MemTotal_bytes |
総メモリと利用可能メモリから算出した Broker ノードのメモリ使用率 | - | percent |
network_receive_bytes_total{device!=lo} |
Broker ノードのループバック以外の NIC が 1 秒あたりに受信するバイト数 | host |
B/S |
network_transmit_bytes_total{device!=lo} |
Broker ノードのループバック以外の NIC が 1 秒あたりに送信するバイト数 | host |
B/S |
Producer クライアントメトリクス¶
kafka_producer メトリクスセットには 13 個の推奨メトリクスコンテキストが含まれます。
| メトリクス名 | 説明 | ディメンション | 単位 |
|---|---|---|---|
metrics_buffer_available_bytes |
Producer が現在未使用のバッファメモリ量 | client_id, host |
B |
metrics_buffer_exhausted |
Producer がバッファ枯渇により破棄した累計レコード送信数 | client_id, host |
count |
metrics_buffer_exhausted_rate |
Producer が 1 秒あたりにバッファ枯渇により破棄したレコード送信数 | client_id, host |
ops |
metrics_bufferpool_wait_time_ns |
Producer がバッファ空間の割り当てを待機した累計時間 | client_id, host |
ns |
metrics_connection_count |
クライアントの現在のアクティブ接続数 | client_id, host |
count |
metrics_failed_authentication |
クライアント認証失敗の累計接続数 | client_id, host |
count |
metrics_flush_time_ns |
Producer が flush 操作を実行した累計時間 | client_id, host |
ns |
metrics_io_wait_time_ns |
Producer の I/O スレッドが読み書き可能なソケットを待機した累計時間 | client_id, host |
ns |
metrics_request_rate |
クライアントが 1 秒あたりに送信するリクエスト数 | client_id, host |
ops |
metrics_requests_in_flight |
Producer が送信済みで、まだ応答を受信していないリクエスト数 | client_id, host |
count |
metrics_response_rate |
クライアントが 1 秒あたりに受信するレスポンス数 | client_id, host |
ops |
metrics_select_rate |
クライアントの I/O スレッドが 1 秒あたりに select を実行する回数 | client_id, host |
ops |
metrics_txn_commit_time_ns |
Producer がトランザクションをコミットするのに要した累計時間 | client_id, host |
ns |
Consumer クライアントメトリクス¶
kafka_consumer メトリクスセットには 14 個の推奨メトリクスコンテキストが含まれます。
| メトリクス名 | 説明 | ディメンション | 単位 |
|---|---|---|---|
coordinator_metrics_rebalance_latency |
Consumer Group の直近 1 回のリバランス総所要時間 | client_id, host |
ms |
coordinator_metrics_rebalance_rate_per_hour |
Consumer Group で 1 時間あたりに発生するリバランスの平均回数 | client_id, host |
回/時 |
metrics_connection_close_rate |
Consumer が 1 秒あたりに閉じる接続数 | client_id, host |
ops |
metrics_connection_count |
クライアントの現在のアクティブ接続数 | client_id, host |
count |
metrics_failed_authentication |
クライアント認証失敗の累計接続数 | client_id, host |
count |
metrics_incoming_byte_rate |
クライアントが 1 秒あたりにネットワークソケットから読み取るバイト数 | client_id, host |
B/S |
metrics_io_time_ns_avg |
Consumer が各 select 呼び出しで I/O を実行する平均時間 | client_id, host |
ns |
metrics_io_wait_time_ns_avg |
Consumer の I/O スレッドが読み書き可能なソケットを待機する平均時間 | client_id, host |
ns |
metrics_outgoing_byte_rate |
クライアントが 1 秒あたりに Broker へ送信するバイト数 | client_id, host |
B/S |
metrics_request_rate |
クライアントが 1 秒あたりに送信するリクエスト数 | client_id, host |
ops |
metrics_request_size_avg |
Consumer リクエストの平均サイズ | client_id, host |
B |
metrics_response_rate |
クライアントが 1 秒あたりに受信するレスポンス数 | client_id, host |
ops |
metrics_select_rate |
クライアントの I/O スレッドが 1 秒あたりに select を実行する回数 | client_id, host |
ops |
metrics_time_between_poll_avg |
Consumer の連続する 2 回の poll 呼び出し間の平均間隔 | client_id, host |
ms |
Kafka Streams メトリクス¶
kafka_stream メトリクスセットには 25 個の推奨メトリクスコンテキストが含まれます。
| メトリクス名 | 説明 | ディメンション | 単位 |
|---|---|---|---|
stream_state_metrics_all_rate |
Kafka Streams の状態ストアが 1 秒あたりに実行する操作数 | host, rocksdb_state_id, thread_id |
ops |
stream_state_metrics_block_cache_capacity |
Kafka Streams RocksDB ブロックキャッシュの容量 | host, rocksdb_state_id, thread_id |
B |
stream_state_metrics_block_cache_data_hit_ratio |
Kafka Streams RocksDB ブロックキャッシュのデータヒット率 | host, rocksdb_state_id, thread_id |
percent |
stream_state_metrics_block_cache_filter_hit_ratio |
Kafka Streams RocksDB ブロックキャッシュのフィルタヒット率 | host, rocksdb_state_id, thread_id |
percent |
stream_state_metrics_block_cache_index_hit_ratio |
Kafka Streams RocksDB ブロックキャッシュのインデックスヒット率 | host, rocksdb_state_id, thread_id |
percent |
stream_state_metrics_block_cache_usage |
Kafka Streams RocksDB ブロックキャッシュの現在使用量 | host, rocksdb_state_id, thread_id |
B |
stream_state_metrics_bytes_read_compaction_rate |
Kafka Streams の状態ストア圧縮で 1 秒あたりに読み取るバイト数 | host, rocksdb_state_id, thread_id |
B/S |
stream_state_metrics_bytes_read_rate |
Kafka Streams の状態ストアが 1 秒あたりに読み取るバイト数 | host, rocksdb_state_id, thread_id |
B/S |
stream_state_metrics_bytes_written_compaction_rate |
Kafka Streams の状態ストア圧縮で 1 秒あたりに書き込むバイト数 | host, rocksdb_state_id, thread_id |
B/S |
stream_state_metrics_bytes_written_rate |
Kafka Streams の状態ストアが 1 秒あたりに書き込むバイト数 | host, rocksdb_state_id, thread_id |
B/S |
stream_task_metrics_active_process_ratio |
Kafka Streams のタスクスレッドがレコード処理に使用している時間比率 | host, task_id, thread_id |
percent |
stream_task_metrics_cache_size_bytes |
Kafka Streams のタスクキャッシュ総サイズ | host, task_id, thread_id |
B |
stream_task_metrics_enforced_processing_rate |
Kafka Streams のタスクが 1 秒あたりに強制処理を実行する回数 | host, task_id, thread_id |
ops |
stream_task_metrics_process_rate |
Kafka Streams のタスクが 1 秒あたりに処理するレコード数 | host, task_id, thread_id |
ops |
stream_thread_metrics_blocked_time_ns |
Kafka Streams スレッドが待機のためにブロックされた累計時間 | host, thread_id |
ns |
stream_thread_metrics_commit_rate |
Kafka Streams スレッドが 1 秒あたりに状態をコミットする回数 | host, thread_id |
ops |
stream_thread_metrics_poll_latency_avg |
Kafka Streams スレッドの poll 呼び出しの平均遅延 | host, thread_id |
ms |
stream_thread_metrics_poll_rate |
Kafka Streams スレッドが 1 秒あたりに poll を実行する回数 | host, thread_id |
ops |
stream_thread_metrics_task |
Kafka Streams スレッドが作成した累計タスク数 | host, thread_id |
count |
stream_thread_metrics_task_closed |
Kafka Streams スレッドが終了した累計タスク数 | host, thread_id |
count |
stream_thread_metrics_thread_start_time |
Kafka Streams スレッドの起動時刻 | host, thread_id |
ms |
stream_topic_metrics_bytes_consumed |
Kafka Streams が Topic から累計で消費したバイト数 | host, topic |
B |
stream_topic_metrics_bytes_produced |
Kafka Streams が Topic へ累計で生成したバイト数 | host, topic |
B |
stream_topic_metrics_records_consumed |
Kafka Streams のソースプロセッサノードが累計で消費したレコード数 | host, processor_node_id, topic |
count |
stream_topic_metrics_records_produced |
Kafka Streams のシンクプロセッサノードが累計で生成したレコード数 | host, processor_node_id, topic |
count |
Kafka Connect メトリクス¶
kafka_connect メトリクスセットには 8 個の推奨メトリクスコンテキストが含まれます。
| メトリクス名 | 説明 | ディメンション | 単位 |
|---|---|---|---|
worker_connector_count |
Kafka Connect Worker が現在実行している Connector の数 | host |
count |
worker_connector_startup_attempts |
Kafka Connect Worker が Connector の起動を試行した累計回数 | host |
count |
worker_connector_startup_failure_percentage |
Kafka Connect Worker で Connector の起動に失敗した割合 | host |
percent |
worker_rebalance_completed_rebalances |
Kafka Connect Worker で完了したリバランスの累計回数 | host |
count |
worker_rebalance_time_since_last_rebalance_ms |
Kafka Connect Worker で前回のリバランス完了からの経過時間 | host |
ms |
worker_task_startup_attempts |
Kafka Connect Worker が Task の起動を試行した累計回数 | host |
count |
worker_task_startup_failure |
Kafka Connect Worker で Task の起動に失敗した累計回数 | host |
count |
worker_task_startup_failure_percentage |
Kafka Connect Worker で Task の起動に失敗した割合 | host |
percent |