RocketMQ (Prometheus)¶
Apache RocketMQ は分散メッセージングおよびストリーム処理プラットフォームです。サービスの疎結合化、トラフィックのピーク平準化、イベント駆動型アプリケーションなどに利用できます。
対応バージョンについては RocketMQ 公式メトリクスドキュメントを参照してください。独立した Exporter を使用する環境では RocketMQ インテグレーションを参照してください。
設定¶
前提条件¶
- バージョン
5.1.0以降の RocketMQ Broker が稼働していること。 - Broker が実際に読み込む設定ファイルを編集し、サービスを再起動できること。クラスター構成では、監視対象のすべての Broker でメトリクスエンドポイントを有効にしてください。
- DataKit から各 Broker のメトリクスポートにアクセスできること。本書ではデフォルトのポート
5557を使用します。 - 検証用の Topic、コンシューマーグループ、およびメッセージの生成・消費トラフィックがあること。トラフィックがない場合、一部のメトリクスがゼロになるか、対応する系列が存在しないことがあります。
Broker 内蔵の Prometheus メトリクスを有効にする¶
Broker の起動引数 -c が実際に指定する設定ファイル(通常は broker.conf)を編集し、次の設定を追加します。
保存後、既存のデプロイ方法で該当する Broker を再起動します。本番クラスターでは既存の保守手順に従ってローリング再起動を行います。その後、Broker のホストでメトリクスエンドポイントを確認します。
応答には rocketmq_ で始まるメトリクスとその型情報が含まれる必要があります。DataKit のホストからも、実際の Broker アドレスを使用してエンドポイントへの接続を確認してください。
metricsPromExporterHost=0.0.0.0 はすべてのネットワークインターフェースで待ち受ける設定です。セキュリティグループやファイアウォールでアクセス元を制限してください。Docker ではコンテナ内のポート 5557 を DataKit から接続可能なホストポートにマッピングします。DataKit もコンテナで稼働している場合、その 127.0.0.1 は DataKit コンテナ自身を指します。
Prom コレクターの設定¶
DataKit のホストで Prom コレクターのサンプル設定をコピーします。
mkdir -p /usr/local/datakit/conf.d/prom
cp /usr/local/datakit/conf.d/samples/prom.conf.sample \
/usr/local/datakit/conf.d/prom/rocketmq.conf
rocketmq.conf を編集し、内容を次の設定に置き換えます。
[[inputs.prom]]
urls = ["http://127.0.0.1:5557/metrics"]
ignore_req_err = false
source = "rocketmq"
# 空のリストでは Counter、Gauge、Histogram を含むすべてのメトリクスタイプを収集します
metric_types = []
metric_name_filter = ["^rocketmq_"]
interval = "10s"
measurement_prefix = ""
measurement_name = "rocketmq"
# Prometheus メトリクスの完全なフィールド名を保持します
keep_exist_metric_name = true
| パラメーター | 説明 |
|---|---|
urls |
Broker のメトリクスエンドポイントのアドレス。127.0.0.1 は DataKit と Broker が同じホストで稼働するか、ネットワーク名前空間を共有する場合にのみ使用できます。 |
ignore_req_err |
false に設定し、メトリクスエンドポイントのリクエストエラーを保持して収集異常の調査に役立てます。 |
source |
DataKit 内で収集設定を区別するためのコレクターのエイリアス。 |
metric_types |
空のリストですべてのメトリクスタイプを収集し、Histogram メトリクスの収集漏れを防ぎます。 |
metric_name_filter |
rocketmq_ で始まるメトリクスのみを収集します。 |
interval |
収集間隔。本書では 10s に設定します。 |
measurement_prefix |
メジャーメントのプレフィックス。本書では空文字列に設定します。 |
measurement_name |
収集したメトリクスをすべて rocketmq メジャーメントに書き込みます。 |
keep_exist_metric_name |
true に設定し、Prometheus メトリクスの完全なフィールド名を保持します。 |
その他のパラメーターについては Prom コレクターのドキュメントを参照してください。
クラスター構成では、設定の urls を各 Broker の実際のメトリクスアドレスに置き換えます。
各 Broker ホストに DataKit を配置し、ローカルエンドポイントを収集する方法もあります。同じエンドポイントを重複して収集しないよう、いずれか一つの方法を選択してください。
設定を保存したら、DataKit を再起動して設定を反映します。
収集結果の確認¶
Prom 設定のデバッグコマンドで、変換後のメジャーメント、フィールド、タグを確認します。
デバッグ出力には rocketmq メジャーメントと rocketmq_ で始まるフィールドが含まれる必要があります。次のコマンドでコレクターの稼働状態とリクエストエラーを確認します。
メトリクス¶
本書の設定では、メトリクスは rocketmq メジャーメントに書き込まれ、フィールドには完全な Prometheus 名が保持されます。実際に収集できるフィールドは Broker の /metrics、DataKit のデバッグ出力、および取り込み結果を確認してください。
| メトリクス | 説明 | タイプ | 単位 |
|---|---|---|---|
rocketmq_messages_in_total |
Broker が受信したメッセージの累積数。毎秒のレートを計算して生成 TPS を確認します。 | Counter | 件 |
rocketmq_messages_out_total |
Broker がコンシューマーに配信したメッセージの累積数。毎秒のレートを計算して消費 TPS を確認します。 | Counter | 件 |
rocketmq_throughput_in_total |
プロデューサーが Broker に書き込んだ累積バイト数。毎秒のレートから書き込みスループットを求めます。 | Counter | Byte |
rocketmq_throughput_out_total |
コンシューマーが Broker から読み込んだ累積バイト数。毎秒のレートから読み込みスループットを求めます。 | Counter | Byte |
rocketmq_consumer_ready_messages |
該当する Topic とコンシューマーグループで、まだ取得されておらず消費を待っている準備済みメッセージ数。 | Gauge | 件 |
rocketmq_consumer_inflight_messages |
該当する Topic とコンシューマーグループで、取得済みだが完了確認されていないメッセージ数。 | Gauge | 件 |
rocketmq_consumer_lag_latency_milliseconds |
現在時刻と最も古い未確認メッセージが消費可能になった時刻との差。消費完了の遅延を示します。 | Gauge | ミリ秒 |
rocketmq_storage_flush_behind_bytes |
Broker でまだディスクにフラッシュされていないデータ量。 | Gauge | Byte |
rocketmq_message_size |
送信メッセージのサイズ分布。ヒストグラムのバケットから P95 を計算できます。 | Histogram | Byte |
rocketmq_rpc_latency_milliseconds |
Broker の RPC レイテンシ分布。リクエストタイプ別に送信・取得リクエストの P95 を確認できます。 | Histogram | ミリ秒 |
RocketMQ の公式論理メトリクス rocketmq_consumer_lag_latency と rocketmq_rpc_latency には、この例では単位サフィックス _milliseconds が付きます。Histogram メトリクスは _bucket、_sum、_count に展開されます(例:rocketmq_rpc_latency_milliseconds_bucket)。ビューやモニターを作成する前に、実際のフィールドと単位を確認してください。
Counter は累積値のため、そのまま TPS や毎秒のスループットとして表示できません。毎秒のレートを計算すると、メッセージ数の単位は件/秒、バイト数は Byte/s になります。Gauge は現在の状態を表すため、準備済みメッセージ数、処理中メッセージ数、消費遅延の値と傾向を直接確認します。消費遅延は最も古い未確認メッセージの待ち時間であり、完了したメッセージの平均処理時間ではありません。
主なタグ¶
| タグ | 説明 |
|---|---|
cluster |
RocketMQ クラスター名。 |
node_id |
Broker ノードの識別子。 |
topic |
Topic 名。トピック別の生成・消費状況を区別します。 |
consumer_group |
コンシューマーグループの識別子。滞留と消費遅延の特定に使用します。 |
タグはメトリクスごとに異なるため、実際の収集結果を確認してください。Broker のストレージメトリクスは通常 cluster、node_id 別に確認し、コンシューマーグループのメトリクスは cluster、topic、consumer_group 別に確認できます。