我想在 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"
}
]
}
Amazon Kinesis Data Firehose 权限:
{
"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 命令设置,则为客户端名称。