公司的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、狀態頁面
原創文章,轉載請備注原文地址 http://www.cnblogs.com/lxmhhy/p/6034549.html
知識交流討論請加qq:1130010617。謝謝合作。
http://xxxxxx/Linuxjc/1170745.html TechArticle