Redis監(jiān)控技巧總結(jié)

Redis 監(jiān)控最直接的方法當(dāng)然就是使用系統(tǒng)提供的 info 命令來(lái)做了,你只需要執(zhí)行下面一條命令,就能獲得 Redis 系統(tǒng)的狀態(tài)報(bào)告。
redis-cli info
內(nèi)存使用
如果 Redis 使用的內(nèi)存超出了可用的物理內(nèi)存大小,那么 Redis 很可能系統(tǒng)會(huì)被OOM Killer殺掉。針對(duì)這一點(diǎn),你可以通過(guò) info 命令對(duì)used_memory和used_memory_peak進(jìn)行監(jiān)控,為使用內(nèi)存量設(shè)定閥值,并設(shè)定相應(yīng)的報(bào)警機(jī)制。當(dāng)然,報(bào)警只是手段,重要的是你得預(yù)先計(jì)劃好,當(dāng)內(nèi)存使用量過(guò)大后,你應(yīng)該做些什么,是清除一些沒(méi)用的冷數(shù)據(jù),還是把 Redis 遷移到更強(qiáng)大的機(jī)器上去。
持久化
如果因?yàn)槟愕臋C(jī)器或 Redis 本身的問(wèn)題導(dǎo)致 Redis 崩潰了,那么你唯一的救命稻草可能就是 dump 出來(lái)的 rdb文件了,所以,對(duì) Redis dump 文件進(jìn)行監(jiān)控也是很重要的。你可以通過(guò)對(duì)rdb_last_save_time進(jìn)行監(jiān)控,了解你最近一次 dump 數(shù)據(jù)操作的時(shí)間,還可以通過(guò)對(duì)rdb_changes_since_last_save進(jìn)行監(jiān)控來(lái)知識(shí)如果這時(shí)候出現(xiàn)故障,你會(huì)丟失多少數(shù)據(jù)。
主從復(fù)制
如果你設(shè)置了主從復(fù)制模式,那么你最好對(duì)復(fù)制的情況是否正常做一些監(jiān)控,主要是對(duì) info 輸出中的master_link_status進(jìn)行監(jiān)控,如果這個(gè)值是 up,那么說(shuō)明同步正常,如果是 down,那么你就要注意一下輸出的其它一些診斷信息了。比如下面這些:
role:slave
master_host:192.168.1.128
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
master_link_down_since_seconds:1356900595
Fork 性能
當(dāng) Redis 持久化數(shù)據(jù)到磁盤(pán)上時(shí),它會(huì)進(jìn)行一次 fork 操作,通過(guò) fork 對(duì)內(nèi)存的 copy on write 機(jī)制最廉價(jià)的實(shí)現(xiàn)內(nèi)存鏡像。但是雖然內(nèi)存是 copy on write 的,但是虛擬內(nèi)存表是在 fork 的瞬間就需要分配,所以 fork 會(huì)造成主線程短時(shí)間的卡頓(停止所有讀寫(xiě)操作),這個(gè)卡頓時(shí)間和當(dāng)前 Redis 的內(nèi)存使用量有關(guān)。通常 GB 量級(jí)的 Redis 進(jìn)行 fork 操作的時(shí)間在毫秒級(jí)。你可以通過(guò)對(duì) info 輸出的latest_fork_usec進(jìn)行監(jiān)控來(lái)了解最近一次 fork 操作導(dǎo)致了多少時(shí)間的卡頓。
配置一致
Redis 支持使用 CONFIG SET操作來(lái)實(shí)現(xiàn)運(yùn)行實(shí)的配置修改,這很方便,但同時(shí)也會(huì)導(dǎo)致一個(gè)問(wèn)題。就是通過(guò)這個(gè)命令動(dòng)態(tài)修改的配置,是不會(huì)同步到你的配置文件中去的。所以當(dāng)你因?yàn)槟承┰蛑貑?Redis 時(shí),你使用 CONFIG SET 做的配置修改就會(huì)丟失掉,所以我們最好保證在每次使用 CONFIG SET 修改配置時(shí),也把配置文件一起相應(yīng)地改掉。為了防止人為的失誤,所以我們最好對(duì)配置進(jìn)行監(jiān)控,使用CONFIG GET命令來(lái)獲取當(dāng)前運(yùn)行時(shí)的配置,并與 redis.conf 中的配置值進(jìn)行對(duì)比,如果發(fā)現(xiàn)兩邊對(duì)不上,就啟動(dòng)報(bào)警。
慢日志
Redis 提供了SLOWLOG指令來(lái)獲取最近的慢日志,Redis 的慢日志是直接存在內(nèi)存中的,所以它的慢日志開(kāi)銷并不大,在實(shí)際應(yīng)用中,我們通過(guò) crontab 任務(wù)執(zhí)行 SLOWLOG 命令來(lái)獲取慢日志,然后將慢日志存到文件中,并用Kibana生成實(shí)時(shí)的性能圖表來(lái)實(shí)現(xiàn)性能監(jiān)控。
值得一提的是,Redis 的慢日志記錄的時(shí)間,僅僅包括 Redis 自身對(duì)一條命令的執(zhí)行時(shí)間,不包括 IO 的時(shí)間,比如接收客戶端數(shù)據(jù)和發(fā)送客戶端數(shù)據(jù)這些時(shí)間。另外,Redis 的慢日志和其它數(shù)據(jù)庫(kù)的慢日志有一點(diǎn)不同,其它數(shù)據(jù)庫(kù)偶爾出現(xiàn) 100ms 的慢日志可能都比較正常,因?yàn)橐话銛?shù)據(jù)庫(kù)都是多線程并發(fā)執(zhí)行,某個(gè)線程執(zhí)行某個(gè)命令的性能可能并不能代表整體性能,但是對(duì) Redis 來(lái)說(shuō),它是單線程的,一旦出現(xiàn)慢日志,可能就需要馬上得到重視,最好去查一下具體是什么原因了。
監(jiān)控服務(wù)
-Sentinel
Sentinel是 Redis 自帶的工具,它可以對(duì) Redis 主從復(fù)制進(jìn)行監(jiān)控,并實(shí)現(xiàn)主掛掉之后的自動(dòng)故障轉(zhuǎn)移。在轉(zhuǎn)移的過(guò)程中,它還可以被配置去執(zhí)行一個(gè)用戶自定義的腳本,在腳本中我們就能夠?qū)崿F(xiàn)報(bào)警通知等功能。
-Redis Live
Redis Live是一個(gè)更通用的 Redis 監(jiān)控方案,它的原理是定時(shí)在 Redis 上執(zhí)行MONITOR命令,來(lái)獲取當(dāng)前 Redis 當(dāng)前正在執(zhí)行的命令,并通過(guò)統(tǒng)計(jì)分析,生成web頁(yè)面的可視化分析報(bào)表。
-Redis Faina
Redis Faina是由著名的圖片分享應(yīng)用 instagram 開(kāi)發(fā)的 Redis 監(jiān)控服務(wù),其原理和 Redis Live 類似,都是對(duì)通過(guò)MONITOR來(lái)做的。
數(shù)據(jù)分布
弄清 Redis 中數(shù)據(jù)存儲(chǔ)分布是一件很難的是,比如你想知道哪類型的 key 值占用內(nèi)存最多。下面是一些工具,可以幫助你對(duì) Redis 的數(shù)據(jù)集進(jìn)行分析。
-Redis-sampler
Redis-sampler是 Redis 作者開(kāi)發(fā)的工具,它通過(guò)采用的方法,能夠讓你了解到當(dāng)前 Redis 中的數(shù)據(jù)的大致類型,數(shù)據(jù)及分布狀況。
-Redis-audit
Redis-audit是一個(gè)腳本,通過(guò)它,我們可以知道每一類 key 對(duì)內(nèi)存的使用量。它可以提供的數(shù)據(jù)有:某一類 key 值的訪問(wèn)頻率如何,有多少值設(shè)置了過(guò)期時(shí)間,某一類 key 值使用內(nèi)存的大小,這很方便讓我們能排查哪些 key 不常用或者壓根不用。
-Redis-rdb-tools
Redis-rdb-tools跟 Redis-audit 功能類似,不同的是它是通過(guò)對(duì) rdb 文件進(jìn)行分析來(lái)取得統(tǒng)計(jì)數(shù)據(jù)的。
原文鏈接:Redis Masterclass – Part 2, Monitoring
相關(guān)文章
Fedora Linux 42 穩(wěn)定版發(fā)布: 帶來(lái)大量新功能和軟件更新
Fedora 42昨日發(fā)布,這是 Red Hat 贊助開(kāi)發(fā)的杰出前沿 Linux 發(fā)行版的最新版,包含大量新功能和軟件更新,使其成為 2025 年上半年發(fā)布的一款出色的 Linux 操作系統(tǒng)之一,內(nèi)2025-04-16如何在Linux查看硬盤(pán)信息? 查看Linux硬盤(pán)大小類型和硬件信息的5種方法
使用Linux系統(tǒng)的過(guò)程中,查看和了解硬盤(pán)信息是非常重要的工作,尤其是對(duì)于系統(tǒng)管理員而言,那么在Linux系統(tǒng)中如何查看硬盤(pán)信息?以下是具體內(nèi)容介紹2025-03-12如何在 Linux 中查看 CPU 詳細(xì)信息? 3招輕松查看CPU型號(hào)、核心數(shù)和溫度
在日常運(yùn)維工作中,獲取 CPU 信息是系統(tǒng)運(yùn)維管理員常見(jiàn)的工作內(nèi)容,無(wú)論是為了性能調(diào)優(yōu)、硬件升級(jí)還是僅僅滿足好奇心2025-03-11什么是 Arch Linux? 獨(dú)樹(shù)一幟的Arch Linux發(fā)行版分析
Arch Linux是為簡(jiǎn)化,優(yōu)化,現(xiàn)代化,實(shí)用主義,用戶中心和多功能性而創(chuàng)建Linux發(fā)行版,究竟是什么讓 Arch 與眾不同?下面我們就來(lái)簡(jiǎn)要解讀2025-02-19如何在Linux環(huán)境下制作 Win11裝機(jī)U盤(pán)?
一直用的linux辦公,想要將筆記本電腦從 Linux 系統(tǒng)切換回 Windows 11,我們可以制作一個(gè)win11裝機(jī)u盤(pán),詳細(xì)如下2025-02-17Rsnapshot怎么用? 基于Rsync的強(qiáng)大Linux備份工具使用指南
Rsnapshot 不僅可以備份本地文件,還能通過(guò) SSH 備份遠(yuǎn)程文件,接下來(lái)詳細(xì)介紹如何安裝、配置和使用 Rsnapshot,包括創(chuàng)建每小時(shí)、每天、每周和每月的本地備份,以及如何進(jìn)2025-02-06Linux Kernel 6.13發(fā)布:附更新內(nèi)容及新特性解讀
Linux 內(nèi)核 6.13 正式發(fā)布,新版本引入了惰性搶占支持,簡(jiǎn)化內(nèi)核搶占邏輯,通過(guò)減少與調(diào)度器相關(guān)的調(diào)用次數(shù),讓內(nèi)核在運(yùn)行時(shí)表現(xiàn)更優(yōu),從而提高效率2025-01-23五大特性引領(lǐng)創(chuàng)新! 深度操作系統(tǒng) deepin 25 Preview預(yù)覽版發(fā)布
今日,深度操作系統(tǒng)正式推出deepin 25 Preview版本,該版本集成了五大核心特性:磐石系統(tǒng)、全新DDE、Treeland窗口合成器、AI For OS以及Distrobox子系統(tǒng)2025-01-18Linux Mint Xia 22.1重磅發(fā)布: 重要更新一覽
Beta 版 Linux Mint“Xia” 22.1 發(fā)布,新版本基于 Ubuntu 24.04,內(nèi)核版本為 Linux 6.8,這次更新帶來(lái)了諸多優(yōu)化和改進(jìn),進(jìn)一步鞏固了 Mint 在 Linux 桌面操作系統(tǒng)領(lǐng)域的2025-01-16LinuxMint怎么安裝? Linux Mint22下載安裝圖文教程
Linux Mint22發(fā)布以后,有很多新功能,很多朋友想要下載并安裝,該怎么操作呢?下面我們就來(lái)看看詳細(xì)安裝指南2025-01-16