您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何用Elastic来诊断Redis Slowlog
## 前言
Redis的`slowlog`是排查性能问题的关键工具,但当集群规模扩大时,手动分析日志会变得低效。结合Elastic Stack(ELK)的日志收集、存储和可视化能力,可以构建高效的慢查询分析平台。本文将详细介绍如何实现这一过程。
---
## 一、Redis Slowlog基础
### 1.1 什么是Slowlog
Redis Slowlog记录执行时间超过阈值的命令,包含以下关键信息:
- **唯一ID**:自增的日志标识符
- **时间戳**:命令执行完成的时间
- **执行时长**:微秒级精度
- **命令详情**:包含参数(默认不记录敏感参数)
### 1.2 配置参数
```redis
# 配置文件示例
slowlog-log-slower-than 10000 # 阈值10ms(单位:微秒)
slowlog-max-len 128 # 最大记录条数
Redis实例 → Filebeat → Logstash → Elasticsearch → Kibana
{
"timestamp": 1620000000,
"duration": 15000,
"command": "GET user:12345:profile",
"client_ip": "10.0.0.1",
"client_name": "cart-service"
}
# 动态修改配置(无需重启)
redis-cli config set slowlog-log-slower-than 5000
redis-cli config set slowlog-max-len 500
redis-cli slowlog reset # 可选:清除历史记录
filebeat.inputs:
- type: log
paths:
- /var/log/redis/redis-slow.log
json.keys_under_root: true
json.add_error_key: true
output.logstash:
hosts: ["logstash:5044"]
input {
beats { port => 5044 }
}
filter {
grok {
match => { "message" => "\[%{INT:id}\] %{INT:timestamp} %{INT:duration} %{GREEDYDATA:command}" }
}
date {
match => ["timestamp", "UNIX"]
target => "@timestamp"
}
mutate {
convert => { "duration" => "integer" }
}
}
output {
elasticsearch {
hosts => ["http://es:9200"]
index => "redis-slowlog-%{+YYYY.MM.dd}"
}
}
PUT _template/redis-slowlog
{
"index_patterns": ["redis-slowlog-*"],
"settings": {
"number_of_shards": 2,
"analysis": {
"analyzer": {
"command_analyzer": {
"type": "custom",
"tokenizer": "pattern",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"duration": { "type": "long" },
"command": {
"type": "text",
"analyzer": "command_analyzer",
"fields": { "keyword": { "type": "keyword" } }
}
}
}
}
// 查询TOP10慢命令
GET redis-slowlog-*/_search
{
"size": 0,
"aggs": {
"slow_commands": {
"terms": { "field": "command.keyword", "size": 10 },
"aggs": { "avg_duration": { "avg": { "field": "duration" } } }
}
}
}
PUT _watcher/watch/slowlog_alert
{
"trigger": { "schedule": { "interval": "5m" } },
"input": {
"search": {
"request": {
"indices": ["redis-slowlog-*"],
"body": {
"query": { "range": { "duration": { "gte": 100000 } } }
}
}
}
},
"condition": { "compare": { "ctx.payload.hits.total.value": { "gt": 0 } } },
"actions": { "send_email": { ... } }
}
通过聚合分析发现HGETALL large:hash
频繁出现,结合memory usage
命令确认后,改用HSCAN
分批获取。
发现大量PIPELINE
中的MGET
超过100个key,优化为分批执行并添加本地缓存。
某INCR counter:20230801
命令持续出现在日志中,采用分片计数器counter:20230801:{1..10}
分散压力。
通过Elastic Stack实现的慢查询分析平台,运维团队可以实现: - 实时监控慢查询发生率 - 快速定位问题模式 - 量化优化效果(优化前后耗时对比)
建议每月生成《Redis慢查询分析报告》,持续跟踪系统健康度。完整配置示例可参考GitHub仓库:示例项目链接 “`
注:实际部署时需根据具体环境调整参数,生产环境建议添加TLS加密和访问控制。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。