引言
在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=client id=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 | 调试实时命令 | 完整记录所有操作 | 性能影响大 |
慢查询日志 | 分析慢操作 | 低开销 | 仅记录慢查询 |
审计日志(redis 6.0+) | 长期审计 | 完整记录所有命令 | 需要额外存储 |
网络监控(tcpdump) | 深度排查 | 不依赖redis | 需要root权限 |
最佳实践建议:
- 短期调试:
client list
+monitor
- 长期监控:redis审计日志 + prometheus
- 安全审计:结合防火墙日志 + 网络抓包
希望本文能帮助你高效监控redis数据库访问!
以上就是查询访问redis特定数据库的客户端ip的操作指南的详细内容,更多关于redis客户端ip查询访问的资料请关注代码网其它相关文章!
发表评论