你当前正在访问 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 分钟才能开始流向所选目标。
- 启用连接日志可能会导致缓存实例的性能小幅下降。
重要
选择日志时,可以选择特定的类别或类别组,即跨 Azure 服务预定义的日志分组。 使用类别组时,无法再配置保留设置。 如果需要确定连接日志的保留期,请改为选择“类别”部分中的项。
日志目标
可为 Azure Cache for Redis 实例启用诊断设置,并将资源日志发送到以下目标:
- Log Analytics 工作区 - 不需要与所监视的资源位于同一区域。
- 存储帐户 - 必须与缓存位于同一区域。 但是,不支持将高级存储帐户作为目标。
- 事件中心 - 启用虚拟网络时,诊断设置无法访问事件中心资源。 在事件中心内启用“允许受信任的 Microsoft 服务绕过此防火墙?”设置,以授予对事件中心资源的访问权限。 事件中心必须与缓存位于同一区域。
- 合作伙伴解决方案 - 可在此处找到潜在合作伙伴日志记录解决方案的列表
有关诊断要求的详细信息,请参阅诊断设置。
将诊断日志发送到任一目标时,需按照正常数据费率支付存储帐户和事件中心使用费。 计费是在 Azure Monitor 而不是 Azure Cache for Redis 中发生的。 将日志发送到 Log Analytics 时,只需为 Log Analytics 数据输入付费。
有关更多定价信息,请参阅 Azure Monitor 定价。
使用 Azure 门户启用连接日志记录
登录 Azure 门户。
导航到你的 Azure Cache for Redis 帐户。 打开左侧“监视”部分下的“诊断设置”窗格 。 然后选择“添加诊断设置”。
在“诊断设置”窗格中,从“类别”中选择 ConnectedClientList。
有关所记录数据的更多详细信息,请参阅下面的连接日志的内容。
选择 ConnectedClientList 后,将日志发送到首选目的地。 在工作窗格中选择信息。
登录 Azure 门户。
导航到你的 Azure Cache for Redis 帐户。 打开左侧“监控”部分下的“诊断设置 - 审核”窗格。 然后选择“添加诊断设置”。
在“诊断设置 - 审核”窗格中,从“类别”中选择“连接事件”。
有关所记录数据的更多详细信息,请参阅下面的连接日志的内容。
选择连接事件后,将日志发送到首选目的地。 在工作窗格中选择信息。
使用 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/apptest/providers/Microsoft.Storage/storageAccounts/appteststorage1",
"eventHubAuthorizationRuleId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/montest/providers/microsoft.eventhub/namespaces/mynamespace/eventhubs/myeventhub/authorizationrules/myrule",
"eventHubName": "myeventhub",
"workspaceId": "/subscriptions/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/resourceGroups/insights-integration/providers/Microsoft.OperationalInsights/workspaces/myworkspace",
"logs": [
{
"category": "ConnectedClientList",
"enabled": true,
"retentionPolicy": {
"enabled": false,
"days": 0
}
}
]
}
}
使用 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/RedisEnterprise/{CACHE_NAME}/databases/default |
api-version |
2017-05-01-preview |
Content-Type |
application/json |
正文
{
"properties": {
"storageAccountId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/apptest/providers/Microsoft.Storage/storageAccounts/myteststorage",
"eventHubAuthorizationRuleID": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/montest/providers/microsoft.eventhub/namespaces/mynamespace/authorizationrules/myrule",
"eventHubName": "myeventhub",
"marketplacePartnerId": "/subscriptions/dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/resourceGroups/test-rg/providers/Microsoft.Datadog/monitors/mydatadog",
"workspaceId": "/subscriptions/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/resourceGroups/insights integration/providers/Microsoft.OperationalInsights/workspaces/myworkspace",
"logs": [
{
"category": "ConnectionEvents",
"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
在 Azure CLI 中使用 az monitor diagnostic-settings create
命令来创建诊断设置。 有关命令和参数说明的详细信息,请参阅创建诊断设置以将平台日志和指标发送到不同的目标。 此示例演示如何使用 Azure CLI 将数据流式传输到四个不同的端点:
az monitor diagnostic-settings create
--resource /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Cache/redisenterprise/{cacheName}/databases/default
--name {logName}
--logs '[{"category": "ConnectionEvents","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/eeee4efe-ff5f-aa6a-bb7b-cccccc8c8c8c/RESOURCEGROUPS/AZURE-CACHE/PROVIDERS/MICROSOFT.CACHE/REDIS/MYCACHE",
"Level": 4,
"operationName": "Microsoft.Cache/ClientList"
}
这些字段和属性显示在 ConnectionEvents
日志类别中。 在 Azure Monitor 中,日志收集在资源提供程序名称 MICROSOFT.CACHE
下的 REDConnectionEvents
表中。
Azure 存储字段或属性 |
Azure Monitor 日志属性 |
说明 |
time |
TimeGenerated |
捕获事件日志时的时间戳 (UTC)。 |
location |
Location |
在其中访问 Azure Cache for Redis 实例的位置(区域)。 |
category |
不适用 |
可用日志类别:ConnectionEvents 。 |
resourceId |
_ResourceId |
为其启用了日志的 Azure Cache for Redis 资源。 |
operationName |
OperationName |
与日志记录关联的 Redis 操作。 |
properties |
不适用 |
下面的行中描述了此字段的内容。 |
eventEpochTime |
EventEpochTime |
UTC 事件发生时的 UNIX 时间戳(自 1970 年 1 月 1 日以来的秒数)。 可以使用日志分析工作区中的函数 unixtime_seconds_todatetime 将时间戳转换为日期时间格式。 |
clientIP |
ClientIP |
Redis 客户端 IP 地址。 如果使用 Azure 存储,IP 地址是 IPv4 或专用链接 IPv6 格式,具体取决于缓存类型。 如果使用 Log Analytics,则结果会始终采用 IPv4 格式,因为会提供单独的 IPv6 字段。 |
不适用 |
PrivateLinkIPv6 |
Redis 客户端专用链接 IPv6 地址(仅在同时使用专用链接和日志分析时发出)。 |
id |
ConnectionId |
Redis 分配的唯一连接 ID。 |
eventType |
EventType |
连接事件的类型(new_conn、auth 或 close_conn)。 |
eventStatus |
EventStatus |
身份验证请求的结果作为状态代码(仅适用于身份验证事件)。 |
注意
如果使用专用链接,则只会记录 IPv6 地址(除非你将数据流式传输到日志分析)。 可以通过查看 IPv6 地址中最后四个字节的数据,将 IPv6 地址转换为等效的 IPv4 地址。 例如,在专用链接 IPv6 地址“fd40:8913:31:6810:6c31:200:a01:104”中,十六进制的最后四个字节为“0a”、“01”、“01”和“04”。 (请注意,每一个冒号后的前导零省略。)这些前导零对应于十进制中的“10”、“1”、“1”和“4”,这为我们提供了 IPv4 地址“10.1.1.4”。
示例存储帐户日志
如果将日志发送到存储帐户,则连接事件的日志如下所示:
{
"time": "2023-01-24T10:00:02.3680050Z",
"resourceId": "/SUBSCRIPTIONS/ffff5f5f-aa6a-bb7b-cc8c-dddddd9d9d9d/RESOURCEGROUPS/TEST/PROVIDERS/MICROSOFT.CACHE/REDISENTERPRISE/AUDITING-SHOEBOX/DATABASES/DEFAULT",
"category": "ConnectionEvents",
"location": "westus",
"operationName": "Microsoft.Cache/redisEnterprise/databases/ConnectionEvents/Read",
"properties": {
"eventEpochTime": 1674554402,
"id": 6185063009002,
"clientIP": "20.228.16.39",
"eventType": "new_conn"
}
}
身份验证事件的日志如下所示:
{
"time": "2023-01-24T10:00:02.3680050Z",
"resourceId": "/SUBSCRIPTIONS/ffff5f5f-aa6a-bb7b-cc8c-dddddd9d9d9d/RESOURCEGROUPS/TEST/PROVIDERS/MICROSOFT.CACHE/REDISENTERPRISE/AUDITING-SHOEBOX/DATABASES/DEFAULT",
"category": "ConnectionEvents",
"location": "westus",
"operationName": "Microsoft.Cache/redisEnterprise/databases/ConnectionEvents/Read",
"properties": {
"eventEpochTime": 1674554402,
"id": 6185063009002,
"clientIP": "20.228.16.39",
"eventType": "auth",
"eventStatus": 8
}
}
断开连接事件的日志如下所示:
{
"time": "2023-01-24T10:00:03.3680050Z",
"resourceId": "/SUBSCRIPTIONS/ffff5f5f-aa6a-bb7b-cc8c-dddddd9d9d9d/RESOURCEGROUPS/TEST/PROVIDERS/MICROSOFT.CACHE/REDISENTERPRISE/AUDITING-SHOEBOX/DATABASES/DEFAULT",
"category": "ConnectionEvents",
"location": "westus",
"operationName": "Microsoft.Cache/redisEnterprise/databases/ConnectionEvents/Read",
"properties": {
"eventEpochTime": 1674554402,
"id": 6185063009002,
"clientIP": "20.228.16.39",
"eventType": "close_conn"
}
}
后续步骤
若要详细了解如何使用 Azure 门户、CLI 或 PowerShell 创建诊断设置,请参阅创建诊断设置以在 Azure 中收集平台日志和指标一文。