Redis监控实战:如何追踪访问特定数据库的客户端IP
个人名片
🎓作者简介:java领域优质创作者
🌐个人主页:码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站:www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?
- 专栏导航:
码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀
目录
- Redis监控实战:如何追踪访问特定数据库的客户端IP
Redis监控实战:如何追踪访问特定数据库的客户端IP
引言
在Redis运维和开发过程中,了解哪些客户端连接并访问了特定的数据库(如db0
)是一个常见的需求。例如,你可能需要排查异常访问、进行安全审计,或者优化资源分配。然而,Redis本身并不直接提供历史访问日志,因此我们需要借助一些内置命令和外部工具来实现这一目标。
本文将详细介绍如何查询访问Redis特定数据库(如db0
)的客户端IP,涵盖以下内容:
- Redis客户端查询方法(
CLIENT LIST
、MONITOR
) - 慢查询日志分析
- Redis 6.0+ 审计日志配置
- 网络层监控(tcpdump、防火墙日志)
- 自动化监控方案(Prometheus + Grafana)
1. Redis内置命令查询客户端IP
(1) CLIENT LIST
命令(推荐)
Redis提供了CLIENT LIST
命令,可以列出所有当前连接的客户端信息,包括:
addr
:客户端IP和端口db
:当前选择的数据库name
:客户端名称(如果有)idle
:空闲时间(秒)
基本用法
redis-cli CLIENT LIST
输出示例:
id=5 addr=192.168.1.100:52314 fd=8 name= age=15 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=clientid=6 addr=10.0.0.2:38429 fd=9 name= age=3 idle=3 flags=N db=1 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
筛选访问db0
的客户端
由于Redis本身不支持grep
,我们可以使用Shell管道:
redis-cli CLIENT LIST | grep \"db=0\"
或者更精确地提取IP:
redis-cli --raw CLIENT LIST | awk -F \' \' \'{for(i=1;i<=NF;i++){if($i~/^addr=/){addr=$i} if($i~/^db=/){db=$i}} if(db==\"db=0\"){print addr}}\'
输出:
addr=192.168.1.100:52314
(2) MONITOR
命令(调试用,慎用)
MONITOR
可以实时打印所有Redis命令,包括SELECT
操作,但对性能影响较大,仅适用于临时调试:
redis-cli MONITOR | grep \"select 0\"
输出示例:
1654321000.123456 [0 192.168.1.100:52314] \"SELECT\" \"0\"
注意:
MONITOR
会显著增加Redis的CPU负载,不建议在生产环境长期使用。
2. 慢查询日志分析
如果客户端执行了较慢的操作,Redis会记录到慢查询日志(需配置):
redis-cli SLOWLOG GET 10 # 获取最近10条慢查询
如果发现SELECT 0
相关的慢查询,可以结合CLIENT LIST
进一步分析。
3. Redis 6.0+ 审计日志
Redis 6.0 引入了审计日志功能,可以记录所有命令,包括SELECT
操作。
配置方法(redis.conf
)
# 启用审计日志audit-log-enabled yes# 日志文件路径audit-log-file /var/log/redis/audit.log# 记录所有命令audit-log-command all
重启Redis后,日志会记录类似:
SELECT 0 by client: 192.168.1.100:52314
筛选db0
访问记录
grep \"SELECT 0\" /var/log/redis/audit.log
4. 网络层监控
如果Redis本身没有足够日志,可以通过系统工具监控网络连接。
(1) tcpdump
抓包
sudo tcpdump -i eth0 port 6379 -A | grep \"SELECT 0\"
(2) 防火墙日志
例如,iptables
可以记录访问Redis的IP:
iptables -A INPUT -p tcp --dport 6379 -j LOG --log-prefix \"Redis-Access: \"
日志通常位于/var/log/syslog
或/var/log/messages
。
5. 自动化监控方案
Prometheus + Grafana + Redis Exporter
- 安装Redis Exporter
docker run -d --name redis_exporter -p 9121:9121 oliver006/redis_exporter
- 配置Prometheus
scrape_configs: - job_name: \'redis\' static_configs: - targets: [\'redis_exporter:9121\']
- Grafana Dashboard
- 导入Redis仪表盘(如ID 763)
- 监控
redis_connected_clients
和redis_command_calls
总结
CLIENT LIST
MONITOR
最佳实践建议:
- 短期调试:
CLIENT LIST
+MONITOR
- 长期监控:Redis审计日志 + Prometheus
- 安全审计:结合防火墙日志 + 网络抓包
希望本文能帮助你高效监控Redis数据库访问! 🚀