使用資源記錄進行疑難排解
本操作指南提供 Azure Web PubSub 資源記錄的概觀,以及使用記錄來針對問題進行疑難解答的秘訣。 您可以使用記錄來識別問題、連線追蹤、訊息追蹤、HTTP 要求追蹤和分析。
什麼是資源記錄?
資源記錄有三種類型:
- 連線記錄提供 Azure Web PubSub 中樞連線的詳細資訊。 它們可能包含使用者標識碼和聯機標識碼等基本資訊,或聯機和中斷連線等事件資訊。
- 傳訊記錄 會針對透過 Azure Web PubSub 服務傳送或接收的中樞訊息提供追蹤資訊,例如追蹤標識碼或訊息類型。
- HTTP 要求 記錄會提供 HTTP 要求的追蹤資訊給 Azure Web PubSub 服務,例如 HTTP 方法或狀態代碼。 一般而言,HTTP 要求會在服務抵達或離開時記錄。
使用即時追蹤工具來擷取資源記錄
Azure Web PubSub 服務中的即時追蹤工具可以即時收集資源記錄,這有助於針對開發環境中的問題進行疑難解答。 即時追蹤工具可以擷取連線記錄、訊息記錄和 HTTP 要求記錄。
使用即時追蹤工具時,您應該考慮下列因素:
- 實時追蹤工具擷取的即時資源記錄會以訊息 (輸出流量) 計費。
- Azure Web PubSub 服務的免費層實例每日限制為 20,000 則訊息(輸出流量)。 您可以使用即時追蹤意外達到每日限制。
- 實時追蹤工具目前不支援Microsoft Entra 授權。 您必須啟用存取金鑰,才能使用即時追蹤。 在 [設定] 下方,選取 [金鑰],然後啟用 [存取金鑰]。
啟動即時追蹤工具
當您啟用存取金鑰時,您可以使用存取權杖來驗證即時追蹤工具。 否則,您可以使用 Microsoft Entra ID 來驗證即時追蹤工具。 若要瞭解存取密鑰是否已啟用,請移至 Azure 入口網站 中 Azure SignalR Service 實例中的 [金鑰] 窗格。
啟用存取金鑰時開啟即時追蹤
移至 [Azure 入口網站] 和 [SignalR 服務] 窗格。
在服務功能表上的 [監視] 底下,選取 [即時追蹤設定]。
選取 [啟用即時追蹤]。
選取 [儲存] 按鈕。 變更需要一些時間才會生效。
更新完成時,請選取 [開啟即時追蹤工具]。
停用存取金鑰時開啟即時追蹤工具
將即時追蹤工具 API 權限指派給自己
移至 [Azure 入口網站] 和 [SignalR 服務] 窗格。
選取 [存取控制 (IAM)]。
選取 [+新增 ],然後選取 [ 角色指派]。
在 [ 作業函式角色] 索引卷標上 ,選取 SignalR 服務擁有者 角色,然後選取 [ 下一步]。
在 [ 成員] 窗格中,按兩下 [ +選取成員]。
搜尋並選取成員,然後按兩下 [ 選取]。
選取 [ 檢閱 + 指派 ],然後等候完成通知。
啟用即時追蹤工具
移至 [Azure 入口網站] 和 [SignalR 服務] 窗格。
從服務功能表中的 [監視] 底下,選取 [即時追蹤設定]。
選取 [啟用即時追蹤]。
選取 [儲存] 按鈕。 變更需要一些時間才會生效。
更新完成時,請選取 [開啟即時追蹤工具]。
使用您的 Microsoft 帳戶登入
即時追蹤工具會導致Microsoft登入窗口開啟。 如果沒有開啟視窗,請在瀏覽器設定中允許彈出視窗。
等候 [就緒] 出現在狀態列上。
擷取資源記錄
實時追蹤工具可協助您擷取資源記錄以進行疑難解答。
- 擷取 會開始從 Azure Web PubSub 擷取即時資源記錄。
- 清除 清除擷取的即時資源記錄。
- 記錄篩選條件 會以一個特定關鍵詞篩選擷取的即時資源記錄。 空格、逗號和分號等常見分隔符會被視為關鍵詞的一部分。
- 狀態 顯示即時追蹤工具是否已與特定實例連線或中斷連線。
即時追蹤工具所擷取的即時資源記錄包含疑難解答的詳細資訊。
名稱 | 描述 |
---|---|
Time | 記錄事件時間 |
記錄層級 | 記錄事件層級 (Trace 、、 Informational Debug Warning 或 )Error |
事件名稱 | 事件的作業名稱 |
訊息 | 事件的詳細訊息 |
例外狀況 | Azure Web PubSub 服務的運行時間例外狀況 |
中樞 | 使用者定義的中樞名稱 |
連線識別碼 | 連線的身分識別 |
使用者識別碼 | 使用者身分識別 |
IP | 用戶端 IP 位址 |
路由範本 | API 的路由範本 |
HTTP 方法 | HTTP 方法 (POST 、 GET PUT 或 DELETE ) |
URL | 統一資源定位器 |
追蹤識別碼 | 調用的唯一標識碼 |
狀態代碼 | HTTP 回應碼 |
期間 | 接收要求和處理要求之間的持續時間 |
標題 | 用戶端和伺服器透過 HTTP 要求或回應傳遞的其他資訊 |
使用 Azure 監視器擷取資源記錄
啟用資源記錄
目前,Azure Web PubSub 支援與 Azure 儲存體 整合。
前往 Azure 入口網站。
在 Azure Web PubSub 服務實例的 [ 診斷設定 ] 窗格中,選取 [ + 新增診斷設定]。
在 [診斷設定名稱] 中,輸入設定名稱。
在 [類別詳細資料] 中,選取您需要的任何記錄類別。
在 [目的地詳細數據] 中,選取 [ 封存至記憶體帳戶]。
選取 [儲存] 以儲存診斷設定。
注意
記憶體帳戶應該位於與 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 物件標記法」(JSON) 格式儲存。 每個項目都具有字串欄位,這些欄位會使用下列小節所述的格式。
封存記錄中的 JSON 字串包含下表所列的元素。
格式
名稱 | 描述 |
---|---|
time |
記錄事件時間 |
level |
記錄事件層級 |
resourceId |
Azure SignalR Service 實例的資源標識碼 |
location |
Azure SignalR Service 實例的位置 |
category |
記錄事件的類別 |
operationName |
事件的作業名稱 |
callerIpAddress |
伺服器或用戶端的 IP 位址 |
properties |
與此記錄事件相關的詳細屬性(請參閱下表) |
屬性數據表
名稱 | 描述 |
---|---|
collection |
記錄事件的集合 (Connection Authorization 或 Throttling ) |
connectionId |
連線的身分識別 |
userId |
使用者的身分識別 |
message |
記錄事件的詳細訊息 |
hub |
使用者定義的中樞名稱 |
routeTemplate |
API 的路由範本 |
httpMethod |
HTTP 方法 (POST 、 GET PUT 或 DELETE ) |
url |
統一資源定位器 |
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 監視器中的 Log Analytics。
若要使用 SignalR 服務的範例查詢,請遵循下列步驟:
封存記錄資料行包括下表所列的元素。
名稱 | 描述 |
---|---|
TimeGenerated |
記錄事件時間 |
Collection |
記錄事件的集合 (Connection 、 Authorization 和 Throttling ) |
OperationName |
事件的作業名稱 |
Location |
Azure SignalR Service 實例的位置 |
Level |
記錄事件層級 |
CallerIpAddress |
伺服器/用戶端的 IP 位址 |
Message |
記錄事件的詳細訊息 |
UserId |
使用者的身分識別 |
ConnectionId |
連線的身分識別 |
ConnectionType |
連線類型(Server 、伺服器端的連線,以及 Client 來自客戶端的連線) |
TransportType |
線上的傳輸類型 (Websockets 、 ServerSentEvents 和 LongPolling ) |
使用資源記錄進行疑難解答
如果您發現連線數目意外增加或減少,您可以使用資源記錄來針對問題進行疑難解答。 潛在的問題包括非預期的連線數量變更、連線達到連線限制,以及授權失敗。
非預期的中斷連線事件
如果連線中斷連線,資源會記錄與 ConnectionAborted
或 ConnectionEnded
中的 operationName
中斷連線事件。
和 ConnectionEnded
之間的差異ConnectionAborted
在於,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 定價。