Redis監控技巧(轉)

來自:http://blog.nosqlfan.com/html/4166.htmlhtml

Redis 監控最直接的方法固然就是使用系統提供的 info 命令來作了,你只須要執行下面一條命令,就能得到 Redis 系統的狀態報告。linux

redis-cli info

內存使用

若是 Redis 使用的內存超出了可用的物理內存大小,那麼 Redis 極可能系統會被 OOM Killer殺掉。針對這一點,你能夠經過 info 命令對 used_memory 和 used_memory_peak 進行監控,爲使用內存量設定閾值,並設定相應的報警機制。固然,報警只是手段,重要的是你得預先計劃好,當內存使用量過大後,你應該作些什麼,是清除一些沒用的冷數據,仍是把 Redis 遷移到更強大的機器上去。git

持久化

若是由於你的機器或 Redis 自己的問題致使 Redis 崩潰了,那麼你惟一的救命稻草可能就是 dump 出來的 rdb文件了,因此,對 Redis dump 文件進行監控也是很重要的。你能夠經過對rdb_last_save_time 進行監控,瞭解你最近一次 dump 數據操做的時間,還能夠經過對rdb_changes_since_last_save 進行監控來知道若是這時候出現故障,你會丟失多少數據。github

主從複製

若是你設置了主從複製模式,那麼你最好對複製的狀況是否正常作一些監控,主要是對 info 輸出中的 master_link_status 進行監控,若是這個值是 up,那麼說明同步正常,若是是 down,那麼你就要注意一下輸出的其它一些診斷信息了。好比下面這些:web

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 性能

當 Redis 持久化數據到磁盤上時,它會進行一次 fork 操做,經過 fork 對內存的 copy on write 機制最廉價的實現內存鏡像。可是雖然內存是 copy on write 的,可是虛擬內存表是在 fork 的瞬間就須要分配,因此 fork 會形成主線程短期的卡頓(中止全部讀寫操做),這個卡頓時間和當前 Redis 的內存使用量有關。一般 GB 量級的 Redis 進行 fork 操做的時間在毫秒級。你能夠經過對 info 輸出的 latest_fork_usec 進行監控來了解最近一次 fork 操做致使了多少時間的卡頓。redis

配置一致

Redis 支持使用 CONFIG SET 操做來實現運行實的配置修改,這很方便,但同時也會致使一個問題。就是經過這個命令動態修改的配置,是不會同步到你的配置文件中去的。因此當你由於某些緣由重啓 Redis 時,你使用 CONFIG SET 作的配置修改就會丟失掉,因此咱們最好保證在每次使用 CONFIG SET 修改配置時,也把配置文件一塊兒相應地改掉。爲了防止人爲的失誤,因此咱們最好對配置進行監控,使用 CONFIG GET 命令來獲取當前運行時的配置,並與 redis.conf 中的配置值進行對比,若是發現兩邊對不上,就啓動報警。sql

慢日誌

Redis 提供了 SLOWLOG 指令來獲取最近的慢日誌,Redis 的慢日誌是直接存在內存中的,因此它的慢日誌開銷並不大,在實際應用中,咱們經過 crontab 任務執行 SLOWLOG 命令來獲取慢日誌,而後將慢日誌存到文件中,並用 Kibana 生成實時的性能圖表來實現性能監控。數據庫

值得一提的是,Redis 的慢日誌記錄的時間,僅僅包括 Redis 自身對一條命令的執行時間,不包括 IO 的時間,好比接收客戶端數據和發送客戶端數據這些時間。另外,Redis 的慢日誌和其它數據庫的慢日誌有一點不一樣,其它數據庫偶爾出現 100ms 的慢日誌可能都比較正常,由於通常數據庫都是多線程併發執行,某個線程執行某個命令的性能可能並不能表明總體性能,可是對 Redis多線程

來講,它是單線程的,一旦出現慢日誌,可能就須要立刻獲得重視,最好去查一下具體是什麼緣由了。併發

監控服務

-Sentinel

Sentinel 是 Redis 自帶的工具,它能夠對 Redis 主從複製進行監控,並實現主掛掉以後的自動故障轉移。在轉移的過程當中,它還能夠被配置去執行一個用戶自定義的腳本,在腳本中咱們就可以實現報警通知等功能。

-Redis Live

Redis Live 是一個更通用的 Redis 監控方案,它的原理是定時在 Redis 上執行 MONITOR 命令,來獲取當前 Redis 當前正在執行的命令,並經過統計分析,生成web頁面的可視化分析報表。

-Redis Faina

Redis Faina 是由著名的圖片分享應用 instagram 開發的 Redis 監控服務,其原理和 Redis Live 相似,都是對經過 MONITOR 來作的。

數據分佈

弄清 Redis 中數據存儲分佈是一件很難的是,好比你想知道哪類型的 key 值佔用內存最多。下面是一些工具,能夠幫助你對 Redis 的數據集進行分析。

-Redis-sampler

Redis-sampler 是 Redis 做者開發的工具,它經過採樣的方法,可以讓你瞭解到當前

Redis 中的數據的大體類型,數據及分佈情況。

-Redis-audit

Redis-audit 是一個腳本,經過它,咱們能夠知道每一類 key 對內存的使用量。它能夠提供的數據有:某一類 key 值的訪問頻率如何,有多少值設置了過時時間,某一類 key 值使用內存的大小,這很方便讓咱們能排查哪些 key 不經常使用或者壓根不用。

-Redis-rdb-tools

Redis-rdb-tools

跟 Redis-audit 功能相似,不一樣的是它是經過對 rdb 文件進行分析來取得統計數據的。

相關文章
相關標籤/搜索