如何在 ElastiCache for Redis 缓存群集中开启 Redis 慢日志?

上次更新日期:2022 年 6 月 24 日

我想在 ElastiCache for Redis 缓存群集中开启 Redis 慢日志。我该如何操作?

简短描述

Redis 慢日志功能记录超过指定时间段的查询。慢日志提供了一个选项,用于记录对 Amazon CloudWatch 或 Amazon Kinesis Data Firehose 的慢查询。Redis 慢日志是调试和跟踪 Redis 数据库的好工具,尤其是在您遇到高延迟和/或 CPU 使用率较高的情况下。

当命令超出 slowlog-log-slower-than 参数设置的执行时间时,将向慢日志中添加一个新条目。每个日志条目都将以 JSON 或文本格式传输到指定的目的地(CloudWatch 或 Kineses)。

以下是每种格式的示例:

JSON

{
    "CacheClusterId": "logslowxxxxmsxj",
    "CacheNodeId": "0001",
    "Id": 296,
    "Timestamp": 1605631822,
    "Duration (us)": 0,
    "Command": "GET ... (1 more arguments)",
    "ClientAddress": "192.168.12.104:55452",
    "ClientName": "logslowxxxxmsxj##"
}

文本

logslowxxxxmsxj,0001,1605631822,30,GET ... (1 more arguments),192.168.12.104:55452,logslowxxxxmsxj##

解决方法

先决条件

Redis 慢日志需要 Redis 引擎版本 6.0 及更高版本。如果您的引擎版本低于 6.0,可以使用 slowlog get 128 命令手动检索慢日志。每个节点都有自己的慢日志。因此,您必须从集群中的每个节点收集日志。

在集群创建或修改期间开启慢日志功能需要获得发布到 CloudWatch 或 Kinesis Firehose 的权限。通过创建 Identify and Access Management 策略将其附加到负责用户,使用以下权限:

Amazon CloudWatch 权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:CreateLogDelivery",
        "logs:GetLogDelivery",
        "logs:UpdateLogDelivery",
        "logs:DeleteLogDelivery",
        "logs:ListLogDeliveries"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow",
      "Sid": "ElastiCacheLogging"
    },
    {
      "Sid": "ElastiCacheLoggingCWL",
      "Action": [
        "logs:PutResourcePolicy",
        "logs:DescribeResourcePolicies",
        "logs:DescribeLogGroups"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    }
  ]
}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:CreateLogDelivery",
        "logs:GetLogDelivery",
        "logs:UpdateLogDelivery",
        "logs:DeleteLogDelivery",
        "logs:ListLogDeliveries"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow",
      "Sid": "ElastiCacheLogging"
    },
    {
      "Sid": "ElastiCacheLoggingFHSLR",
      "Action": [
        "iam:CreateServiceLinkedRole"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Sid": "ElastiCacheLoggingFH",
      "Action": [
        "firehose:TagDeliveryStream"
      ],
      "Resource": "Amazon Kinesis Data Firehose delivery stream ARN",
      "Effect": "Allow"
    }
  ]
}

在您的 ElastiCache 集群中开启 Redis 慢日志

满足先决条件后,您可以在创建集群或修改现有集群时开启慢日志。

有关从 AWS 管理控制台开启 Redis 慢日志的说明,请参阅使用控制台指定日志传输

慢日志内容

选择日志目的地后,当查询超过指定的时间范围时,该事件将记录到日志目的地。每个日志事件都包含以下内容:

  • CacheClusterId:缓存群集的 ID。
  • CacheNodeId:缓存节点的 ID。
  • Id:每个慢日志条目的唯一渐进式标识符。
  • 时间戳:处理记录的命令时的 Unix 时间戳。
  • 持续时间:执行该事件所需的时间(以微秒为单位)。
  • 命令:客户端使用的命令。例如,设置 foo bar,其中 foo 是键,bar 是值。ElastiCache for Redis 将实际的键名称和值替换为(另外 2 个参数),以避免暴露敏感数据。
  • ClientAddress:客户端 IP 地址和端口。
  • ClientName:如果通过 CLIENT SETNAME 命令设置,则为客户端名称。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?