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 的原始記錄:

  1. 從 [Azure 入口網站] 功能表中,選取 [所有資源<>>] your-CDN-profile。>

  2. 在 [監視] 底下,選取 [診斷設定]

  3. 選取 +新增診斷設定

    新增 CDN 設定檔的診斷設定。

    重要

    原始記錄只能在配置檔層級中使用,而匯總的 HTTP 狀態代碼記錄可在端點層級中使用。

  4. [診斷設定] 下,於 [診斷設定名稱] 下 輸入診斷設定的名稱

  5. 選取 AzureCdnAccessLog,並設定天數的保留期。

  6. 選取 [目的地詳細資料]。 目的地選項包括:

    • 傳送至 Log Analytics
      • 選取 [訂用帳戶] 和 [Log Analytics 工作區]
    • 封存至儲存體帳戶
      • 選取 [訂用帳戶] 和 [儲存體帳戶]
    • 串流至事件中樞
      • 選取 [訂用帳戶]、[事件中樞命名空間]、\[事件中樞名稱 \(選擇性\)\] 及 [事件中樞原則名稱]

    設定記錄設定的目的地。

  7. 選取 [儲存]。

組態 - Azure PowerShell

使用 Set-AzDiagnosticSetting 來設定原始記錄的診斷設定。

保留數據是由 命令中的 -RetentionInDays 選項所定義。

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

在記憶體帳戶中啟用診斷記錄

  1. 登入 Azure PowerShell:

    Connect-AzAccount 
    
  2. 若要在記憶體帳戶中啟用診斷記錄,請輸入這些命令。 以您的值取代變數:

    ## 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工作區的診斷記錄

  1. 登入 Azure PowerShell:

    Connect-AzAccount 
    
  2. 若要啟用 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
    

啟用事件中樞命名空間的診斷記錄

  1. 登入 Azure PowerShell:

    Connect-AzAccount 
    
  2. 若要啟用事件中樞命名空間的診斷記錄,請輸入這些命令。 以您的值取代變數:

    ## 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

*位元組命中率 = (從邊緣輸出 - 來源輸出)/從邊緣輸出

以位元組命中率計算排除的案例:

  • 您可以透過規則引擎或查詢字串快取行為明確設定任何快取。
  • 您明確設定具有無存放區或私人快取的快取控制指示詞。

計量組態

  1. 從 [Azure 入口網站] 功能表中,選取 [所有資源<>>] your-CDN-profile。>

  2. 在 [監視] 底下,選取 [計量]:

    CDN 配置檔的計量。

  3. 選取 [新增計量],選取要新增的計量:

    新增並選取 CDN 配置檔的計量。

  4. 選取 [新增篩選 ] 以新增篩選:

    將篩選套用至計量。

  5. 選取 [ 套用 分割] 以查看不同維度的趨勢:

    將分割套用至計量。

  6. 選擇[新增圖表] 以新增圖表:

    將新的圖表新增至計量檢視。

警示

您可以選取 [監視>>警示],在 Microsoft CDN 上設定警示。

針對 [計量] 區段中所列的計量選取 [新增警示規則 ]:

設定 CDN 端點的警示。

警示會根據 Azure 監視器收費。 如需警示的詳細資訊,請參閱 Azure 監視器警示

更多計量

您可以使用 Azure Log Analytics 和原始記錄來啟用更多計量,以產生額外費用。

  1. 請遵循上一節中的步驟,讓診斷將原始記錄傳送至Log Analytics。

  2. 選取您建立的 Log Analytics 工作區:

    選取 Log Analytics 工作區功能表的螢幕快照。

  3. 在 Log Analytics 工作區中,選取 [一般] 下的 [記錄]。 然後選取 [開始使用]:

    Log Analytics 資源工作區的螢幕快照。

  4. 選取 [CDN 設定檔]。 選取要執行的範例查詢,或關閉範例畫面以輸入自訂查詢:

    範例查詢畫面的螢幕快照。

    查詢執行的螢幕快照。

  5. 若要依圖表檢視資料,請選取 [圖表]。 選取 [ 釘選到儀錶板 ] 將圖表釘選到 Azure 儀錶板:

    將圖表釘選到儀錶板的螢幕快照。

後續步驟

在本文中,您已啟用 Microsoft CDN 服務的 HTTP 原始記錄。

如需有關 Azure CDN 和本文所述其他 Azure 服務的詳細資訊,請參閱: