分享方式:


如何使用資源記錄進行疑難排解

本操作說明指南提供 Azure Web PubSub 資源記錄的概觀,以及使用記錄對特定問題進行疑難排解的一些秘訣。 記錄可用於問題識別、連線追蹤、訊息追蹤、HTTP 要求追蹤和分析。

什麼是資源記錄?

資源記錄有三種類型:連線訊息HTTP 要求

  • 連線記錄提供 Azure Web PubSub 中樞連線的詳細資訊。 例如,基本資訊 (使用者識別碼、連線識別碼等等) 和事件資訊 (連線、中斷連線等等)。
  • 訊息記錄提供透過 Azure Web PubSub 服務所接收和傳送的 Azure Web PubSub 中樞訊息追蹤資訊。 例如,訊息的追蹤識別碼和訊息類型。
  • HTTP 要求記錄提供 Azure Web PubSub 服務的 HTTP 要求追蹤資訊。 例如,HTTP 方法和狀態碼。 一般而言,系統會在 HTTP 要求抵達或離開服務時加以記錄。

使用即時追蹤工具來擷取資源記錄

Azure Web PubSub 服務即時追蹤工具能夠即時收集資源記錄,這有助於對開發環境中的問題進行疑難排解。 即時追蹤工具可以擷取連線記錄、訊息記錄和 HTTP 要求記錄。

注意

以下是使用即時追蹤工具的注意事項:

  • 即時追蹤工具所擷取的即時資源記錄將會按訊息數 (輸出流量) 計費。
  • 即時追蹤工具目前不支援 Microsoft Entra 授權。 您必須啟用存取金鑰,才能使用即時追蹤。 在 [設定] 下方,選取 [金鑰],然後啟用 [存取金鑰]
  • Azure Web PubSub 服務免費層執行個體的每日限制為 20,000 則訊息 (輸出流量)。 即時追蹤可能會讓您不小心就達到每日上限。

啟動即時追蹤工具

注意

啟用存取金鑰時,您將使用存取權杖來驗證即時追蹤工具。 否則,您將使用 Microsoft Entra ID 來驗證即時追蹤工具。 您可以在 Azure 入口網站的 SignalR Service 金鑰頁面中檢查是否啟用存取金鑰。

啟用存取金鑰的步驟

  1. 移至 Azure 入口網站和 [SignalR Service] 頁面。

  2. 在左側功能表的 [監視] 底下,選取 [即時追蹤設定]

  3. 選取 [啟用即時追蹤]

  4. 選取 [儲存] 按鈕。 變更需要一些時間才會生效。

  5. 更新完成時,請選取 [開啟即時追蹤工具]

    啟動即時追蹤工具的螢幕擷取畫面。

停用存取金鑰的步驟

將即時追蹤工具 API 權限指派給自己

  1. 移至 Azure 入口網站和 [SignalR Service] 頁面。
  2. 選取 [存取控制 (IAM)]。
  3. 在新頁面中,按一下 [+新增],然後按一下 [角色指派]
  4. 在新頁面中,將焦點放在 [工作職能角色] 索引標籤上,選取 [SignalR Service 擁有者] 角色,然後按 [下一步]
  5. 在 [成員] 頁面中,按一下 [+選取成員]
  6. 在新面板中,搜尋並選取成員,然後按一下 [選取]
  7. 按一下 [檢閱 + 指派],然後等候完成通知。

造訪即時追蹤工具

  1. 移至 Azure 入口網站和 [SignalR Service] 頁面。

  2. 在左側功能表的 [監視] 底下,選取 [即時追蹤設定]

  3. 選取 [啟用即時追蹤]

  4. 選取 [儲存] 按鈕。 變更需要一些時間才會生效。

  5. 更新完成時,請選取 [開啟即時追蹤工具]

    啟動即時追蹤工具的螢幕擷取畫面。

使用您的 Microsoft 帳戶登入

  1. 即時追蹤工具將會彈出 Microsoft 登入視窗。 如果沒有視窗彈出,請檢查並允許瀏覽器中的快顯視窗。
  2. 等候狀態列中顯示 [就緒]

擷取資源記錄

即時追蹤工具提供的功能可協助您擷取資源記錄以進行疑難排解。

  • 擷取:開始從 Azure Web PubSub 擷取即時資源記錄。
  • 清除:清除所擷取的即時資源記錄。
  • 記錄篩選:即時追蹤工具可讓您使用一個特定的關鍵字來篩選擷取的即時資源記錄。 常見的分隔符號 (例如空格、逗號、分號等) 會被視為關鍵字的一部分。
  • 狀態:狀態會顯示即時追蹤工具是否與特定執行個體連線或中斷連線。

使用即時追蹤工具擷取資源記錄的螢幕擷取畫面。

即時追蹤工具所擷取的即時資源記錄包含疑難排解的詳細資訊。

名稱 描述
Time 記錄事件時間
記錄層級 記錄事件層級,可以是 [追蹤 | 偵錯 | 資訊 | 警告 | 錯誤]
事件名稱 事件的作業名稱
訊息 事件的詳細訊息
例外狀況 Azure Web PubSub 服務的執行階段例外狀況
中樞 使用者定義的中樞名稱
連線識別碼 連線的身分識別
使用者識別碼 使用者身分識別
IP 用戶端 IP 位址
路由範本 API 的路由範本
HTTP 方法 HTTP 方法 (POST/GET/PUT/DELETE)
URL 統一資源定位器
追蹤識別碼 叫用的唯一識別碼
狀態碼 HTTP 回應碼
期間 接收要求和處理要求之間的持續時間
標頭 用戶端和伺服器透過 HTTP 要求或回應傳遞的其他資訊

使用 Azure 監視器擷取資源記錄

如何啟用資源記錄

Azure Web PubSub 目前支援整合 Azure 儲存體

  1. 前往 Azure 入口網站。

  2. 在 Azure Web PubSub 服務執行個體的 [診斷設定] 頁面上,選取 [+ 新增診斷設定]檢視診斷設定和建立新診斷設定的螢幕擷取畫面

  3. 在 [診斷設定名稱] 中,輸入設定名稱。

  4. 在 [類別詳細資料] 中,選取您需要的任何記錄類別。

  5. 在 [目的地詳細資料] 中,核取 [封存至儲存體帳戶]

    設定診斷設定詳細資料的螢幕擷取畫面

  6. 選取 [儲存] 以儲存診斷設定。

    注意

    儲存體帳戶應位於與 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 物件標記法」(JSON) 格式儲存。 每個項目都具有字串欄位,這些欄位會使用下列小節所述的格式。

封存記錄 JSON 字串包括下表所列的元素:

格式

名稱 描述
time 記錄事件時間
level 記錄事件層級
resourceId Azure SignalR Service 的資源識別碼
location Azure SignalR Service 的位置
category 記錄事件的類別
operationName 事件的作業名稱
callerIpAddress 伺服器或用戶端的 IP 位址
內容 與這個記錄事件相關的詳細屬性。 如需詳細資料,請參閱以下的屬性資料表

屬性資料表

名稱 描述
collection 記錄事件的集合。 允許值為:ConnectionAuthorizationThrottling
connectionId 連線的身分識別
userId 使用者的身分識別
message 記錄事件的詳細訊息
集線器 使用者定義的中樞名稱
routeTemplate API 的路由範本
httpMethod HTTP 方法 (POST/GET/PUT/DELETE)
URL 統一資源定位器
traceId 叫用的唯一識別碼
statusCode HTTP 回應碼
duration 收到和處理要求之間的持續時間
標題 用戶端和伺服器透過 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. 輸入 WebPubSubConnectivityWebPubSubMessagingWebPubSubHttpRequest,然後選取要查詢記錄的時間範圍。 如需進階查詢,請參閱開始使用 Azure 監視器中的 Log Analytics

    Log Analytics 中的查詢記錄

若要使用 SignalR 服務的範例查詢,請遵循下列步驟。

  1. 在目標 Log Analytics 中,選取 Logs
  2. 選取 Queries,以開啟查詢總管。
  3. 選取 Resource type,以將範例查詢分組在資源類型中。
  4. 選取 Run 以執行指令碼。 Log Analytics 中的範例查詢

封存記錄資料行包括下表所列的元素。

名稱 描述
TimeGenerated 記錄事件時間
集合 記錄事件的集合。 允許值為:ConnectionAuthorizationThrottling
OperationName 事件的作業名稱
Location Azure SignalR Service 的位置
層級 記錄事件層級
CallerIpAddress 伺服器/用戶端的 IP 位址
訊息 記錄事件的詳細訊息
UserId 使用者的身分識別
ConnectionId 連線的身分識別
ConnectionType 連線的類型。 允許值為:Server | ClientServer:來自伺服器端的連線;Client:來自用戶端的連線
TransportType 連線的傳輸類型。 允許值為:Websockets | ServerSentEvents | LongPolling

使用資源記錄進行疑難排解

如果您發現連線數目有非預期的變更,無論是增加或減少,都可以利用資源記錄對問題進行疑難排解。 一般問題通常是關於連線發生意外的連線數量變更、連線達到連線限制,以及授權失敗。

連線數目發生未預期的變更

未預期的連線中斷

如果連線中斷,資源記錄會在 operationName 中使用 ConnectionAbortedConnectionEnded 記錄連線中斷事件。

ConnectionAbortedConnectionEnded 之間的差異在於,ConnectionEnded 是用戶端或伺服器端所觸發的預期中斷連線。 ConnectionAborted 通常是意外的連線中斷事件,系統會在 message 中提供連線中斷的原因。

中止原因會在下表中列出:

原因 描述
連線計數達到限制 連線計數達到您目前價格區間的限制。 請考慮調整服務單位規模
服務重新載入、重新連線 Azure Web PubSub 服務正在重新載入。 您必須實作自己的重新連線機制,或手動重新連線至 Azure Web PubSub 服務
內部伺服器暫時性錯誤 Azure Web PubSub 服務發生暫時性錯誤,應該會自動復原

非預期的連線數目增加

當用戶端連線數目意外增加時,您第一件要做的事就是篩選掉多餘的連線。 請將唯一測試使用者識別碼新增至測試用戶端連線。 然後檢查資源記錄;如果您看到多個用戶端連線具有相同的測試使用者識別碼或 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 並使用免費層,表示您已用盡訊息配額。 如果您想要傳送更多訊息,請考慮將 Azure Web PubSub 服務執行個體變更為標準層。 如需詳細資訊,請參閱 Azure Web PubSub 服務價格