リソース ログを使用してトラブルシューティングを行う
この攻略ガイドでは、Azure Web PubSub リソース ログの概要を説明し、このログを問題のトラブルシューティングに使用するためのヒントを提供します。 ログは、問題の特定、接続の追跡、メッセージのトレース、HTTP 要求のトレース、分析に使用できます。
リソース ログとは
リソース ログには、次の 3 つの種類があります。
- 接続ログでは、Azure Web PubSub ハブ接続に関する詳細情報が提供されます。 これには、ユーザー ID や接続 ID などの基本情報や、接続や切断などのイベント情報が含まれる場合があります。
- "メッセージング" ログは、トレース ID やメッセージの種類など、Azure Web PubSub サービスを介して送受信されるハブ メッセージのトレース情報を提供します。
- "HTTP 要求" ログは、HTTP メソッドや状態コードなど、Azure Web PubSub サービスに対する HTTP 要求のトレース情報を提供します。 HTTP 要求は通常、サービスへの到着時またはサービスからの発信時に記録されます。
ライブ トレース ツールを使用してリソース ログをキャプチャする
Azure Web PubSub サービスのライブ トレース ツールを使用すると、リソース ログをリアルタイムで収集できるため、開発環境での問題のトラブルシューティングに役立ちます。 ライブ トレース ツールを使うと、接続ログ、メッセージング ログ、HTTP 要求ログをキャプチャできます。
ライブ トレース ツールを使用する場合は、次の要因を考慮する必要があります。
- ライブ トレース ツールによってキャプチャされるリアルタイム リソース ログは、メッセージ (送信トラフィック) として課金されます。
- Azure Web PubSub サービスの Free レベル インスタンスには、1 日あたり 20,000 メッセージ (送信トラフィック) の制限があります。 ライブ トレースを使用すると、予期せず 1 日の上限に達する可能性があります。
- 現在、ライブ トレース ツールでは、Microsoft Entra 承認はサポートされていません。 ライブ トレースを使うには、アクセス キーを有効にする必要があります。 [設定] で [キー] を選んで、[アクセス キー] を有効にします。
ライブ トレース ツールを起動する
アクセス キーを有効にする場合は、アクセス トークンを使用してライブ トレース ツールを認証します。 それ以外の場合は、Microsoft Entra ID を使用してライブ トレース ツールを認証します。 アクセス キーが有効になっているかどうかを確認するには、Azure portal の Azure SignalR Service インスタンスの [キー] ペインにアクセスします。
アクセス キーが有効になっている場合にライブ トレースを開く
Azure portal の SignalR Service ペインに移動します。
サービス メニューの [監視] で、[ライブ トレースの設定] を選択します。
[ライブ トレースを有効にする] を選択します。
[保存] ボタンを選択します。 変更が有効になるまで、少し時間がかかります。
更新が完了したら、[ライブ トレース ツールを開く] を選択します。
アクセス キーが無効になっている場合にライブ トレース ツールを開く
ライブ トレース ツール API のアクセス許可を自分に割り当てる
Azure portal の SignalR Service ペインに移動します。
[アクセス制御 (IAM)] を選択します。
[+ 追加] を選択し、[ロールの割り当て] を選択します。
[職務権限ロール] タブで、[SignalR Service 所有者] ロールを選択し、[次へ] を選択します。
[メンバー] ペインで、[+ メンバーの選択] をクリックします。
メンバーを検索して選択し、[選択] をクリックします。
[確認と割り当て] を選択し、完了通知を待ちます。
ライブ トレース ツールを有効にする
Azure portal の SignalR Service ペインに移動します。
サービス メニューの [監視] で、[ライブ トレースの設定] を選択します。
[ライブ トレースを有効にする] を選択します。
[保存] ボタンを選択します。 変更が有効になるまで、少し時間がかかります。
更新が完了したら、[ライブ トレース ツールを開く] を選択します。
Microsoft アカウントでサインインする
ライブ トレース ツールにより、Microsoft サインイン ウィンドウが開きます。 ウィンドウが開かない場合は、ブラウザーの設定でポップアップ ウィンドウを許可します。
[準備完了] がステータス バーに表示されるまで待ちます。
リソース ログをキャプチャする
ライブ トレース ツールは、トラブルシューティングのためにリソース ログをキャプチャするのに役立ちます。
- [キャプチャ] Azure Web PubSub からのリアルタイム リソース ログのキャプチャを開始します。
- [クリア] キャプチャしたリアルタイム リソース ログをクリアします。
- [ログ フィルター] キャプチャしたリアルタイム リソース ログを 1 つの特定のキーワードでフィルター処理します。 スペース、コンマ、セミコロンなどの一般的な区切り記号は、キーワードの一部として扱われます。
- [状態] ライブ トレース ツールが特定のインスタンスに接続されているか、または切断されているかを示します。
ライブ トレース ツールによってキャプチャされたリアルタイム リソース ログには、トラブルシューティングのための詳細な情報が含まれています。
名前 | 内容 |
---|---|
時間 | ログ イベント時間 |
ログ レベル | ログ イベント レベル (Trace 、Debug 、Informational 、Warning 、または Error ) |
イベント名 | イベントの操作名 |
メッセージ | イベントに関する詳細なメッセージ |
例外 | Azure Web PubSub サービスのランタイム例外 |
ハブ | ユーザー定義のハブ名 |
接続 ID | 接続の ID |
[ユーザー ID] | ユーザー ID |
IP | クライアント IP アドレス |
ルート テンプレート | API のルート テンプレート |
HTTP メソッド | HTTP メソッド (POST 、GET 、PUT 、または DELETE ) |
URL | Uniform Resource Locator |
トレース 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 Service インスタンスのリソース ID |
location |
Azure SignalR Service インスタンスの場所 |
category |
ログ イベントのカテゴリ |
operationName |
イベントの操作名 |
callerIpAddress |
サーバーまたはクライアントの IP アドレス |
properties |
このログ イベントに関連する詳細なプロパティ (次の表を参照) |
プロパティの表
名前 | 説明 |
---|---|
collection |
ログ イベントのコレクション (Connection 、Authorization 、または Throttling ) |
connectionId |
接続の ID |
userId |
ユーザーの ID |
message |
ログ イベントの詳細なメッセージ |
hub |
ユーザー定義のハブ名 |
routeTemplate |
API のルート テンプレート |
httpMethod |
HTTP メソッド (POST 、GET 、PUT 、または DELETE ) |
url |
Uniform Resource Locator |
traceId |
呼び出しの一意識別子 |
statusCode |
HTTP 応答コード |
duration |
要求が受信されてから処理されるまでの時間 |
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 ワークスペースで [ログ] を選択します。
ログのクエリを実行するには、「
WebPubSubConnectivity
」、「WebPubSubMessaging
」、または「WebPubSubHttpRequest
」と入力し、時間の範囲を選択します。 詳細なクエリについては、Azure Monitor での Log Analytics の使用開始に関する記事をご覧ください。
SignalR Service のサンプル クエリを使用するには、次の手順に従います。
ターゲットの Log Analytics ワークスペースで [ログ] を選択します。
[クエリ] を選択してクエリ エクスプローラーを開きます。
[リソースの種類] を選択して、サンプル クエリをリソースの種類でグループ化します。
[実行] を選び、スクリプトを実行します。
アーカイブ ログの列には、次の表に示す要素が含まれます。
名前 | 説明 |
---|---|
TimeGenerated |
ログ イベント時間 |
Collection |
ログ イベントのコレクション (Connection 、Authorization 、Throttling ) |
OperationName |
イベントの操作名 |
Location |
Azure SignalR Service インスタンスの場所 |
Level |
ログ イベント レベル |
CallerIpAddress |
サーバー/クライアントの IP アドレス |
Message |
ログ イベントの詳細なメッセージ |
UserId |
ユーザーの ID |
ConnectionId |
接続の ID |
ConnectionType |
接続の種類 (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 サービスの価格」を参照してください。