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

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 请求,其中每个条目具有以下架构:

properties 说明
BackendHostname 如果请求将被转发到后端,则此字段表示后端的主机名。 如果在为传递规则启用缓存时,请求将被重定向或转发到区域缓存,则此字段为空。
CacheStatus 对于缓存方案,此字段定义在 POP 处的缓存命中/未命中情况
ClientIp 发出请求的客户端的 IP 地址。 如果请求中包含 X-Forwarded-For 头,则从同一个头中获取客户端 IP。
ClientPort 发出请求的客户端的 IP 端口。
HttpMethod 请求使用的 HTTP 方法。
HttpStatusCode 从代理返回的 HTTP 状态代码。 如果对源的请求超时,则 HttpStatusCode 的值将设置为“0”。
HttpStatusDetails 请求的结果状态。 此字符串值的含义可以在状态引用表中找到。
HttpVersion 请求或连接的类型。
POP 请求着陆的边缘的短名称。
RequestBytes HTTP 请求消息的大小(以字节为单位),包括请求标头和请求正文。
RequestUri 已收到请求的 URI。
ResponseBytes 后端服务器作为响应发送的字节数。
RoutingRuleName 请求匹配的传递规则的名称。
RulesEngineMatchNames 请求匹配的规则的名称。
SecurityProtocol 请求所使用的 TLS/SSL 协议版本,如果没有加密,则为 null。
SentToOriginShield
(已弃用)* 请参阅以下部分中的弃用说明。
如果为 true,则表示请求是从源防护缓存(而不是边缘 pop)响应的。 源防护是用于提高缓存命中率的父缓存。
isReceivedFromClient 如果为 true,则表示请求来自客户端。 如果为 false,则请求在边缘(子 POP)未命中,并从源盾牌(父 POP)进行响应。
TimeTaken 从请求的第一个字节传入 Azure Front Door 到响应的最后一个字节传出 Azure Front Door 的时间长度(以秒为单位)。
TrackingReference 标识由 Azure Front Door 提供的请求的唯一引用字符串,该请求还会以 X-Azure-Ref 标头的形式发送到客户端。 是搜索特定请求访问日志中的详细信息必需的。
UserAgent 客户端使用的浏览器类型。
ErrorInfo 此字段包含特定类型的错误,以缩小故障排除区域。
可能的值包括:
NoError:指示未发现任何错误。
CertificateError:通用 SSL 证书错误。
CertificateNameCheckFailed:SSL 证书中的主机名无效或不匹配。
ClientDisconnected:客户端网络连接问题导致请求失败。
UnspecifiedClientError:常规客户端错误。
InvalidRequest:请求无效。 此错误的可能原因是标头、正文和 URL 格式不正确。
DNSFailure:DNS 故障。
DNSNameNotResolved:无法解析服务器名称或地址。
OriginConnectionAborted:与源的连接突然断开。
OriginConnectionError:常规源连接错误。
OriginConnectionRefused:无法与源建立连接。
OriginError:常规源错误。
OriginInvalidResponse:源返回的响应无效或无法识别。
OriginTimeout:超过了源请求的超时期限。
ResponseHeaderTooBig:源返回的响应头过大。
RestrictedIP:由于 IP 受限而阻止了请求。
SSLHandshakeError:由于 SSL 握手失败,无法与源建立连接。
UnspecifiedError:发生了与表中任何错误都不相符的错误。
TimeToFirstByte 从 Microsoft CDN 接收到请求到第一个字节发送到客户端的时间长度(以毫秒为单位)。 仅从 Microsoft 端测量该时间。 不测量客户端数据。
Result SSLMismatchedSNI 是一个状态代码,表示请求成功,但服务器名称指示 (SNI) 和主机标头之间存在不匹配警告。 此状态代码意味着域前置,这是一种违反 Azure Front Door 条款的技术。 2024 年 1 月 22 日之后,通过 SSLMismatchedSNI 提出的请求将被拒绝。
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

重要

2020 年 2 月 25 日之后创建或更新的任何配置文件可自动使用 HTTP 原始日志功能。 对于之前创建的 CDN 配置文件,应在设置日志记录后更新 CDN 终结点。 例如,可以导航到 CDN 终结点下的地区筛选,并阻止任何与工作负荷无关的国家/地区,并按保存。

指标

Microsoft Azure CDN 与 Azure Monitor 集成在一起,并发布四个 CDN 指标来帮助跟踪、排查和调试问题。

图表中显示了这些指标,可通过 PowerShell、CLI 和 API 访问它们。 CDN 指标不收取费用。

Microsoft Azure CDN 每隔 60 秒测量和发送一次指标。 可能需要 3 分钟,这些指标才会显示在门户中。

有关详细信息,请参阅 Azure Monitor 指标

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 Monitor 对警报进行收费。 有关警报的详细信息,请参阅 Azure Monitor 警报

更多指标

可以使用 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 服务的详细信息,请参阅: