Azure CDN 的即時監視、計量和存取記錄
透過來自 Microsoft 的 Azure CDN,您可以透過下列方式監視資源,以協助您針對問題進行疑難解答、追蹤和偵錯。
- 原始記錄提供CDN所接收之每個要求的豐富資訊。 原始記錄與活動記錄不同。 活動記錄可讓您查看在 Azure 資源上完成的作業。
- 計量,在CDN上顯示四個主要計量,包括位元組命中率、要求計數、回應大小和總延遲。 它也會提供不同的維度來細分計量。
- 警示,可讓客戶設定重要計量的警示
- 更多計量,可讓客戶使用 Azure Log Analytics 來啟用更多價值計量。 我們也提供 Azure Log Analytics 下其他一些計量的查詢範例。
重要
HTTP 原始記錄功能適用於來自 Microsoft 的 Azure CDN。
如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
登入 Azure
登入 Azure 入口網站。
組態 - Azure 入口網站
若要從 Microsoft 設定檔設定 Azure CDN 的原始記錄:
從 [Azure 入口網站] 功能表中,選取 [所有資源<>>] your-CDN-profile。>
在 [監視] 底下,選取 [診斷設定]。
選取 +新增診斷設定。
重要
原始記錄只能在配置檔層級中使用,而匯總的 HTTP 狀態代碼記錄可在端點層級中使用。
在 [診斷設定] 下,於 [診斷設定名稱] 下 輸入診斷設定的名稱。
選取 AzureCdnAccessLog,並設定天數的保留期。
選取 [目的地詳細資料]。 目的地選項包括:
- 傳送至 Log Analytics
- 選取 [訂用帳戶] 和 [Log Analytics 工作區]。
- 封存至儲存體帳戶
- 選取 [訂用帳戶] 和 [儲存體帳戶]。
- 串流至事件中樞
- 選取 [訂用帳戶]、[事件中樞命名空間]、\[事件中樞名稱 \(選擇性\)\] 及 [事件中樞原則名稱]。
- 傳送至 Log Analytics
選取 [儲存]。
組態 - Azure PowerShell
使用 Set-AzDiagnosticSetting 來設定原始記錄的診斷設定。
保留數據是由 命令中的 -RetentionInDays 選項所定義。
注意
建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az。
在記憶體帳戶中啟用診斷記錄
登入 Azure PowerShell:
Connect-AzAccount
若要在記憶體帳戶中啟用診斷記錄,請輸入這些命令。 以您的值取代變數:
## Variables for the commands ## $rsg = <your-resource-group-name> $cdnprofile = <your-cdn-profile-name> $cdnendpoint = <your-cdn-endpoint-name> $storageacct = <your-storage-account-name> $diagname = <your-diagnostic-setting-name> $days = '30' $cdn = Get-AzCdnProfile -ResourceGroupName $rsg -ProfileName $cdnprofile $storage = Get-AzStorageAccount -ResourceGroupName $rsg -Name $storageacct Set-AzDiagnosticSetting -Name $diagname -ResourceId $cdn.id -StorageAccountId $storage.id -Enabled $true -Category AzureCdnAccessLog -RetentionEnabled 1 -RetentionInDays $days
啟用Log Analytics工作區的診斷記錄
登入 Azure PowerShell:
Connect-AzAccount
若要啟用 Log Analytics 工作區的診斷記錄,請輸入這些命令。 以您的值取代變數:
## Variables for the commands ## $rsg = <your-resource-group-name> $cdnprofile = <your-cdn-profile-name> $cdnendpoint = <your-cdn-endpoint-name> $workspacename = <your-log-analytics-workspace-name> $diagname = <your-diagnostic-setting-name> $days = '30' $cdn = Get-AzCdnEndpoint -ResourceGroupName $rsg -ProfileName $cdnprofile -EndpointName $cdnendpoint $workspace = Get-AzOperationalInsightsWorkspace -ResourceGroupName $rsg -Name $workspacename Set-AzDiagnosticSetting -Name $diagname -ResourceId $cdn.id -WorkspaceId $workspace.ResourceId -Enabled $true -Category AzureCdnAccessLog -RetentionEnabled 1 -RetentionInDays $days
啟用事件中樞命名空間的診斷記錄
登入 Azure PowerShell:
Connect-AzAccount
若要啟用事件中樞命名空間的診斷記錄,請輸入這些命令。 以您的值取代變數:
## Variables for the commands ## $rsg = <your-resource-group-name> $cdnprofile = <your-cdn-profile-name> $cdnendpoint = <your-cdn-endpoint-name> $evthubnamespace = <your-event-hub-namespace-name> $diagname = <your-diagnostic-setting-name> $cdn = Get-AzCdnEndpoint -ResourceGroupName $rsg -ProfileName $cdnprofile -EndpointName $cdnendpoint $eventhub = Get-AzEventHubNamespace -ResourceGroupName $rsg -Name $eventhubname Set-AzDiagnosticSetting -Name $diagname -ResourceId $cdn.id -EventHubName $eventhub.id -Enabled $true -Category AzureCdnAccessLog -RetentionEnabled 1 -RetentionInDays $days
原始記錄屬性
來自 Microsoft 服務的 Azure CDN 目前提供原始記錄。 原始記錄會提供個別 API 要求,每個專案都有下列架構:
屬性 | 說明 |
---|---|
BackendHostname | 如果要求正轉送至後端,此字段代表後端的主機名。 如果要求重新導向或轉送至區域快取,則此欄位為空白(當啟用路由規則的快取時)。 |
CacheStatus | 針對快取案例,此欄位會定義 POP 的快取命中/遺漏 |
ClientIp | 發出要求的用戶端IP位址。 如果要求中有 X-Forwarded-For 標頭,則會從相同的中挑選用戶端 IP。 |
ClientPort | 發出要求的用戶端 IP 埠。 |
HttpMethod | 要求所使用的 HTTP 方法。 |
HttpStatusCode | 從 Proxy 傳回的 HTTP 狀態代碼。 如果來源的要求逾時,HttpStatusCode 的值會設定為 0。 |
HttpStatusDetails | 要求的結果狀態。 您可以在狀態參考資料表中找到這個字串值的意義。 |
HttpVersion | 要求或連線的類型。 |
流行 | 要求落地的邊緣簡短名稱。 |
RequestBytes | 以位元組為單位的 HTTP 要求訊息大小,包括要求標頭和要求本文。 |
RequestUri | 已接收要求的 URI。 |
ResponseBytes | 後端伺服器作為回應所傳送的位元組。 |
RoutingRuleName | 要求相符的路由規則名稱。 |
RulesEngineMatchNames | 要求相符的規則名稱。 |
SecurityProtocol | 要求所使用的 TLS/SSL 通訊協定版本,如果沒有加密,則為 Null。 |
SentToOriginShield (已淘汰) * 請參閱下一節中關於淘汰的注意事項。 | 如果為 true,表示要求是從原始盾牌快取回應,而不是邊緣快顯。 原始防護是用來改善快取命中率的父快取。 |
isReceivedFromClient | 如果為 true,表示要求來自用戶端。 如果為 false,則要求在邊緣 (子 POP) 中遺漏,並從原始盾牌 (父 POP) 回應。 |
TimeTaken | 從第一個字節的要求到 Azure Front Door 到最後一個字節的回應時間長度,以秒為單位。 |
TrackingReference | 識別 Azure Front Door 所服務要求的唯一參考字串,也會傳送為 X-Azure-Ref 標頭給用戶端。 在特定要求的存取記錄中搜尋詳細數據的必要專案。 |
UserAgent | 用戶端使用的瀏覽器類型。 |
ErrorInfo | 此欄位包含特定類型的錯誤,可縮小疑難解答區域的範圍。 可能的值包括: NoError:表示找不到錯誤。 CertificateError:一般 SSL 憑證錯誤。CertificateNameCheckFailed:SSL 憑證中的主機名無效或不符合。 ClientDisconnected:因為用戶端網路連線而要求失敗。 UnspecifiedClientError:一般客戶端錯誤。 InvalidRequest:要求無效。 這可能是因為格式不正確的標頭、本文和URL所導致。 DNSFailure:D NS 失敗。 DNSNameNotResolved:無法解析伺服器名稱或位址。 Origin 連線 ionAborted:與來源的連接突然停止。 Origin 連線 ionError:一般原始來源連線錯誤。 Origin 連線 ionRefused:無法建立與來源的連線。 OriginError:一般原始來源錯誤。 OriginInvalidResponse:Origin 傳回無效或無法辨識的回應。 OriginTimeout:原始來源要求的逾時期限已過期。 ResponseHeaderTooBig:來源傳回的響應標頭太大。 RestrictedIP:因為IP受限,因此封鎖了要求。 SSLHandshakeError:由於 SSL 手搖晃失敗,無法建立與來源的連線。 UnspecifiedError:發生錯誤,不符合數據表中的任何錯誤。 |
TimeToFirstByte | 從 Microsoft CDN 收到要求到第一個字節傳送至客戶端的時間,以毫秒為單位的時間長度。 時間只會從 Microsoft 端測量。 不會測量客戶端數據。 |
結果 | SSLMismatchedSNI 是狀態代碼,表示成功要求,且伺服器名稱指示 (SNI) 與主機標頭之間有不相符的警告。 此狀態代碼表示網域前端,這是違反 Azure Front Door 服務條款的技術。 的要求 SSLMismatchedSNI 將在 2024 年 1 月 22 日之後遭到拒絕。 |
SNI | 此欄位會指定 TLS/SSL 交握期間傳送的伺服器名稱指示 (SNI)。 如果有 SSLMismatchedSNI 狀態代碼,它可以用來識別確切的 SNI 值。 此外,也可以與欄位中的 requestUri 主機值進行比較,以偵測並解決不相符的問題。 |
注意
您可以執行查詢,在 Log Analytics 設定檔底下檢視記錄。 範例查詢看起來會像這樣: AzureDiagnostics | where Category == "AzureCdnAccessLog"
傳送至原始防護已淘汰
原始記錄屬性 isSentToOriginShield 已被取代,並以新的字段 isReceivedFromClient 取代。 如果您已經使用已被取代的欄位,請使用新的欄位。
原始記錄包含從 CDN 邊緣 (子 POP) 和原始防護產生的記錄。 原始防護是指策略性位於全球的父節點。 這些節點會與源伺服器通訊,並減少來源上的流量負載。
對於每個進入原始防護的要求,都有兩個記錄專案:
- 一個用於邊緣節點
- 一個用於原始盾牌。
若要區別邊緣節點與原始防護的輸出或回應,您可以使用字段 isReceivedFromClient 來取得正確的數據。
如果值為 false,則表示要求會從原始防護回應至邊緣節點。 這種方法很有效,可比較原始記錄與賬單數據。 從原始防護輸出到邊緣節點不會產生費用。 從邊緣節點輸出到用戶端會產生費用。
Kusto 查詢範例,以排除Log Analytics中原始防護上產生的記錄。
AzureDiagnostics
| where OperationName == "Microsoft.Cdn/Profiles/AccessLog/Write" and Category == "AzureCdnAccessLog"
| where isReceivedFromClient == true
重要
HTTP 原始記錄功能會自動提供給在 2020 年 2 月 25 日之後建立或更新的任何配置檔。 針對稍早建立的 CDN 配置檔,應該在設定記錄之後更新 CDN 端點。 例如,您可以流覽至CDN端點下的地理篩選,並封鎖任何與工作負載無關的國家/地區,並按 [儲存]。
計量
來自 Microsoft 的 Azure CDN 與 Azure 監視器整合,並發布四個 CDN 計量,以協助追蹤、疑難解答和偵錯問題。
計量會顯示在圖表中,並可透過PowerShell、CLI和API存取。 CDN 計量是免費的。
來自 Microsoft 的 Azure CDN 會以 60 秒間隔測量並傳送其計量。 計量最多可能需要 3 分鐘才會出現在入口網站中。
如需詳細資訊,請參閱 Azure 監視器計量。
來自 Microsoft 的 Azure CDN 所支援的計量
計量 | 描述 | 維度 |
---|---|---|
位元節命中率* | CDN 快取的輸出百分比,根據總輸出計算。 | 端點 |
RequestCount | CDN 所服務的用戶端要求數目。 | 端點 客戶端國家/地區。 用戶端區域。 HTTP 狀態。 HTTP 狀態群組。 |
ResponseSize | 從 CDN 邊緣傳送至客戶端的回應時傳送的位元組數目。 | 端點 客戶端國家/地區。 用戶端區域。 HTTP 狀態。 HTTP 狀態群組。 |
TotalLatency | 從 CDN 收到的用戶端要求到從 CDN 傳送至客戶端的最後一個回應位元組為止的總時間。 | 端點 客戶端國家/地區。 用戶端區域。 HTTP 狀態。 HTTP 狀態群組。 |
注意
如果來源逾時的要求,HttpStatusCode 的值會設定為 0。
*位元組命中率 = (從邊緣輸出 - 來源輸出)/從邊緣輸出
以位元組命中率計算排除的案例:
- 您可以透過規則引擎或查詢字串快取行為明確設定任何快取。
- 您明確設定具有無存放區或私人快取的快取控制指示詞。
計量組態
從 [Azure 入口網站] 功能表中,選取 [所有資源<>>] your-CDN-profile。>
在 [監視] 底下,選取 [計量]:
選取 [新增計量],選取要新增的計量:
選取 [新增篩選 ] 以新增篩選:
選取 [ 套用 分割] 以查看不同維度的趨勢:
選擇[新增圖表] 以新增圖表:
警示
您可以選取 [監視>>警示],在 Microsoft CDN 上設定警示。
針對 [計量] 區段中所列的計量選取 [新增警示規則 ]:
警示會根據 Azure 監視器收費。 如需警示的詳細資訊,請參閱 Azure 監視器警示。
更多計量
您可以使用 Azure Log Analytics 和原始記錄來啟用更多計量,以產生額外費用。
請遵循上一節中的步驟,讓診斷將原始記錄傳送至Log Analytics。
選取您建立的 Log Analytics 工作區:
在 Log Analytics 工作區中,選取 [一般] 下的 [記錄]。 然後選取 [開始使用]:
選取 [CDN 設定檔]。 選取要執行的範例查詢,或關閉範例畫面以輸入自訂查詢:
若要依圖表檢視資料,請選取 [圖表]。 選取 [ 釘選到儀錶板 ] 將圖表釘選到 Azure 儀錶板:
後續步驟
在本文中,您已啟用 Microsoft CDN 服務的 HTTP 原始記錄。
如需有關 Azure CDN 和本文所述其他 Azure 服務的詳細資訊,請參閱: