你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

诊断日志 - Azure 内容分发网络

重要

Microsoft Azure CDN Standard(经典版)将于 2027 年 9 月 30 日停用。 为了避免任何服务中断,请务必在 2027 年 9 月 30 日之前将 Microsoft Azure CDN Standard(经典版)配置文件迁移到 Azure Front Door Standard 层或 Premium 层。 有关详细信息,请参阅 Microsoft Azure CDN Standard(经典版)停用

Edgio 的 Azure CDN 将于 2025 年 1 月 15 日停用。 为了避免服务中断,必须在此日期之前将工作负载迁移到 Azure Front Door。 有关详细信息,请参阅 Edgio 的 Azure CDN 停用常见问题解答

使用 Azure 诊断日志,可以查看核心分析并将其保存到一个或多个目标,包括:

  • Azure 存储帐户
  • Log Analytics 工作区
  • Azure 事件中心

此功能在所有定价层的内容分发网络终结点上提供。

通过诊断日志,可将基本使用指标从内容分发网络终结点导出到不同的源,以便以自定义方式使用它们。 可执行以下类型的数据导出:

  • 将数据导出到 Blob 存储、导出为CSV,并在 Excel 中生成图形。
  • 将数据导出到事件中心,并关联到其他 Azure 服务的数据。
  • 将数据导出到 Azure Monitor 日志,并在自己的 Log Analytics 工作区中查看数据

以下步骤需要使用 Azure 内容分发网络配置文件。 继续操作之前,请参阅创建 Azure 内容分发网络配置文件和终结点

使用 Azure 门户启用日志记录

按照以下步骤为你的 Azure 内容分发网络终结点启用日志记录:

  1. 登录 Azure 门户

  2. 在 Azure 门户中,导航到“所有资源”>“your-cdn-profile”。

  3. 选择要为其启用诊断日志的内容分发网络终结点:

    选择内容分发网络终结点的屏幕截图。

  4. 在“监视”部分中选择“诊断日志” :

    “监视”菜单下的“诊断日志”按钮的屏幕截图。

使用 Azure 存储启用日志记录

若要使用存储帐户来存储日志,请执行以下步骤:

注意

需要使用存储帐户来完成这些步骤。 有关详细信息,请参阅创建 Azure 存储帐户

  1. 对于“诊断设置名称”,请输入诊断日志设置的名称。

  2. 选择“存档到存储帐户”,然后选择“CoreAnalytics”

  3. 对于“保留期(天数)”,请选择保留天数。 如果保留期为 0 天,则会无限期存储日志。

  4. 选择日志的订阅和存储帐户。

    诊断日志 - 存储。

  5. 选择“保存”。

发送到 Log Analytics

要使用 Log Analytics 来存储日志,请执行以下步骤:

注意

需要使用 Log Analytics 工作区才能完成这些步骤。 有关详细信息,请参阅在 Azure 门户中创建 Log Analytics 工作区

  1. 对于“诊断设置名称”,请输入诊断日志设置的名称。

  2. 选择“发送到 Log Analytics”,然后选择“CoreAnalytics” 。

  3. 为日志选择订阅和 Log Analytics 工作区。

    诊断日志 - Log Analytics。

  4. 选择“保存”。

流式传输到事件中心

要使用事件中心来存储日志,请执行以下步骤:

注意

需要使用事件中心来完成这些步骤。 有关详细信息,请参阅快速入门:使用 Azure 门户创建事件中心

  1. 对于“诊断设置名称”,请输入诊断日志设置的名称。

  2. 选择“流式传输到事件中心”,然后选择“CoreAnalytics” 。

  3. 为日志选择订阅和事件中心命名空间。

    诊断日志 - 事件中心。

  4. 选择“保存”。

使用 PowerShell 启用日志记录

以下示例演示了如何通过 Azure PowerShell Cmdlet 启用诊断日志。

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 若要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

在存储帐户中启用诊断日志

  1. 登录到 Azure PowerShell:

    Connect-AzAccount 
    
  2. 若要在存储帐户中启用诊断日志,请输入以下命令。 将变量替换成你自己的值:

    $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>
    
    $cdn = Get-AzCdnEndpoint -ResourceGroupName $rsg -ProfileName $cdnprofile -EndpointName $cdnendpoint
    
    $storage = Get-AzStorageAccount -ResourceGroupName $rsg -Name $storageacct
    
    Set-AzDiagnosticSetting -Name $diagname -ResourceId $cdn.id -StorageAccountId $storage.id -Enabled $true -Categories CoreAnalytics
    

为 Log Analytics 工作区启用诊断日志

  1. 登录到 Azure PowerShell:

    Connect-AzAccount 
    
  2. 若要为 Log Analytics 工作区启用诊断日志,请输入以下命令。 将变量替换成你自己的值:

    $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>
    
    $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 -Categories CoreAnalytics
    

为事件中心命名空间启用诊断日志

  1. 登录到 Azure PowerShell:

    Connect-AzAccount 
    
  2. 若要为 Log Analytics 工作区启用诊断日志,请输入以下命令。 将变量替换成你自己的值:

    $rsg = <your-resource-group-name>
    $cdnprofile = <your-cdn-profile-name>
    $cdnendpoint = <your-cdn-endpoint-name>
    $eventhubname = <your-event-hub-namespace-name>
    $diagname = <your-diagnostic-setting-name>
    
    $cdn = Get-AzCdnEndpoint -ResourceGroupName $rsg -ProfileName $cdnprofile -EndpointName $cdnendpoint
    
    Set-AzDiagnosticSetting -Name $diagname -ResourceId $cdn.id -EventHubName $eventhubname -Enabled $true -Categories CoreAnalytics
    

从 Azure 存储中使用诊断日志

本部分介绍内容分发网络核心分析的架构、Azure 存储帐户中的组织,并提供用于将日志下载到 CSV 文件的示例代码。

使用 Microsoft Azure 存储资源管理器

若要下载该工具,请参阅 Azure 存储资源管理器。 下载并安装软件后,请将其配置为使用已配置为内容分发网络诊断日志目标的同一 Azure 存储帐户。

  1. 打开 Microsoft Azure 存储资源管理器
  2. 找到存储帐户
  3. 展开该存储帐户下的“Blob 容器”节点。
  4. 选择名为 insights-logs-coreanalytics 的容器。
  5. 结果显示在右窗格中,从第一级开始,类似于 resourceId=。 继续选择每个级别,直至找到 PT1H.json 文件。 有关路径的说明,请参阅 Blob 路径格式
  6. 每个 Blob PT1H.json 文件表示特定内容分发网络终结点或其自定义域一小时内的分析日志
  7. 有关此 JSON 文件的内容架构,请参阅核心分析日志的“架构”部分。

Blob 路径格式

核心分析日志每隔一小时生成一次,数据以 JSON 有效负载的形式收集并存储在单个 Azure Blob 中。 存储资源管理器工具将“/”解释为目录分隔符,并显示层次结构。 Azure Blob 的路径看起来像是采用了分层结构并表示 Blob 名称。 Blob 的名称遵循以下命名约定:

resourceId=/SUBSCRIPTIONS/{Subscription Id}/RESOURCEGROUPS/{Resource Group Name}/PROVIDERS/MICROSOFT.CDN/PROFILES/{Profile Name}/ENDPOINTS/{Endpoint Name}/ y=/m=/d=/h=/m=/PT1H.json

字段说明:

说明
订阅 ID Azure 订阅的 ID,采用全局唯一标识符 (GUID) 格式。
资源组名称 内容分发网络资源所属资源组的名称。
配置文件名称 内容分发网络配置文件的名称
端点名称 内容分发网络终结点的名称
Year 年份的四位数表示形式,例如 2017
Month 月份的两位数表示形式。 01=1 月 … 12=12 月
月份中日的两位数表示形式
PT1H.json 实际存储分析数据的 JSON 文件

将核心分析数据导出到 CSV 文件

为了访问核心分析,我们提供了工具的示例代码。 此工具可将 JSON 文件下载为逗号分隔的平面文件格式,然后可以使用该格式创建图表或其他聚合。

该工具的使用方式如下:

  1. 访问 GitHub 链接:https://github.com/Azure-Samples/azure-cdn-samples/tree/master/CoreAnalytics-ExportToCsv
  2. 下载代码。
  3. 遵照说明进行编译和配置。
  4. 运行该工具。
  5. 生成的 CSV 文件以简单的平面层次结构显示分析数据。

日志数据延迟

下表介绍 Microsoft 提供的 Azure CDN 标准版和 Edgio 提供的 Azure CDN 标准/高级版的日志数据延迟

Microsoft 日志数据延迟 Edgio 日志数据延迟
延迟 1 小时。 延迟 1 小时,在终结点传播完成后可能需要长达 2 小时的时间才会开始显示。

内容分发网络核心分析的诊断日志类型

Microsoft 当前仅提供核心分析日志,其中包含一些显示 HTTP 响应统计信息和出口统计信息的指标(如内容分发网络 POP/边缘中所见)。

核心分析指标详细信息

下表显示了核心分析日志中可用于以下版本的指标列表:

  • 来自 Microsoft 的 Azure CDN 标准版
  • Edgio 提供的 Azure CDN 标准版/高级版

并非所有提供商提供的所有指标都可用,尽管这种差异很小。 此表还显示了某提供商的给定指标是否可用。 这些指标仅适用于在其上拥有流量的内容分发网络终结点。

跃点数 说明 Microsoft Edgio
RequestCountTotal 在此期间请求命中的总次数。
RequestCountHttpStatus2xx 导致 2xx HTTP 代码(例如 200 和 202)的所有请求的计数。
RequestCountHttpStatus3xx 导致 3xx HTTP 代码(例如 300 和 302)的所有请求的计数。
RequestCountHttpStatus4xx 导致 4xx HTTP 代码(例如 400 和 404)的所有请求的计数。
RequestCountHttpStatus5xx 导致 5xx HTTP 代码(例如 500 和 504)的所有请求的计数。
RequestCountHttpStatusOthers 所有其他 HTTP 代码的计数(2xx-5xx 除外)。
RequestCountHttpStatus200 导致 200 HTTP 代码响应的所有请求的计数。
RequestCountHttpStatus206 导致 206 HTTP 代码响应的所有请求的计数。
RequestCountHttpStatus302 导致 302 HTTP 代码响应的所有请求的计数。
RequestCountHttpStatus304 导致 304 HTTP 代码响应的所有请求的计数。
RequestCountHttpStatus404 导致 404 HTTP 代码响应的所有请求的计数。
RequestCountCacheHit 导致缓存命中的所有请求的计数。 资产已直接从 POP 提供给客户端。
RequestCountCacheMiss 导致缓存未命中的所有请求的计数。 缓存失误的意思是在最靠近客户端的 POP 上找不到资产,将从源进行检索。
RequestCountCacheNoCache 因边缘上的用户配置而无法缓存的资产的所有请求计数。
RequestCountCacheUncacheable 因资产的 Cache-Control 和 Expires 标头而无法缓存的资产的所有请求计数。 此计数指示该资产不应在 POP 上缓存或不应由 HTTP 客户端缓存。
RequestCountCacheOthers 上面列出的指标不包括具有缓存状态的所有请求的计数。
EgressTotal 出站数据传输量(按 GB 计)
EgressHttpStatus2xx 针对状态代码为 2xx HTTP 的响应的出站数据传输量*(按 GB 计)。
EgressHttpStatus3xx 针对状态代码为 3xx HTTP 的响应的出站数据传输量(按 GB 计)。
EgressHttpStatus4xx 针对状态代码为 4xx HTTP 的响应的出站数据传输量(按 GB 计)。
EgressHttpStatus5xx 针对状态代码为 5xx HTTP 的响应的出站数据传输量(按 GB 计)。
EgressHttpStatusOthers 针对带其他 HTTP 状态代码的响应的出站数据传输量(按 GB 计)。
EgressCacheHit 针对直接从内容分发网络 POP/边缘上内容分发网络缓存传递的响应的出站数据传输量。
EgressCacheMiss。 针对未在最近的 POP 服务器上找到并从源服务器检索的响应的出站数据传输量。
EgressCacheNoCache 因边缘上的用户配置而无法缓存的资源的出站数据传输量。
EgressCacheUncacheable 因资产的 Cache-Control 和/或 Expires 标头而无法缓存的资产的出站数据传输量。 指示该资产不应在 POP 上缓存或不应由 HTTP 客户端缓存。
EgressCacheOthers 其他缓存方案的出站数据传输量。

* 出站数据传输量是指从内容分发网络 POP 服务器传递到客户端的流量。

核心分析日志的架构

所有日志以 JSON 格式存储,每个项包含遵循以下架构的字符串字段:

    "records": [
        {
            "time": "2017-04-27T01:00:00",
            "resourceId": "<ARM Resource Id of the CDN Endpoint>",
            "operationName": "Microsoft.Cdn/profiles/endpoints/contentDelivery",
            "category": "CoreAnalytics",
            "properties": {
                "DomainName": "<Name of the domain for which the statistics is reported>",
                "RequestCountTotal": integer value,
                "RequestCountHttpStatus2xx": integer value,
                "RequestCountHttpStatus3xx": integer value,
                "RequestCountHttpStatus4xx": integer value,
                "RequestCountHttpStatus5xx": integer value,
                "RequestCountHttpStatusOthers": integer value,
                "RequestCountHttpStatus200": integer value,
                "RequestCountHttpStatus206": integer value,
                "RequestCountHttpStatus302": integer value,
                "RequestCountHttpStatus304": integer value,
                "RequestCountHttpStatus404": integer value,
                "RequestCountCacheHit": integer value,
                "RequestCountCacheMiss": integer value,
                "RequestCountCacheNoCache": integer value,
                "RequestCountCacheUncacheable": integer value,
                "RequestCountCacheOthers": integer value,
                "EgressTotal": double value,
                "EgressHttpStatus2xx": double value,
                "EgressHttpStatus3xx": double value,
                "EgressHttpStatus4xx": double value,
                "EgressHttpStatus5xx": double value,
                "EgressHttpStatusOthers": double value,
                "EgressCacheHit": double value,
                "EgressCacheMiss": double value,
                "EgressCacheNoCache": double value,
                "EgressCacheUncacheable": double value,
                "EgressCacheOthers": double value,
            }
        }

    ]
}

其中,time 表示报告统计信息的小时边界的开始时间。 不受内容分发网络提供程序支持的指标将返回 null 值,而不是双精度或整数值。 该 null 值表示不存在指标且与 0 值不同。 在终结点上配置的每个域都有其中一组指标。

示例属性:

{
     "DomainName": "azurecdntest.azureedge.net",
     "RequestCountTotal": 480,
     "RequestCountHttpStatus2xx": 480,
     "RequestCountHttpStatus3xx": 0,
     "RequestCountHttpStatus4xx": 0,
     "RequestCountHttpStatus5xx": 0,
     "RequestCountHttpStatusOthers": 0,
     "RequestCountHttpStatus200": 480,
     "RequestCountHttpStatus206": 0,
     "RequestCountHttpStatus302": 0,
     "RequestCountHttpStatus304": 0,
     "RequestCountHttpStatus404": 0,
     "RequestCountCacheHit": null,
     "RequestCountCacheMiss": null,
     "RequestCountCacheNoCache": null,
     "RequestCountCacheUncacheable": null,
     "RequestCountCacheOthers": null,
     "EgressTotal": 0.09,
     "EgressHttpStatus2xx": null,
     "EgressHttpStatus3xx": null,
     "EgressHttpStatus4xx": null,
     "EgressHttpStatus5xx": null,
     "EgressHttpStatusOthers": null,
     "EgressCacheHit": null,
     "EgressCacheMiss": null,
     "EgressCacheNoCache": null,
     "EgressCacheUncacheable": null,
     "EgressCacheOthers": null
}

更多资源