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

使用诊断设置监视 Azure Cache for Redis 数据

Azure 中的诊断设置用于收集资源日志。 Azure 资源发出资源日志,并提供与该资源的操作相关的各种频繁生成的数据。 这些日志是按请求捕获的,也称为“数据平面日志”。 有关 Azure 中功能的建议概述,请参阅 Azure Monitor 中的诊断设置。 这些日志的内容因资源类型而异。 在 Azure Cache for Redis 中,有两个选项可用于记录:

可用范围

“基本”、“标准”和“高级” Enterprise 和 Enterprise Flash
缓存指标
连接日志

缓存指标

Azure Cache for Redis 会发出许多指标,例如服务器负载每秒连接数,这些指标对记录很有用。 选择 AllMetrics 选项可以记录上述及其他缓存指标。 可以配置指标的保留时长。 请参阅此处,了解将缓存指标导出到存储帐户的示例

连接日志

Azure Cache for Redis 使用 Azure 诊断设置来记录有关与缓存建立的客户端连接的信息。 记录并分析此诊断设置可帮助你了解谁正在连接到你的缓存,以及这些连接的时间戳。 日志数据可用于识别安全漏洞的范围以及进行安全审核。

Azure Cache for Redis 层之间的差异

连接日志在各层的实施略有不同:

  • Basic、Standard 和 Premium 层缓存按 IP 地址轮询客户端连接,包括源自每个唯一 IP 地址的连接数。 这些日志不会累积。 它们表示按 10 秒间隔创建的时间点快照。 身份验证事件(成功和失败)和断开连接事件不会记录在这些层中。
  • Enterprise 和 Enterprise Flash 层缓存使用 Redis Enterprise 内置的审核连接事件功能。 审核连接事件允许记录每个连接、断开连接和身份验证事件,包括失败的身份验证事件。

各层生成的连接日志看起来相似,但存在一些差异。 本文稍后会更详细地介绍这两种格式。

重要

Basic、Standard 和 Premium 层中的连接日志记录轮询缓存中的当前客户端连接。 相同的客户端 IP 地址会反复出现。 Enterprise 和 Enterprise Flash 层中的日志记录侧重于每个连接事件。 仅在实际事件第一次发生时记录日志。

连接日志记录的先决条件/限制

Basic、Standard 和 Premium 层

  • 由于这些层中的连接日志包含每 10 秒拍摄一次的时间点快照,因此不会记录在 10 秒间隔内建立和删除的连接。
  • 不会记录身份验证事件。
  • 所有诊断设置最多可能需要 90 分钟才能开始流向所选目标。
  • 启用连接日志可能会导致缓存实例的性能小幅下降。
  • 将日志流式传输到 Azure Log Analytics 时,仅支持 Analytics 日志定价计划。 有关详细信息,请参阅 Azure Monitor 定价

Enterprise 和 Enterprise Flash 层级

  • 使用 OSS 群集策略时,会从每个数据节点发出日志。 使用 Enterprise 群集策略时,只有用作代理的节点才会发出日志。 这两个版本仍然涵盖与缓存的所有连接。 这只是一个体系结构差异。
  • 数据丢失(即丢失连接事件)很少见,但仍有可能发生。 数据丢失通常是由网络问题引起的。
  • 断开连接日志尚未完全稳定,可能会遗漏事件。
  • 由于 Enterprise 层上的连接日志是基于事件的,因此请注意你的保留策略。 例如,如果保留期设置为 10 天,而连接事件发生在 15 天前,则该连接可能仍然存在,但不会保留该连接的日志。
  • 如果使用活动异地复制,则必须单独为异地复制组中的每个缓存实例配置日志记录。
  • 所有诊断设置最多可能需要 90 分钟才能开始流向所选目标。
  • 启用连接日志可能会导致缓存实例的性能小幅下降。

注意

始终可以使用 INFOCLIENT LIST 命令来检查按需连接到缓存实例的人员。

重要

选择日志时,可以选择特定的类别类别组,即跨 Azure 服务预定义的日志分组。 使用类别组时,无法再配置保留设置。 如果需要确定连接日志的保留期,请改为选择“类别”部分中的项。

日志目标

可为 Azure Cache for Redis 实例启用诊断设置,并将资源日志发送到以下目标:

  • Log Analytics 工作区 - 不需要与所监视的资源位于同一区域。
  • 存储帐户 - 必须与缓存位于同一区域。 但是,不支持将高级存储帐户作为目标。
  • 事件中心 - 启用虚拟网络时,诊断设置无法访问事件中心资源。 在事件中心内启用“允许受信任的 Microsoft 服务绕过此防火墙?”设置,以授予对事件中心资源的访问权限。 事件中心必须与缓存位于同一区域。
  • 合作伙伴解决方案 - 可在此处找到潜在合作伙伴日志记录解决方案的列表

有关诊断要求的详细信息,请参阅诊断设置

将诊断日志发送到任一目标时,需按照正常数据费率支付存储帐户和事件中心使用费。 计费是在 Azure Monitor 而不是 Azure Cache for Redis 中发生的。 将日志发送到 Log Analytics 时,只需为 Log Analytics 数据输入付费。

有关更多定价信息,请参阅 Azure Monitor 定价

使用 Azure 门户启用连接日志记录

  1. 登录 Azure 门户

  2. 导航到你的 Azure Cache for Redis 帐户。 打开左侧“监视”部分下的“诊断设置”窗格 。 然后选择“添加诊断设置”。

    Select diagnostics

  3. 在“诊断设置”窗格中,从“类别”中选择 ConnectedClientList

    有关所记录数据的更多详细信息,请参阅下面的连接日志的内容

  4. 选择 ConnectedClientList 后,将日志发送到首选目的地。 在工作窗格中选择信息。

    Select enable resource-specific

使用 REST API 启用连接日志记录

使用 Azure Monitor REST API 通过交互式控制台创建诊断设置。 有关详细信息,请参阅创建或更新

请求

PUT https://management.azure.com/{resourceUri}/providers/Microsoft.Insights/diagnosticSettings/{name}?api-version=2017-05-01-preview

头文件

参数/标头 值/说明
name 诊断设置的名称。
resourceUri subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.Cache/Redis/{CACHE_NAME}
api-version 2017-05-01-preview
Content-Type application/json

正文

{
    "properties": {
      "storageAccountId": "/subscriptions/df602c9c-7aa0-407d-a6fb-eb20c8bd1192/resourceGroups/apptest/providers/Microsoft.Storage/storageAccounts/appteststorage1",
      "eventHubAuthorizationRuleId": "/subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/microsoft.eventhub/namespaces/mynamespace/eventhubs/myeventhub/authorizationrules/myrule",
      "eventHubName": "myeventhub",
      "workspaceId": "/subscriptions/4b9e8510-67ab-4e9a-95a9-e2f1e570ea9c/resourceGroups/insights-integration/providers/Microsoft.OperationalInsights/workspaces/myworkspace",
      "logs": [
        {
          "category": "ConnectedClientList",
          "enabled": true,
          "retentionPolicy": {
            "enabled": false,
            "days": 0
          }
        }
      ]
    }
}

使用 Azure CLI 启用连接日志记录

在 Azure CLI 中使用 az monitor diagnostic-settings create 命令来创建诊断设置。 有关命令和参数说明的详细信息,请参阅创建诊断设置以将平台日志和指标发送到不同的目标。 此示例演示如何使用 Azure CLI 将数据流式传输到四个不同的端点:

az monitor diagnostic-settings create 
    --resource /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupname}/providers/Microsoft.Cache/Redis/{cacheName}
    --name {logName}
    --logs '[{"category": "ConnectedClientList","enabled": true,"retentionPolicy": {"enabled": false,"days": 0}}]'    
    --event-hub {eventHubName}
    --event-hub-rule /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/microsoft.eventhub/namespaces/{eventHubNamespace}/authorizationrule/{ruleName}
    --storage-account /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}
    --workspace /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{logAnalyticsWorkspaceName}
    --marketplace-partner-id/subscriptions/{subscriptionID}/resourceGroups{resourceGroupname}/proviers/Microsoft.Datadog/monitors/mydatadog

连接日志的内容

这些字段和属性显示在 ConnectedClientList 日志类别中。 在 Azure Monitor 中,日志收集在资源提供程序名称 MICROSOFT.CACHE 下的 ACRConnectedClientList 表中。

Azure 存储字段或属性 Azure Monitor 日志属性 说明
time TimeGenerated 生成日志的 UTC 时间戳。
location Location 在其中访问 Azure Cache for Redis 实例的位置(区域)。
category 不适用 可用日志类别:ConnectedClientList
resourceId _ResourceId 为其启用了日志的 Azure Cache for Redis 资源。
operationName OperationName 与日志记录关联的 Redis 操作。
properties 不适用 下面的行中描述了此字段的内容。
tenant CacheName Azure Cache for Redis 实例的名称。
roleInstance RoleInstance 记录客户端列表的角色实例。
connectedClients.ip ClientIp Redis 客户端 IP 地址。
connectedClients.privateLinkIpv6 PrivateLinkIpv6 Redis 客户端专用链接 IPv6 地址(如果适用)。
connectedClients.count ClientCount 来自关联 IP 地址的 Redis 客户端连接数。

示例存储帐户日志

如果将日志发送到存储帐户,则日志的内容如下所示。

{
    "time": "2021-08-05T21:04:58.0466086Z",
    "location": "canadacentral",
    "category": "ConnectedClientList",
    "properties": {
        "tenant": "mycache", 
        "connectedClients": [
            {
                "ip": "192.123.43.36", 
                "count": 86
            },
            {
                "ip": "10.1.1.4",
                "privateLinkIpv6": "fd40:8913:31:6810:6c31:200:a01:104", 
                "count": 1
            }
        ],
        "roleInstance": "1"
    },
    "resourceId": "/SUBSCRIPTIONS/E6761CE7-A7BC-442E-BBAE-950A121933B5/RESOURCEGROUPS/AZURE-CACHE/PROVIDERS/MICROSOFT.CACHE/REDIS/MYCACHE", 
    "Level": 4,
    "operationName": "Microsoft.Cache/ClientList"
}

日志分析查询

注意

有关如何使用 Azure Log Analytics 的教程,请参阅 Azure Monitor 中的 Log Analytics 概述。 请记住,日志最多可能需要 90 分钟才能显示在 Log Analtyics 中。

下面是一些用作模型的基本查询。

  • 指定 IP 地址范围内的每小时 Azure Cache for Redis 客户端连接数:
let IpRange = "10.1.1.0/24";
ACRConnectedClientList
// For particular datetime filtering, add '| where TimeGenerated between (StartTime .. EndTime)'
| where ipv4_is_in_range(ClientIp, IpRange)
| summarize ConnectionCount = sum(ClientCount) by TimeRange = bin(TimeGenerated, 1h)
  • 已连接到缓存的唯一 Redis 客户端 IP 地址:
ACRConnectedClientList
| summarize count() by ClientIp

后续步骤

若要详细了解如何使用 Azure 门户、CLI 或 PowerShell 创建诊断设置,请参阅创建诊断设置以在 Azure 中收集平台日志和指标一文。