1. 程式人生 > >【Day48】Redis監控主要指標及採集方法

【Day48】Redis監控主要指標及採集方法

公司的Redis業務很多,Redis監控自然也是DB監控的一大模組,包括採集、展示、監控告警。本文主要介紹Redis監控的主要指標和採集方法。

  一、Redis監控系統邏輯

  1、DBA通過前臺頁面新增redis監控,填寫ip和埠,配置閾值、負責人等資訊

  2、前臺呼叫自動排程平臺介面將redis監控採集Agent傳送到目標機器上的固定資料夾,並新增crond,每分鐘執行(採集Agent包含採集程式和ip埠資訊檔案)

  3、redis監控Agent採集相關指標通過http介面上報到mysql伺服器(目標機器無法直接連線mysql)

  4、前臺讀取mysql資料進行展示

  5、解析程式每分鐘通過讀取配置資訊和Agent上報的資料進行解析併發送告警(Rtx/Wechat/Sms)給指定負責人

  二、採集指標和命令

  1、redis服務程序 ip-port

約定所有redis服務都必須以ip1(內網ip)來繫結,每個機器只有一個ip1,可以有多個埠,即多個redis例項。採集程式讀取ip埠資訊檔案來判斷有多少個例項
ps aux | grep -E "redis-server.*$port"
約定所有redis客戶端安裝標準路徑是
REDISPATH_CLI="/usr/local/redis/bin/redis-cli"
如果發現不是標準路徑會有 No such file or directory 的提示,則採集程式會在每天早上10點發送Rtx彈窗給DBA(DBA也可以根據前臺頁面圖表展示來判斷該採集器有無上報資料,無上報資料則可以上機檢視採集器日誌)

採集器使用下面的命令來採集redis例項的所有資訊,然後根據資訊篩選出需要的指標上報到mysql
$REDISPATH_CLI -h ${agentIp}
-p ${port} info > ${tmpFile} 2>&1
如果redis例項沒有繫結在ip1或者127.0.0.1上面則會提示 Connection refused

  2、連線客戶數 
grep "connected_clients:" ${tmpFile} | awk -F ":" '{print $2}'
  3、阻塞連線數 
    grep "blocked_clients:" ${tmpFile} | awk -F ":" '{print $2}'
  4、redis佔用記憶體,單位Byte轉成MB

    grep "used_memory:"
${tmpFile} | awk -F ":" '{print $2}' | awk '{printf "%.2f",$1/1024/1024}'
  5、記憶體峰值,單位Byte轉成MB
    grep "used_memory_peak:" ${tmpFile} | awk -F ":" '{print $2}' | awk '{printf "%.2f",$1/1024/1024}'
  6、主從角色
grep "role:" ${tmpFile} | awk -F ":" '{print $2}'   #  master(主),slave(從)
  7、master_link_status
    grep "master_link_status:" ${tmpFile} | awk -F ":" '{print $2}'   # up down
down:Master已經不可訪問了,Slave依然執行良好,並且保留有AOF與RDB檔案

  8、執行命令總數和qps

    grep "total_commands_processed:" ${tmpFile} | awk -F ":" '{print $2}'
計算qps需要計算兩次 total_commands_processed,然後除以時間差。邏輯是第一分鐘將total_commands_processed的值和當時採集該值的時間儲存到last.cache中,第二分鐘採集的時候獲取值和時間,和上次相減得到兩個差值相除即可。

  9、上報時間
    reportTime=`date +'%Y-%m-%d %H:%M:00'`
時間的秒數是0,方便前臺畫圖展示

  三、解析告警

分析上報的指標是否異常,根據reportTime判斷Agent心跳情況,將狀態和異常資訊存入mysql,傳送告警給相關負責人。資料庫分表如下:

  redisMonitor庫:配置表redisConf、當前狀態redisCurrentStatus、異常資訊表redisDisplay

  歷史庫按月分庫,按照ip分表,儲存redis採集器上報資料,
  Ex: redisStatus167872716
  四、前臺展示

  1、異常頁面

這裡寫圖片描述

    2、狀態頁面

這裡寫圖片描述