Simple Message Queue (SMQ) のログ管理機能は、メッセージリクエストログを Simple Log Service (SLS) にプッシュします。その後、 SLS を使用してリクエストログのクエリや分析を行い、本番環境の問題をトラブルシューティングできます。
ユースケース
メッセージの送受信時によくある問題:
-
メッセージはキューに正常に送信されましたが、コンシューマークライアントが受信しません。メッセージはどこに行ったのでしょうか。
-
特定のメッセージを誰が消費しましたか。何回消費されましたか。
-
コンシューマークライアントがクラッシュしました。消費に失敗したメッセージはいつ再度消費できますか。
-
メッセージがトピックに発行されましたが、エンドポイントが長時間メッセージを受信していません。何が遅延の原因ですか。
SMQ のログ管理は、これらの問題に対処します。
-
ログを SLS にプッシュし、コンソールで完全なメッセージトレースを表示できます。
-
公式サイトで提供されているクエリツールを使用し、パラメーターを指定してメッセージ処理ログを表示できます。
課金
-
SMQ のログ管理機能では、追加料金は発生しません。
-
SMQ がログを SLS にプッシュすると、SLS はストレージ容量、トラフィック、およびリクエスト数に基づいて課金します。詳細については、課金概要をご参照ください。
キューログのフォーマット
キューメッセージのオペレーション (送信、消費、削除) は、ログエントリを生成します。含まれるフィールドは、オペレーションによって異なります。
-
ログフィールド
キューログエントリには、次のフィールドが含まれる場合があります:
フィールド
説明
Time
オペレーションのタイムスタンプ。
MessageId
一意のメッセージ ID。
QueueName
ターゲットキュー名。
AccountId
キュー所有者のアカウント ID。
RemoteAddress
クライアントの IP アドレス。
NextVisibleTime
メッセージが再び可視状態になる時刻。
ReceiptHandleInRequest
クライアントが提供した
ReceiptHandle。ReceiptHandleInResponse
クライアントに返される
ReceiptHandle。ProcessTime
オペレーションの処理時間。
RequestId
リクエスト ID。
Action
アクション (
DeleteMessageやSendMessageなど)。 -
オペレーション別のフィールド
次の表に、各オペレーションに含まれるフィールドを示します:
オペレーション
Time
QueueName
AccountId
MessageId
RemoteAddress
NextVisibleTime
ReceiptHandleInResponse
ReceiptHandleInRequest
SendMessage/BatchSendMessage
はい
はい
はい
はい
はい
はい
いいえ
いいえ
PeekMessage/BatchPeekMessage
はい
はい
はい
はい
はい
いいえ
いいえ
いいえ
ReceiveMessage/BatchReceiveMessage
はい
はい
はい
はい
はい
はい
はい
いいえ
ChangeMessageVisibility
はい
はい
はい
はい
はい
はい
はい
はい
DeleteMessage/BatchDeleteMessage
はい
はい
はい
はい
はい
はい
いいえ
はい
トピックログフォーマット
トピックのメッセージオペレーション (パブリッシュおよびプッシュ) は、ログエントリを生成します。含まれるフィールドは、オペレーションによって異なります。
-
ログフィールド
トピックのログエントリには、次のフィールドが含まれる場合があります。
フィールド
説明
Time
オペレーションのタイムスタンプ。
MessageId
一意のメッセージ ID。
TopicName
対象のトピック名。
SubscriptionName
サブスクリプション名。
AccountId
トピック所有者のアカウント ID。
RemoteAddress
クライアント IP アドレス。
NotifyStatus
SMQ がメッセージをプッシュする際に、エンドポイントから返されるステータスコードまたはエラー。
ProcessTime
オペレーションの処理時間。
MessageTag
メッセージタグ。
RequestId
リクエスト ID。
Action
PublishMessageやNotifyなどのアクション。 -
オペレーションごとのフィールド
次の表に、各オペレーションに含まれるフィールドを示します。
オペレーション
Time
MessageId
TopicName
SubscriptionName
AccountId
RemoteAddress
NotifyStatus
MessageTag
PublishMessage
はい
はい
はい
いいえ
はい
はい
いいえ
いいえ
Notify
はい
はい
はい
はい
はい
いいえ
はい
はい
-
NotifyStatus
プッシュログの NotifyStatus フィールドは、SMQ がメッセージの配信に失敗した理由を示します。次の値に基づいてトラブルシューティングしてください。
エラーコード
説明
推奨アクション
2xx
メッセージは正常にプッシュされました。
不要です。
その他の HTTP ステータスコード
エンドポイントが 2xx 以外のステータスコードを返しました。
エンドポイント側の処理ロジックを確認してください。
InvalidHost
サブスクリプションのエンドポイントが無効です。
curlまたはtelnetを使用して、サブスクリプションのエンドポイントが有効で、アクセス可能であることを確認してください。ConnectTimeout
サブスクリプションのエンドポイントへの接続がタイムアウトしました。
curlまたはtelnetを使用して、サブスクリプションのエンドポイントにアクセスできることを確認してください。ConnectFailure
サブスクリプションのエンドポイントへの接続に失敗しました。
curlまたはtelnetを使用して、サブスクリプションのエンドポイントにアクセスできることを確認してください。UnknownError
不明なエラーが発生しました。
SMQ テクニカルサポートにお問い合わせください。
ログ操作
ログ管理を使用する前に、次のことを確認してください:
-
Simple Log Service (SLS) でプロジェクトと Logstore を作成しておく必要があります。詳細については、プロジェクトの管理およびLogstore の作成をご参照ください。
SMQ サービスの操作ログは、同じリージョン内の SLS プロジェクトにのみプッシュできます。
-
AliyunMNSLoggingRoleRAM ロールを使用して、SMQ がログをエクスポートできるように承認しておく必要があります。クラウドリソースのアクセス承認 をクリックし、画面の指示に従って承認を完了します。
警告承認を取り消したり、RAM ロールを削除したりしないでください。そうしないと、SMQ ログが SLS にプッシュされなくなります。
> [Edit] を選択します。