リソース ログを使用してトラブルシューティングを行う方法
このハウツー ガイドでは、Azure Web PubSub リソース ログの概要と、ログを使用して特定の問題をトラブルシューティングするためのヒントを示します。 ログは、問題の識別、接続の追跡、メッセージのトレース、HTTP 要求のトレースと分析に使用できます。
リソース ログとは
リソース ログには、"接続"、"メッセージング"、"HTTP 要求" の 3 種類があります。
- 接続ログでは、Azure Web PubSub ハブ接続に関する詳細情報が提供されます。 たとえば、基本情報 (ユーザー ID、接続 ID など) やイベント情報 (接続、切断など) です。
- メッセージング ログでは、Azure Web PubSub サービス経由で送受信される Azure Web PubSub ハブ メッセージのトレース情報が提供されます。 たとえば、メッセージのトレース ID やメッセージの種類などです。
- HTTP 要求ログは、Azure Web PubSub サービスに対する HTTP 要求のトレース情報を提供します。 たとえば、HTTP メソッドと状態コードです。 HTTP 要求は通常、サービスへの到着時またはサービスからの発信時に記録されます。
ライブ トレース ツールを使用してリソース ログをキャプチャする
Azure Web PubSub サービス ライブ トレース ツールは、リアルタイムでリソース ログを収集する機能を備えており、開発環境での問題のトラブルシューティングに役立ちます。 ライブ トレース ツールを使うと、接続ログ、メッセージング ログ、HTTP 要求ログをキャプチャできます。
Note
ライブ トレース ツールを使うときは、次のことを考慮する必要があります。
- ライブ トレース ツールによってキャプチャされたリアルタイム リソース ログは、メッセージ (送信トラフィック) として課金されます。
- ライブ トレース ツールは現在、Microsoft Entra 認可をサポートしていません。 ライブ トレースを使うには、アクセス キーを有効にする必要があります。 [設定] で [キー] を選んで、[アクセス キー] を有効にします。
- Azure Web PubSub サービスの Free レベル インスタンスには、1 日当たり 20,000 メッセージ (アウトバウンド トラフィック) の制限があります。 ライブ トレースを使うと、予期せず 1 日の上限に達する可能性があります。
ライブ トレース ツールを起動する
Note
アクセス キーを有効にする場合は、アクセス トークンを使用してライブ トレース ツールを認証します。 または、Microsoft Entra ID を使用してライブ トレース ツールを認証します。 アクセス キーを有効にしているかどうかは、Azure portal の SignalR Service の [キー] ページで確認できます。
アクセス キーを有効にする手順
Azure portal の SignalR Service ページに移動します。
左側のメニューの [監視] で、[ライブ トレースの設定] を選択します。
[ライブ トレースを有効にする] を選択します。
[保存] ボタンを選択します。 変更が有効になるまで、少し時間がかかります。
更新が完了したら、[ライブ トレース ツールを開く] を選択します。
アクセス キーを無効にする手順
ライブ トレース ツール API のアクセス許可を自分に割り当てる
- Azure portal の SignalR Service ページに移動します。
- [アクセス制御 (IAM)] を選択します。
- 新しいページで、[+ 追加] をクリックして、[ロールの割り当て] をクリックします。
- 新しいページで、[ジョブ関数ロール] タブを確認して、[SignalR Service 所有者] ロールを選択し、[次へ] をクリックします。
- [メンバー] ページで、[+ メンバーの選択] をクリックします。
- 新しいパネルでメンバーを検索して選択し、[選択] をクリックします。
- [確認と割り当て] をクリックして、完了通知を待ちます。
ライブ トレース ツールにアクセスする
Azure portal の SignalR Service ページに移動します。
左側のメニューの [監視] で、[ライブ トレースの設定] を選択します。
[ライブ トレースを有効にする] を選択します。
[保存] ボタンを選択します。 変更が有効になるまで、少し時間がかかります。
更新が完了したら、[ライブ トレース ツールを開く] を選択します。
Microsoft アカウントでサインインする
- ライブ トレース ツールにより、Microsoft サインイン ウィンドウが表示されます。 ウィンドウがポップアップ表示されない場合は、ブラウザーでポップアップ ウィンドウを確認して許可します。
- [準備完了] がステータス バーに表示されるまで待ちます。
リソース ログをキャプチャする
ライブ トレース ツールには、トラブルシューティングのためにリソース ログをキャプチャするときに役立つ機能が用意されています。
- [キャプチャ]: Azure Web PubSub からのリアルタイム リソース ログのキャプチャを始めます。
- [クリア]: キャプチャしたリアルタイム リソース ログをクリアします。
- ログ フィルター: ライブ トレース ツールでは、キャプチャしたリアルタイム リソース ログを特定の 1 つのキー ワードでフィルター処理できます。 一般的な区切り記号 (スペース、コンマ、セミコロンなど) は、キーワードの一部として扱われます。
- [Status]\(状態\): ライブ トレース ツールが特定のインスタンスと接続されているか、切断されているかの状態を示しています。
ライブ トレース ツールによってキャプチャされたリアルタイム リソース ログには、トラブルシューティングのための詳細情報が含まれています。
名前 | 内容 |
---|---|
時刻 | ログ イベント時間 |
ログ レベル | ログ イベントのレベル (トレース、デバッグ、情報、警告、エラー) |
Event Name | イベントの操作名 |
メッセージ | イベントに関する詳細なメッセージ |
例外 | Azure Web PubSub サービスの実行時の例外 |
ハブ | ユーザー定義のハブ名 |
接続 ID | 接続の ID |
ユーザー ID | ユーザー ID |
IP | クライアント IP アドレス |
ルート テンプレート | API のルート テンプレート |
HTTP メソッド | Http メソッド (POST/GET/PUT/DELETE) |
URL | ユニフォーム リソース ロケーター |
トレース ID | 呼び出しに対する一意の識別子 |
状態コード | HTTP 応答コード |
長さ | 要求を受信してから要求を処理するまでの経過時間 |
ヘッダー | HTTP 要求または応答を使用してクライアントとサーバーによって渡される追加情報 |
Azure Monitor を使用したリソース ログのキャプチャ
リソース ログを有効にする方法
現在、Azure Web PubSub は Azure Storage との統合をサポートしています。
Azure ポータル に移動します。
Azure Web PubSub サービス インスタンスの [診断設定] ページで、[+ 診断設定を追加する] を選びます。
[診断設定の名前] に設定名を入力します。
[カテゴリの詳細] で、必要なログ カテゴリを選択します。
[宛先の詳細] で、[ストレージ アカウントへのアーカイブ] をオンにします。
[保存] を選択んで診断設定を保存します。
Note
ストレージ アカウントは、Azure Web PubSub サービスと同じリージョンにある必要があります。
Azure ストレージ アカウントにアーカイブする
ログは、[診断設定] ペインで構成されているストレージ アカウントに格納されます。 リソース ログを格納するために、insights-logs-<CATEGORY_NAME>
という名前のコンテナーが自動的に作成されます。 コンテナー内では、ログはファイル resourceId=/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/XXXX/PROVIDERS/MICROSOFT.SIGNALRSERVICE/SIGNALR/XXX/y=YYYY/m=MM/d=DD/h=HH/m=00/PT1H.json
に格納されます。 パスは resource ID
と Date Time
によって連結されます。 ログ ファイルは hour
別に分割されています。 分の値は常に m=00
です。
すべてのログは、JavaScript Object Notation (JSON) 形式で格納されます。 各エントリには、以下のセクションで説明している形式を使用する文字列フィールドがあります。
アーカイブ ログの JSON 文字列には、次の表に示す要素が含まれます。
形式
名前 | 内容 |
---|---|
time | ログ イベント時間 |
level | ログ イベント レベル |
resourceId | Azure SignalR サービスのリソース ID |
location | Azure SignalR サービスの場所 |
category | ログ イベントのカテゴリ |
operationName | イベントの操作名 |
callerIpAddress | サーバーまたはクライアントの IP アドレス |
properties | このログ イベントに関連する詳細なプロパティ。 詳細については、次のプロパティの表を参照してください。 |
プロパティの表
名前 | 説明 |
---|---|
collection | ログ イベントのコレクション。 使用できる値: Connection 、Authorization 、および Throttling |
connectionId | 接続の ID |
userId | ユーザーの ID |
message | ログ イベントの詳細なメッセージ |
ハブ | ユーザー定義のハブ名 |
routeTemplate | API のルート テンプレート |
httpMethod | Http メソッド (POST/GET/PUT/DELETE) |
url | ユニフォーム リソース ロケーター |
traceId | 呼び出しに対する一意の識別子 |
statusCode | HTTP 応答コード |
期間 | 要求の受信と処理の間の期間 |
headers | HTTP 要求または応答を使用してクライアントとサーバーによって渡される追加情報 |
次のコードは、アーカイブ ログの JSON 文字列の例です。
{
"properties": {
"message": "Connection started",
"collection": "Connection",
"connectionId": "LW61bMG2VQLIMYIVBMmyXgb3c418200",
"userId": null
},
"operationName": "ConnectionStarted",
"category": "ConnectivityLogs",
"level": "Informational",
"callerIpAddress": "167.220.255.79",
"resourceId": "/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/MYGROUP/PROVIDERS/MICROSOFT.SIGNALRSERVICE/WEBPUBSUB/MYWEBPUBSUB",
"time": "2021-09-17T05:25:05Z",
"location": "westus"
}
Azure Log Analytics にアーカイブする
ログを Log Analytics ワークスペースに送信するには:
- [診断設定] ページの [宛先の詳細] で、[Log Analytics ワークスペースへの送信] を選びます。
- 使用するサブスクリプションを選択します。
- ログの宛先として使用する [Log Analytics ワークスペース] を選びます。
リソース ログを表示するには、次の手順のようにします。
対象の Log Analytics の
Logs
を選びます。「
WebPubSubConnectivity
」、「WebPubSubMessaging
」、または「WebPubSubHttpRequest
」と入力し、ログを照会する時間範囲を選びます。 詳細なクエリについては、Azure Monitor での Log Analytics の使用開始に関する記事をご覧ください。
SignalR サービスのサンプル クエリを使うには、次の手順のようにします。
- 対象の Log Analytics の
Logs
を選びます。 Queries
を選んで、クエリ エクスプローラーを開きます。Resource type
を選んで、サンプル クエリをリソースの種類でグループ化します。Run
を選択してスクリプトを実行します。
アーカイブ ログの列には、次の表に示す要素が含まれます。
名前 | 説明 |
---|---|
TimeGenerated | ログ イベント時間 |
コレクション | ログ イベントのコレクション。 使用できる値: Connection 、Authorization 、および Throttling |
OperationName | イベントの操作名 |
場所 | Azure SignalR サービスの場所 |
Level | ログ イベント レベル |
CallerIpAddress | サーバー/クライアントの IP アドレス |
メッセージ | ログ イベントの詳細なメッセージ |
UserId | ユーザーの ID |
ConnectionId | 接続の ID |
ConnectionType | 接続の種類。 使用できる値: Server | Client 。 Server : サーバー側からの接続、Client : クライアント側からの接続 |
TransportType | 接続のトランスポートの種類。 使用できる値: Websockets | ServerSentEvents | LongPolling |
リソース ログを使用したトラブルシューティング
接続の数が予想以上に変化 (増加または減少) している場合は、リソース ログを利用して問題のトラブルシューティングを行うことができます。 多くの場合、一般的な問題は予期しない接続数の変化、接続数の接続上限への到達、承認エラーに関するものです。
接続数の予期しない変化
予期しない接続の削除
接続が切断されると、リソース ログの operationName
には ConnectionAborted
または ConnectionEnded
の切断イベントが記録されます。
ConnectionAborted
と ConnectionEnded
の違いは、ConnectionEnded
はクライアントまたはサーバー側によってトリガーされた予期される切断であるという点です。 これに対し、ConnectionAborted
は、多くの場合、予期しない接続終了イベントであり、切断の理由は message
で提供されます。
次の表に、中断の理由を示します。
理由 | 説明 |
---|---|
接続数が上限に達している | 接続数が現在の価格レベルの上限に達しています。 サービス ユニットのスケールアップを検討してください |
サービスの再読み込み、再接続 | Azure Web PubSub サービスを再度読み込みしています。 Azure Web PubSub サービスへの独自の再接続メカニズムを実装するか、手動で再接続する必要があります |
内部サーバーの一時的なエラー | Azure Web PubSub サービスで一時的なエラーが発生しています。自動的に復旧します |
予期しない接続の増加
クライアント接続数の予期しない増加が発生した場合は、まず無関係な接続を除外する必要があります。 テスト クライアント接続に、一意のテスト ユーザー ID を追加します。 それから、リソース ログを調べます。複数のクライアント接続で同じテスト ユーザー ID または IP が使われている場合は、クライアントで想定より多くの接続が作成されている可能性があります。 クライアント コードを調べて、余分な接続のソースを見つけます。
承認エラー
クライアント要求に対して未承認 401 が返された場合は、リソース ログを確認します。 Failed to validate audience. Expected Audiences: <valid audience>. Actual Audiences: <actual audience>
が見つかった場合、アクセス トークンのすべての対象ユーザーが無効であることを意味します。 ログ上に提示されている有効なユーザーを使用してみてください。
調整
Azure Web PubSub サービスへのクライアント接続を確立できないことがわかった場合は、リソース ログを調べます。 リソース ログで Connection count reaches limit
が見つかった場合は、Azure Web PubSub サービスに対して確立した接続が多すぎて、接続数の上限に到達しています。 Azure Web PubSub サービス インスタンスのスケール アップを検討してください。 リソース ログで Message count reaches limit
が見つかり、Free レベルを使っている場合は、メッセージのクォータを使い切ったことを意味します。 さらに多くのメッセージを送信する必要がある場合は、Azure Web PubSub サービス インスタンスを Standard レベルに変更することを検討してください。 詳細については、Azure Web PubSub サービスの価格に関するページを参照してください。