查詢?cè)L問Redis特定數(shù)據(jù)庫(kù)的客戶端IP的操作指南
引言
在Redis運(yùn)維和開發(fā)過程中,了解哪些客戶端連接并訪問了特定的數(shù)據(jù)庫(kù)(如db0)是一個(gè)常見的需求。例如,你可能需要排查異常訪問、進(jìn)行安全審計(jì),或者優(yōu)化資源分配。然而,Redis本身并不直接提供歷史訪問日志,因此我們需要借助一些內(nèi)置命令和外部工具來實(shí)現(xiàn)這一目標(biāo)。
本文將詳細(xì)介紹如何查詢?cè)L問Redis特定數(shù)據(jù)庫(kù)(如db0)的客戶端IP,涵蓋以下內(nèi)容:
- Redis客戶端查詢方法(
CLIENT LIST、MONITOR) - 慢查詢?nèi)罩痉治?/li>
- Redis 6.0+ 審計(jì)日志配置
- 網(wǎng)絡(luò)層監(jiān)控(tcpdump、防火墻日志)
- 自動(dòng)化監(jiān)控方案(Prometheus + Grafana)
1. Redis內(nèi)置命令查詢客戶端IP
(1) CLIENT LIST 命令(推薦)
Redis提供了CLIENT LIST命令,可以列出所有當(dāng)前連接的客戶端信息,包括:
addr:客戶端IP和端口db:當(dāng)前選擇的數(shù)據(jù)庫(kù)name:客戶端名稱(如果有)idle:空閑時(shí)間(秒)
基本用法
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 命令(調(diào)試用,慎用)
MONITOR 可以實(shí)時(shí)打印所有Redis命令,包括SELECT操作,但對(duì)性能影響較大,僅適用于臨時(shí)調(diào)試:
redis-cli MONITOR | grep "select 0"
輸出示例:
1654321000.123456 [0 192.168.1.100:52314] "SELECT" "0"
注意:MONITOR 會(huì)顯著增加Redis的CPU負(fù)載,不建議在生產(chǎn)環(huán)境長(zhǎng)期使用。
2. 慢查詢?nèi)罩痉治?/h2>
如果客戶端執(zhí)行了較慢的操作,Redis會(huì)記錄到慢查詢?nèi)罩荆ㄐ枧渲茫?/p>
redis-cli SLOWLOG GET 10 # 獲取最近10條慢查詢
如果發(fā)現(xiàn)SELECT 0相關(guān)的慢查詢,可以結(jié)合CLIENT LIST進(jìn)一步分析。
3. Redis 6.0+ 審計(jì)日志
Redis 6.0 引入了審計(jì)日志功能,可以記錄所有命令,包括SELECT操作。
配置方法(redis.conf)
# 啟用審計(jì)日志 audit-log-enabled yes # 日志文件路徑 audit-log-file /var/log/redis/audit.log # 記錄所有命令 audit-log-command all
重啟Redis后,日志會(huì)記錄類似:
SELECT 0 by client: 192.168.1.100:52314
篩選db0訪問記錄
grep "SELECT 0" /var/log/redis/audit.log
4. 網(wǎng)絡(luò)層監(jiān)控
如果Redis本身沒有足夠日志,可以通過系統(tǒng)工具監(jiān)控網(wǎng)絡(luò)連接。
(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. 自動(dòng)化監(jiān)控方案
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
- 導(dǎo)入Redis儀表盤(如ID 763)
- 監(jiān)控
redis_connected_clients和redis_command_calls
總結(jié)
| 方法 | 適用場(chǎng)景 | 優(yōu)點(diǎn) | 缺點(diǎn) |
|---|---|---|---|
| CLIENT LIST | 實(shí)時(shí)查詢當(dāng)前連接 | 簡(jiǎn)單直接 | 不記錄歷史 |
| MONITOR | 調(diào)試實(shí)時(shí)命令 | 完整記錄所有操作 | 性能影響大 |
| 慢查詢?nèi)罩?/td> | 分析慢操作 | 低開銷 | 僅記錄慢查詢 |
| 審計(jì)日志(Redis 6.0+) | 長(zhǎng)期審計(jì) | 完整記錄所有命令 | 需要額外存儲(chǔ) |
| 網(wǎng)絡(luò)監(jiān)控(tcpdump) | 深度排查 | 不依賴Redis | 需要root權(quán)限 |
最佳實(shí)踐建議:
- 短期調(diào)試:
CLIENT LIST+MONITOR - 長(zhǎng)期監(jiān)控:Redis審計(jì)日志 + Prometheus
- 安全審計(jì):結(jié)合防火墻日志 + 網(wǎng)絡(luò)抓包
希望本文能幫助你高效監(jiān)控Redis數(shù)據(jù)庫(kù)訪問!
以上就是查詢?cè)L問Redis特定數(shù)據(jù)庫(kù)的客戶端IP的操作指南的詳細(xì)內(nèi)容,更多關(guān)于Redis客戶端IP查詢?cè)L問的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Redis+Caffeine實(shí)現(xiàn)分布式二級(jí)緩存組件實(shí)戰(zhàn)教程
這篇文章主要介紹了Redis+Caffeine實(shí)現(xiàn)分布式二級(jí)緩存組件實(shí)戰(zhàn)教程,介紹了分布式二級(jí)緩存的優(yōu)勢(shì),使用組件的方法,通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Linux下安裝Redis 6.0.5的實(shí)現(xiàn)
本文詳細(xì)介紹了在Linux系統(tǒng)下安裝Redis 6.0.5的步驟,包括安裝準(zhǔn)備、編譯安裝、啟動(dòng)服務(wù)、設(shè)置密碼和配置文件修改等,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02
Redis禁用命令、危險(xiǎn)命令及規(guī)避方法
這篇文章主要介紹了Redis禁用命令、危險(xiǎn)命令及規(guī)避方法,本文介紹了個(gè)非常致命的兩個(gè)命令以及用配置文件禁用這些命令的方法,需要的朋友可以參考下2015-06-06
Redis大key多key拆分實(shí)現(xiàn)方法解析
這篇文章主要介紹了Redis大key多key拆分實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
基于Redis實(shí)現(xiàn)延時(shí)隊(duì)列的優(yōu)化方案小結(jié)
本文主要介紹了基于Redis實(shí)現(xiàn)延時(shí)隊(duì)列的優(yōu)化方案小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Redis消息隊(duì)列的三種實(shí)現(xiàn)方式
本文主要介紹了Redis消息隊(duì)列的三種實(shí)現(xiàn)方式,主要包括List實(shí)現(xiàn)消息隊(duì)列,PubSub消息隊(duì)列,Stream消息隊(duì)列,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12

