次の方法で共有


リソース ログを使用してトラブルシューティングを行う方法

このハウツー ガイドでは、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 の [キー] ページで確認できます。

アクセス キーを有効にする手順

  1. Azure portal の SignalR Service ページに移動します。

  2. 左側のメニューの [監視] で、[ライブ トレースの設定] を選択します。

  3. [ライブ トレースを有効にする] を選択します。

  4. [保存] ボタンを選択します。 変更が有効になるまで、少し時間がかかります。

  5. 更新が完了したら、[ライブ トレース ツールを開く] を選択します。

    ライブ トレース ツールを起動するスクリーンショット。

アクセス キーを無効にする手順

ライブ トレース ツール API のアクセス許可を自分に割り当てる

  1. Azure portal の SignalR Service ページに移動します。
  2. [アクセス制御 (IAM)] を選択します。
  3. 新しいページで、[+ 追加] をクリックして、[ロールの割り当て] をクリックします。
  4. 新しいページで、[ジョブ関数ロール] タブを確認して、[SignalR Service 所有者] ロールを選択し、[次へ] をクリックします。
  5. [メンバー] ページで、[+ メンバーの選択] をクリックします。
  6. 新しいパネルでメンバーを検索して選択し、[選択] をクリックします。
  7. [確認と割り当て] をクリックして、完了通知を待ちます。

ライブ トレース ツールにアクセスする

  1. Azure portal の SignalR Service ページに移動します。

  2. 左側のメニューの [監視] で、[ライブ トレースの設定] を選択します。

  3. [ライブ トレースを有効にする] を選択します。

  4. [保存] ボタンを選択します。 変更が有効になるまで、少し時間がかかります。

  5. 更新が完了したら、[ライブ トレース ツールを開く] を選択します。

    ライブ トレース ツールを起動するスクリーンショット。

Microsoft アカウントでサインインする

  1. ライブ トレース ツールにより、Microsoft サインイン ウィンドウが表示されます。 ウィンドウがポップアップ表示されない場合は、ブラウザーでポップアップ ウィンドウを確認して許可します。
  2. [準備完了] がステータス バーに表示されるまで待ちます。

リソース ログをキャプチャする

ライブ トレース ツールには、トラブルシューティングのためにリソース ログをキャプチャするときに役立つ機能が用意されています。

  • [キャプチャ]: 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 との統合をサポートしています。

  1. Azure ポータル に移動します。

  2. Azure Web PubSub サービス インスタンスの [診断設定] ページで、[+ 診断設定を追加する] を選びます。 診断設定を表示して新しい設定を作成するスクリーンショット

  3. [診断設定の名前] に設定名を入力します。

  4. [カテゴリの詳細] で、必要なログ カテゴリを選択します。

  5. [宛先の詳細] で、[ストレージ アカウントへのアーカイブ] をオンにします。

    診断設定の詳細の構成のスクリーンショット

  6. [保存] を選択んで診断設定を保存します。

    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 IDDate Time によって連結されます。 ログ ファイルは hour 別に分割されています。 分の値は常に m=00 です。

すべてのログは、JavaScript Object Notation (JSON) 形式で格納されます。 各エントリには、以下のセクションで説明している形式を使用する文字列フィールドがあります。

アーカイブ ログの JSON 文字列には、次の表に示す要素が含まれます。

形式

名前 内容
time ログ イベント時間
level ログ イベント レベル
resourceId Azure SignalR サービスのリソース ID
location Azure SignalR サービスの場所
category ログ イベントのカテゴリ
operationName イベントの操作名
callerIpAddress サーバーまたはクライアントの IP アドレス
properties このログ イベントに関連する詳細なプロパティ。 詳細については、次のプロパティの表を参照してください。

プロパティの表

名前 説明
collection ログ イベントのコレクション。 使用できる値: ConnectionAuthorization、および 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 ワークスペースに送信するには:

  1. [診断設定] ページの [宛先の詳細] で、[Log Analytics ワークスペースへの送信] を選びます。
  2. 使用するサブスクリプションを選択します。
  3. ログの宛先として使用する [Log Analytics ワークスペース] を選びます。

リソース ログを表示するには、次の手順のようにします。

  1. 対象の Log Analytics の Logs を選びます。

    Log Analytics メニュー項目

  2. WebPubSubConnectivity」、「WebPubSubMessaging」、または「WebPubSubHttpRequest」と入力し、ログを照会する時間範囲を選びます。 詳細なクエリについては、Azure Monitor での Log Analytics の使用開始に関する記事をご覧ください。

    Log Analytics のクエリ ログ

SignalR サービスのサンプル クエリを使うには、次の手順のようにします。

  1. 対象の Log Analytics の Logs を選びます。
  2. Queries を選んで、クエリ エクスプローラーを開きます。
  3. Resource type を選んで、サンプル クエリをリソースの種類でグループ化します。
  4. Run を選択してスクリプトを実行します。 Log Analytics のサンプル クエリ

アーカイブ ログの列には、次の表に示す要素が含まれます。

名前 説明
TimeGenerated ログ イベント時間
コレクション ログ イベントのコレクション。 使用できる値: ConnectionAuthorization、および Throttling
OperationName イベントの操作名
場所 Azure SignalR サービスの場所
Level ログ イベント レベル
CallerIpAddress サーバー/クライアントの IP アドレス
メッセージ ログ イベントの詳細なメッセージ
UserId ユーザーの ID
ConnectionId 接続の ID
ConnectionType 接続の種類。 使用できる値: Server | ClientServer: サーバー側からの接続、Client: クライアント側からの接続
TransportType 接続のトランスポートの種類。 使用できる値: Websockets | ServerSentEvents | LongPolling

リソース ログを使用したトラブルシューティング

接続の数が予想以上に変化 (増加または減少) している場合は、リソース ログを利用して問題のトラブルシューティングを行うことができます。 多くの場合、一般的な問題は予期しない接続数の変化、接続数の接続上限への到達、承認エラーに関するものです。

接続数の予期しない変化

予期しない接続の削除

接続が切断されると、リソース ログの operationName には ConnectionAborted または ConnectionEnded の切断イベントが記録されます。

ConnectionAbortedConnectionEnded の違いは、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 サービスの価格に関するページを参照してください。