RocketMQ 用 ApsaraMQ でのメッセージの処理には、メッセージの送信、メッセージの保存、メッセージの消費という主要なアクティビティが含まれます。RocketMQ 用 ApsaraMQ は、アクティビティに関連するデータをトレースパラメーターとして定義します。メッセージトレースには、メッセージの送信結果、送信時間、メッセージがブローカーに到着した時刻、メッセージの消費結果、消費時間、クライアント情報が含まれます。RocketMQ 用 ApsaraMQ では、メッセージトレースを視覚的にクエリできます。メッセージが期待どおりに送信または消費されない場合、または特定のメッセージを追跡する場合、メッセージのトレースをクエリして、各アクティビティでのメッセージの処理ステータスを取得できます。
メッセージトレースデータ
RocketMQ 用 ApsaraMQ では、メッセージの完全なトレースには、プロデューサー、ブローカー、コンシューマーが関係します。各ロールがメッセージを処理すると、関連情報がトレースに追加されます。集約された情報を使用して、メッセージのステータスを取得できます。

使用上の注意
メッセージが送信された後、RocketMQ 用 ApsaraMQ コンソールでメッセージの属性に基づいてメッセージのトレースをクエリできます。この機能は、すべてのタイプのメッセージに有効です。メッセージトレース機能を使用する前に、次の点に注意してください。
メッセージトレースクエリの時間範囲
RocketMQ 用 ApsaraMQ では、現在の時点より 1 日以内に生成されたメッセージのトレースをクエリできます。たとえば、現在の時点が 2023 年 11 月 30 日 15:09:48 の場合、2023 年 11 月 29 日 15:09:48 から 2023 年 11 月 30 日 15:09:48 までの間に生成されたメッセージのトレースをクエリできます。
クエリ結果への消費ステータスの影響
メッセージタイプ | 説明 |
メッセージが消費されていない場合は、未消費 と表示されます。メッセージが消費された後、送信情報と消費情報が表示されます。 | |
メッセージが消費されていない場合は、未消費 と表示されます。メッセージが消費された後、送信情報と消費情報が表示されます。 | |
現在のシステム時刻が指定された消費時刻より前の場合、メッセージのトレースはクエリできますが、メッセージ自体はクエリできません。 | |
メッセージのローカルトランザクションがコミットされる前は、メッセージのトレースはクエリできますが、メッセージ自体はクエリできません。 |
メッセージトレース機能をサポートする SDK のバージョン
プロトコル | 言語 | バージョン | 説明 |
TCP | Java | V1.2.7.Final 以降 | |
C/C++ | V1.1.2 以降 | ||
.NET | V1.1.2 以降 | ||
HTTP | Node.js | V1.0.2 以降 | |
その他 | V1.0.1 以降 |
拡張メッセージトレース機能を使用するための前提条件
基本的なメッセージトレース機能と比較して、拡張メッセージトレース機能では、RocketMQ 用 ApsaraMQ コンソールでより多くのトレースデータを表示できます。メッセージ消費中に生成されたトレースデータ、およびスケジュールメッセージ、遅延メッセージ、トランザクションメッセージのトレースデータをクエリできます。トレースクエリ結果で返されるパラメーターの詳細については、「パラメーター」をご参照ください。
Java 用 TCP クライアント SDK:
Java 用 TCP クライアント SDK が V2.x.x.Final にアップグレードされています。
インスタンスは、中国 (杭州)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (深セン)、中国 (成都)、ドイツ (フランクフルト)、インドネシア (ジャカルタ) のいずれかのリージョンにデプロイされている必要があります。
C++ 用 TCP クライアント SDK:
C++ 用 TCP クライアント SDK が V3.x.x にアップグレードされています。
インスタンスは任意のリージョンにデプロイできます。
一般的なシナリオ
本番環境でメッセージが期待どおりに送信または消費されない場合、メッセージトレース機能を使用して問題をトラブルシューティングできます。特定の時間範囲内で、メッセージ ID、メッセージキー、またはトピック別にメッセージのトレースをクエリして、メッセージが期待どおりに送信または消費されているかどうかを確認できます。

例
期待どおりにメッセージを受信せず、関連ログに基づいて原因を特定したい場合は、次の手順を実行して、メッセージトレースを使用して問題をトラブルシューティングします。
メッセージ ID、メッセージキー、トピック、メッセージが送信されたおおよその時点など、メッセージに関する情報を収集します。
RocketMQ 用 ApsaraMQ コンソールにログインし、収集した情報に基づいてクエリタスクを作成して、メッセージトレースをクエリします。
クエリ結果を確認し、原因を分析します。
トレースに 未消費 と表示されている場合は、グループ ページに移動して消費ステータスを確認し、問題がメッセージの蓄積によって発生しているかどうかを判断できます。詳細については、「コンシューマーの詳細を表示する」をご参照ください。
メッセージが消費されている場合は、消費情報を確認して、対応するコンシューマークライアントとメッセージが消費された時刻を見つけます。次に、コンシューマークライアントにログインして、関連ログを表示します。
手順
RocketMQ 用 ApsaraMQ コンソール にログインします。左側のナビゲーションウィンドウで、インスタンス数 をクリックします。
上部のナビゲーションバーで、中国 (杭州) などのリージョンを選択します。[インスタンス] ページで、管理するインスタンスの名前をクリックします。
左側のナビゲーションウィンドウで、メッセージトレース をクリックします。表示されるページの左上隅にある クエリタスクの作成 をクリックします。
メッセージトレースクエリタスクの作成 パネルで、ビジネス要件に基づいてクエリ条件を設定します。次に、[OK] をクリックします。
重要クエリ範囲を絞り込み、クエリを高速化するために、時間範囲をできるだけ正確に設定してください。
メッセージトレース機能では、次のクエリ方法がサポートされています。
Message ID から検索: 完全一致で高速なため、この方法をお勧めします。
Message Key から検索: この方法はあいまい検索を使用します。この方法を使用すると、最大 1,000 件のメッセージのトレースをクエリできます。この方法は、メッセージの ID を記録しなかったが、メッセージを一意に識別するキーを指定した場合にのみ適しています。
トピックから検索: この方法は範囲クエリを使用します。この方法は、メッセージ ID を記録しなかった、またはメッセージキーを指定しなかった小規模メッセージボリュームのシナリオに適しています。このクエリ方法は使用しないことをお勧めします。ほとんどの場合、特定の時間範囲内にトピックに多数のメッセージが生成されます。この方法を使用すると、クエリされたメッセージの中から特定のメッセージを識別することはほとんどできません。
クエリタスクを作成した後、メッセージトレース ページでクエリタスクを表示できます。クエリ中 が ステータス 列に表示されている場合、メッセージトレースを表示できません。タスクリストの右上隅にある
ボタンをクリックして、タスクのステータスが 検索完了 に変わるまでタスクステータスを更新できます。
パラメーター
インスタンスとクライアント SDK のバージョンが拡張メッセージトレース機能を使用するための前提条件を満たしている場合にのみ、コンソールで次のパラメーターを表示できます。詳細については、「拡張メッセージトレース機能を使用するための前提条件」をご参照ください。
プロデューサー セクションの [AccessKey]
[MQ サーバー] セクションの [サーバー到着時刻]、[配信予定時刻]、[配信時刻]、[コミット/ロールバック時刻]
コンシューマー セクションの コンシューマーに到達 と 処理時間待ち
表 1. パラメーター
セクション | パラメーター | 説明 |
基本情報 | [メッセージ ID] | メッセージのグローバルに一意な識別子。RocketMQ 用 ApsaraMQ によって自動的に生成されます。 |
[トピック] | メッセージが属するトピック。 | |
メッセージキー | メッセージのビジネス識別子。メッセージキーはメッセージプロデューサーによって指定され、ビジネスロジックを一意に識別します。 | |
メッセージタグ | トピック内のメッセージを分類するために使用されるタグ。 | |
プロデューサー | [AccessKey] | Alibaba Cloud アカウントまたは RAM (Resource Access Management) ユーザーの AccessKey ID。AccessKey ID は、ユーザー ID を検証するために使用されます。SDK を使用するか、API 操作を呼び出して RocketMQ 用 ApsaraMQ リソースにアクセスする場合、ID 検証に AccessKey ID が必要です。 |
クライアント IP | メッセージプロデューサーのクライアント IP アドレス。 | |
[メッセージ生成時刻] | プロデューサーからメッセージが送信された時刻を示すタイムスタンプ。 | |
RT 送信 | メッセージの送信に消費された時間。単位: ミリ秒。 | |
送信ステータス | メッセージ送信タスクのステータス。詳細については、「メッセージステータス」の 送信ステータス をご参照ください。 | |
[MQ サーバー] | メッセージのタイプ | 説明 スケジュールメッセージ は、メッセージがスケジュール済みメッセージか遅延メッセージかに関係なく、メッセージのタイプ パラメーターに対して表示されます。 |
[サーバー到着時刻] | メッセージが ApsaraMQ for RocketMQ ブローカーに到着した時刻です。 | |
[配信予定日時] | スケジュールされたメッセージがコンシューマーに配信される予定時刻です。 | |
[配信日時] | コンシューマーにメッセージを配信できる時間。 | |
コミット/ロールバック日時 | トランザクションがコミットまたはロールバックされた時間です。 | |
コンシューマー | アクセスキー | Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。AccessKey ID は、ユーザー ID を検証するために使用されます。SDK を使用するか、API 操作を呼び出して ApsaraMQ for RocketMQ リソースにアクセスする場合、認証に AccessKey ID が必要です。 |
コンシューマーに到達 | コンシューマー クライアントにメッセージが到着した時間。 | |
処理時間待ち | メッセージがコンシューマー クライアントに到着した時間と、メッセージの消費が開始された時間の間の期間です。 | |
配信結果 | メッセージは、コンシュームされるまでに複数回配信される必要がある場合があります。このパラメーターは、特定の 1 回の配信の結果を示します。詳細については、「メッセージステータス」の消費ステータス をご参照ください。 | |
クライアント IP アドレス | 詳細については、「App Service スタックの概要」をご参照ください。 | |
メッセージ処理開始 | クライアントがメッセージの消費を開始したことを示すタイムスタンプです。 | |
メッセージ処理終了 | コンシューマーがメッセージの消費を完了したことを示すタイムスタンプです。 | |
メッセージ処理時間 | コンシューマーがメッセージを消費するために使用される時間。 |
メッセージ追跡ページで、クエリタスクを見つけ、検索結果 を 操作 列でクリックします。表示されるページで、送信ステータス 列と 消費ステータス 列で、クエリ対象のメッセージの送信ステータスと消費ステータスを表示できます。また、メッセージ追跡詳細ページの プロデューサー セクションと コンシューマー セクションで、各メッセージの送信ステータスと消費ステータスを表示することもできます。次の表は、送信ステータスと消費ステータスの可能性について説明しています。
表 2. メッセージ ステータス
種類 | 状態 |
送信ステータス | 送信しました。 |
送信に失敗しました。 | |
メッセージのスケジュール中です。 | |
コミットされていないトランザクションメッセージ | |
トランザクションメッセージのロールバック | |
消費ステータス | すべて成功しました。 |
一部成功 | |
すべて失敗しました。 | |
未消費 | |
消費結果は返されません。 | |
メッセージが消費されました。 |
|
メッセージの消費に失敗しました。 |
Steps
メッセージのトレースをクエリできないのはなぜですか?
SDK のバージョンが有効かどうかを確認します。メッセージトレース機能をサポートする SDK のバージョンについては、「メッセージトレース機能をサポートする SDK のバージョン」をご参照ください。
指定した時間範囲が有効かどうかを確認します。
ApsaraMQ for RocketMQ では、現在の時点より 1 日前に生成されたメッセージのトレースをクエリできます。たとえば、現在の時点が 2023 年 11 月 30 日 15:09:48 の場合、2023 年 11 月 29 日 15:09:48 から 2023 年 11 月 30 日 15:09:48 までに生成されたメッセージのトレースをクエリできます。
メッセージトレース機能は非同期リンクで実装されているため、メッセージのトレースデータが不完全になる場合があります。指定したクエリ条件が有効であっても、システムがクエリに対して結果を返さない場合があります。この場合、クライアントでログをクエリして消費の詳細を取得できます。詳細については、「ログ設定」をご参照ください。
参照
また、ApsaraMQ for RocketMQ が提供する以下の API 操作を呼び出すことによって、メッセージトレースをクエリすることもできます。