ApsaraMQ for MQTT デバイスで例外が発生した場合や、メッセージが想定どおりに送受信できない場合は、デバイスステータスクエリを使用して、デバイスがオンラインであるかどうかを確認し、そのサブスクリプションを確認し、接続とメッセージングの履歴をトレースします。これにより、問題の原因を迅速に特定できます。
前提条件
開始する前に、次のものがあることを確認してください:
ApsaraMQ for MQTT インスタンス
対象デバイスの [Group ID] と [Device ID]
デバイスステータスのクエリ
ApsaraMQ for MQTT コンソールにログインします。左側のナビゲーションペインで、[Instances] をクリックします。
上部メニューで、インスタンスが存在するリージョンを選択します。[Instances] ページで、インスタンス名をクリックして [Instance Details] ページに移動します。
[Instances] ページで、対象のインスタンスを見つけ、操作 列で を選択します。
デバイスステータスのクエリ ページで、Group ID と Device ID を入力し、検索 をクリックします。
クエリ結果は、[Device status]、[Device Trace]、[Message Trace] の 3 つのタブに表示されます。
クエリ結果の説明
[Device status] タブ
[Device status] タブには、デバイスの現在の接続状態とセッション設定が表示されます。
| フィールド | 説明 |
|---|---|
| [Client ID] | MQTT クライアントの一意の識別子。 |
| [オンラインステータス] | 接続状態:[Online] または [Offline]。 |
| [クライアントのアドレス] | クライアントの IP アドレス。 |
| [cleanSession] | クライアントの再接続時に、ブローカーが以前のサブスクリプションとキューに入れられたオフラインメッセージをクリアするかどうかを示します。true に設定すると、ブローカーは毎回クリーンセッションを開始します。false に設定すると、ブローカーはサブスクリプションや未配信メッセージなど、以前のセッション状態を復元します。詳細については、トピック「用語」の cleanSession セクションをご参照ください。 |
| [最終更新時間] | 最新のステータス変更のタイムスタンプ。 |
サブスクリプションセクション
デバイスステータスフィールドの下に表示される [Subscription] セクションには、デバイスが現在サブスクライブしているすべてのトピックが一覧表示されます。
| フィールド | 説明 |
|---|---|
| [親トピック] | クライアントがサブスクライブする ApsaraMQ for MQTT のレベル 1 トピック。 |
| [サブトピック] | 親トピック配下のレベル 2 またはレベル 3 のトピック。 |
| [QoS] | クライアントとブローカー間のメッセージ配信のサービス品質 (QoS) レベル。QoS は配信の保証レベルを示します:0 (最大 1 回)、1 (最小 1 回)、または 2 (正確に 1 回)。詳細については、「QoS レベルと cleanSession パラメーターの組み合わせ」をご参照ください。 |
クライアント ID の競合のトラブルシューティング
デバイスが予期せずオフラインになったり、繰り返し切断されたりする場合、[Client ID] の競合が原因である可能性があります。競合は、同じ [Client ID] が複数の同時接続 (重複接続) を開始したときに発生します。ApsaraMQ for MQTT は最新の接続のみを保持し、以前の接続を強制的に切断します。
トラブルシューティング方法
クエリ結果で、デバイストレース タブをクリックして、デバイスの接続履歴を表示します。
短時間のうちに、異なるアクセスポイントや IP アドレスから、タイムスタンプが重複する複数の接続レコードが表示された場合、クライアント ID の競合が原因であると判断できます。
各接続レコードのソース情報 (IP アドレスやアクセスエンドポイントなど) を確認し、どのクライアントが重複接続を開始したかを特定します。
解決策
各物理デバイスがグローバルに一意の [Client ID] を使用するようにしてください。複数のデバイス間で同じ [Client ID] を共有または再利用したり、同じ [Client ID] での同時接続を許可したりしないでください。相互切断の原因となります。
[Device Trace] タブ
[Device Trace] タブには、接続イベントと切断イベントのタイムスタンプを含む、デバイスの接続履歴が表示されます。このタブを使用して、断続的な接続の問題や予期しない切断を特定します。
フィールドの説明については、「デバイスの接続履歴のクエリ」をご参照ください。
[Message Trace] タブ
[Message Trace] タブには、パブリッシュされたメッセージと受信したメッセージを含む、デバイスのメッセージリストが表示されます。このタブを使用して、メッセージが配信されたかどうかを確認したり、欠落しているメッセージを特定したりします。
フィールドの説明については、「メッセージトレースのクエリ」をご参照ください。
よくある質問
MQTT のサブスクリプションが有効かどうかを確認するにはどうすればよいですか?
ApsaraMQ for MQTT コンソールには、過去のサブスクリプション有効期限イベントを直接クエリする機能はありません。デバイスの現在のサブスクリプションステータスを確認するには、次の手順を実行します:
ApsaraMQ for MQTT コンソールにログインし、インスタンスの デバイスステータスのクエリ ページに移動します。
デバイスの Group ID と Device ID を入力し、検索 をクリックします。
クエリ結果で、[Subscription] セクションを確認し、デバイスが現在、想定されるトピックをサブスクライブしているかどうかを確認します。
過去のサブスクリプションの失敗をトラブルシューティングするには、デバイス側のログをチェックして、デバイスの再接続後に SUBSCRIBE パケットが送信されたかどうかを確認します。注:cleanSession が false に設定されていても、新しいメッセージを受信するためには、デバイスは再接続後に能動的に再サブスクライブする必要があります。デバイストレース タブの接続履歴とデバイスログを組み合わせて、サブスクリプションが非アクティブになった時期を推測します。
デバイスの正確なオフライン時刻を表示したり、モニタリングに表示されるオフラインステータスが正確かどうかを判断したりするには、どうすればよいですか?
デバイスがオフラインになった正確な時刻を表示するには、次の手順を実行します:
デバイスステータスのクエリ ページに移動し、Group ID と Device ID を入力して 検索 をクリックします。
クエリ結果で、デバイストレース タブをクリックします。
デバイストレース タブには、すべての接続イベントと切断イベントが正確なタイムスタンプとともに一覧表示されます。これらのレコードを、正確な切断時刻の信頼できる情報源として使用します。
結果を解釈する際は、次の点にご注意ください:
デバイストレース タブにデータが表示されない場合、またはモニタリングでオフラインと表示されているのにデバイスがオンラインと表示されている場合、この不一致はモニタリングデータの収集遅延が原因である可能性があります。ページを更新して、最新の接続ステータスを取得してください。
最終更新時間 タブの [Last Updated At] フィールドには、最新のクライアントステータスの変更時刻が表示されますが、これは切断の正確な瞬間を反映していない場合があります。正確な切断時刻については、デバイストレース のレコードをご参照ください。
MQTT インスタンスの同時オンライン接続とその詳細を表示するにはどうすればよいですか?
同時オンライン接続数と接続詳細は、さまざまな粒度レベルで確認できます:
インスタンスレベルの概要 (同時オンライン接続数):ApsaraMQ for MQTT コンソールで、インスタンス詳細ページに移動します。概要パネルには現在のクライアント接続数が表示され、これはインスタンスの同時オンライン接続の合計数を示します。
デバイスごとの詳細 (個々の接続の詳細):個々のデバイスのオンラインステータスと接続詳細を表示するには、このトピックで説明されている[デバイスステータスのクエリ]機能を使用します。Group ID と Device ID を入力して、特定のデバイス接続情報をクエリします。
履歴トレンドと課金統計:接続数の履歴トレンドや課金関連の接続統計を表示するには、関連する課金ドキュメントまたはコンソールで利用可能なモニタリングチャートをご参照ください。