メトリクス
RocketMQはPrometheusフォーマットで以下のメトリクスを公開しています。これらのメトリクスを使用してクラスタを監視できます。
- ブローカーメトリクス
- プロデューサーメトリクス
- コンシューマーメトリクス
バージョンサポート:RocketMQの以下のメトリクスは5.1.0以降に導入され、ブローカーのみをサポートしています。
メトリクスの詳細
メトリクスの種類
RocketMQのメトリクス定義の標準は、オープンソースのPrometheusのメトリクス定義標準に準拠しています。RocketMQが提供するメトリクスの種類には、カウンター、ゲージ、ヒストグラムが含まれます。詳細については、メトリクスの種類を参照してください。
ブローカーメトリクス
次の表は、Apache RocketMQブローカーのメッセージキューに関連するメトリクスのラベルについて説明しています。
- cluster:RocketMQクラスタ名。
- node_type:サービスノードの種類。proxy、broker、nameserverなど。
- node_id:サービスノードのID。
- topic:RocketMQのトピック。
- message_type:メッセージの種類。以下が含まれます。
normal:通常のメッセージ。
fifo:順序付けられたメッセージ。
transaction:トランザクションメッセージ。
delay:スケジュールされたメッセージまたは遅延メッセージ。 - consumer_group:コンシューマーグループのID。
種類 | 名前 | 単位 | 説明 | ラベル |
---|---|---|---|---|
カウンター | rocketmq_messages_in_total | 件数 | 生成されたメッセージの数。 | cluster,node_type,node_id,topic,message_type |
カウンター | rocketmq_messages_out_total | 件数 | 消費されたメッセージの数。 | cluster,node_type,node_id,topic, consumer_group |
カウンター | rocketmq_throughput_in_total | バイト | 生成された書き込みスループット。 | cluster,node_type,node_id,topic,message_type |
カウンター | rocketmq_throughput_out_total | バイト | 生成された読み取りスループット。 | cluster,node_type,node_id,topic, consumer_group |
ヒストグラム | rocketmq_message_size | バイト | メッセージサイズの分布。このメトリクスは、メッセージが送信された場合にのみカウントされます。分布範囲は以下のとおりです。 le_1_kb:≤ 1 KB le_4_kb:≤ 4 KB le_512_kb:≤ 512 KB le_1_mb:≤ 1 MB le_2_mb:≤ 2 MB le_4_mb:≤ 4 MB le_overflow:> 4 MB | cluster,node_type,node_id,topic,message_type |
ゲージ | rocketmq_consumer_ready_messages | 件数 | 準備完了メッセージの数。 | cluster,node_type,node_id,topic, consumer_group |
ゲージ | rocketmq_consumer_inflight_messages | 件数 | 処理中のメッセージの数。 | cluster,node_type,node_id,topic, consumer_group |
ゲージ | rocketmq_consumer_queueing_latency | ミリ秒 | 準備完了メッセージのキューイング遅延時間。 | cluster,node_type,node_id,topic, consumer_group |
ゲージ | rocketmq_consumer_lag_latency | ミリ秒 | メッセージが消費されるまでの遅延時間。 | cluster,node_type,node_id,topic, consumer_group |
カウンター | rocketmq_send_to_dlq_messages_total | 件数 | デッドレターキューに送信されたメッセージの数。 | cluster,node_type,node_id,topic, consumer_group |
ヒストグラム | rocketmq_rpc_latency | ミリ秒 | RPC呼び出しレイテンシ。 | cluster,node_typ,node_id,protocol_type,request_code,response_code |
ゲージ | rocketmq_storage_message_reserve_time | ミリ秒 | メッセージ保存時間。 | cluster,node_type,node_id |
ゲージ | rocketmq_storage_dispatch_behind_bytes | バイト | 未配信メッセージサイズ。 | cluster,node_type,node_id |
ゲージ | rocketmq_storage_flush_behind_bytes | バイト | 未フラッシュメッセージサイズ。 | cluster,node_type,node_id |
ゲージ | rocketmq_thread_pool_wartermark | 件数 | スレッドプールにキューイングされたタスクの数。 | cluster,node_type,node_id,name |
プロデューサーメトリクス
次の表は、Apache RocketMQのプロデューサーに関連するメトリクスのラベルについて説明しています。
- cluster:RocketMQクラスタ名。
- node_type:サービスノードの種類。proxy、broker、nameserverなど。
- node_id:サービスノードのID。
- topic:Apache RocketMQのトピック。
- message_type:メッセージの種類。以下が含まれます。
normal:通常のメッセージ。
fifo:順序付けられたメッセージ。
transaction:トランザクションメッセージ。
delay:スケジュールされたメッセージまたは遅延メッセージ。 - client_id:クライアントのID。
- invocation_status:メッセージ送信のためのAPI呼び出しの結果。成功と失敗が含まれます。
種類 | 名前 | 単位 | 説明 | ラベル |
---|---|---|---|---|
ヒストグラム | rocketmq_send_cost_time | ミリ秒 | プロダクションAPI呼び出し時間の分布。分布範囲は以下のとおりです。 le_1_ms le_5_ms le_10_ms le_20_ms le_50_ms le_200_ms le_500_ms le_overflow | topic,client_id,invocation_status |
コンシューマーメトリクス
次の表は、Apache RocketMQのコンシューマーに関連するメトリクスのラベルについて説明しています。
- topic:Apache RocketMQのトピック。
- consumer_group:コンシューマーグループのID。
- client_id:クライアントのID。
- invocation_status:メッセージ送信のためのAPI呼び出しの結果。成功と失敗が含まれます。
種類 | 名前 | 単位 | 説明 | ラベル |
---|---|---|---|---|
ヒストグラム | rocketmq_process_time | ミリ秒 | メッセージ処理時間の分布。分布範囲は以下のとおりです。 le_1_ms le_5_ms le_10_ms le_100_ms le_10000_ms le_60000_ms le_overflow | topic,consumer_group,client_id,invocation_status |
ゲージ | rocketmq_consumer_cached_messages | メッセージ | PushConsumerのローカルバッファキューにあるメッセージの数。 | topic,consumer_group,client_id |
ゲージ | rocketmq_consumer_cached_bytes | バイト | PushConsumerのローカルバッファキューにあるメッセージの合計サイズ。 | topic,consumer_group,client_id |
ヒストグラム | rocketmq_await_time | ミリ秒 | PushConsumerのローカルバッファキューにあるメッセージのキューイング時間の分布。分布範囲は以下のとおりです。 le_1_ms le_5_ms le_20_ms le_100_ms le_1000_ms le_5000_ms le_10000_ms le_overflow | topic,consumer_group,client_id |
背景情報
RocketMQは、以下のビジネスシナリオに基づいてメトリクスを定義します。
メッセージ蓄積シナリオ
上記の図は、さまざまな段階におけるメッセージの数と期間を示しています。これらのメトリクスを監視することで、ビジネス消費に異常がないかどうかを判断できます。次の表は、これらのメトリクスの意味と、これらのメトリクスの計算に使用される式について説明しています。
名前 | 説明 | 式 |
---|---|---|
処理中のメッセージ | コンシューマーによって処理されているが、まだ確認応答されていないメッセージの数。 | 最後にプルされたメッセージのオフセット - 最後にコミットされたメッセージのオフセット |
準備完了メッセージ | 消費の準備ができているメッセージの数。 | 最大オフセット - 最後にプルされたメッセージのオフセット |
準備完了時刻 | 通常のメッセージまたは順序付けられたメッセージ:メッセージがブローカーに保存された時刻。 スケジュールされたメッセージ:タイミング終了時刻。 トランザクションメッセージ:トランザクションコミット時刻。 | -- |
準備完了メッセージのキュー時間 | 最も古い準備完了メッセージの準備完了時刻と現在時刻との間の時間間隔。この時間は、コンシューマーがメッセージをプルする際の適時性を反映しています。 | 現在時刻 - 最も古い準備完了メッセージの準備完了時刻 |
コンシューマーラグ時間 | 最も古い未確認応答メッセージの準備完了時刻と現在時刻との間の時間差。 この時間は、コンシューマーがメッセージ処理を完了する際の適時性を反映しています。 | 現在時刻 - 最も古い未確認応答メッセージの準備完了時刻 |
PushConsumer消費シナリオ
PushConsumerでは、SDK内部の典型的なReactorスレッドモデルに基づいてリアルタイムメッセージ処理機能が実装されています。以下に示すように、SDKには組み込みのロングポーリングスレッドがあり、メッセージをSDKの組み込みバッファキューに非同期的にプルし、コンシューマースレッドに個別にコミットして、リスナーがローカル消費ロジックを実行するようにトリガーします。
PushConsumerシナリオにおけるローカルバッファキューのメトリクスは以下のとおりです。
- ローカルバッファキューのメッセージ数:ローカルバッファキューのメッセージの総数。
- ローカルバッファキューのメッセージサイズ:ローカルバッファキューのすべてのメッセージサイズの合計。
- メッセージ待機時間:メッセージがローカルバッファキューに一時的にキャッシュされ、処理されるのを待機している時間。
メトリクスの取得方法
現在、gRPC OTLPとPrometheusの2つのエクスポーターがサポートされています。
gRPC OTLPエクスポーター
gRPC OTLPエクスポーターは、指定されたOpenTelemetryコレクターにメトリクスを定期的に報告します。
前提条件:GRPC OpenTelemetry ProtocolをサポートするOpenTelemetryコレクターをデプロイします。
ブローカーメトリクスのgRPC OTLPエクスポーターを有効にするには、次の手順を実行します。
metricsExporterType
をOTLP_GRPC
に設定します。metricsGrpcExporterTarget
をOpenTelemetryコレクターによって提供されるエンドポイントに設定します。
オプションの構成
metricsGrpcExporterHeader
:key1:value1,key2:value2の形式でリクエストヘッダーをgRPC OTLPエクスポーターに添付します。metricGrpcExporterTimeOutInMills
:gRPC OTLPエクスポーターのリクエストタイムアウトを設定します。metricGrpcExporterIntervalInMills
:gRPC OTLPエクスポーターのレポート間隔を設定します。
Prometheusエクスポーター
Prometheusエクスポーターは、プルモードと累積集計のみをサポートしています。詳細については、OpenTelemetry Metrics Exporter - Prometheusを参照してください。
ブローカーメトリクスのPrometheusエクスポーターを有効にするには、次の手順を実行します。
metricsExporterType
をPROM
に設定します。
http://<broker-ip>:5557/metrics
にアクセスしてメトリクスを表示します。Prometheusでサービスディスカバリを設定するか、プルタスクを手動で構成してメトリクスを収集します。
オプションの構成
metricsPromExporterPort
:ブローカーがメトリクスサービスを公開するポート番号。デフォルトは5557
です。metricGrpcExporterTimeOutInMills
:公開されたメトリクスサービスのホスト名。デフォルトは、ブローカーがNameServerに登録するIP、brokerIP1です。