最近在處理zabbix 監控,監控redis時發現官方並無提供相關的模板,本身參照以前mysql的監控改寫了一個。
主要支持 info命令下全部參數,自動發現有key的數據庫,並提供info中的參數數據
特色:較爲通用,代碼簡潔
須要設置zabbix agent 自定義腳本,具體設置方式不作說明,請百度
具體腳本以下:
check_redis.shmysql
#!/bin/bash # ------------------------------------------------------------------------------- # FileName: check_redis.sh # Revision: 1.0 # Date: 2019-3-21 # Author: xsj # Email: soft_xiang@qq.com # Description: # Notes: ~ # ------------------------------------------------------------------------------- # Copyright: 2019 (c) xsj # License: GPL REDISPATH='/usr/local/bin/redis-cli' HOST='127.0.0.1' PORT='6379' PASSWD='111111' REDIS_CMD="$REDISPATH -h $HOST -p $PORT -a $PASSWD " # 參數是否正確 if [[ $# -gt 2 || $# -lt 1 ]];then echo "arg error!"; exit 1; fi if [[ $# == 1 ]];then case $1 in Discovery) array=(`$REDIS_CMD info 2>/dev/null|grep ":keys="|awk -F: '{ print $1}'`) length=${#array[@]} printf "{\n" printf '\t'"\"data\":[" for ((i=0;i<$length;i++)) do printf '\n\t\t{' printf "\"{#DB}\":\"${array[$i]}\"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf "\n\t]\n" printf "}\n" ;; Ping) $REDIS_CMD ping|grep -c PONG ;; Status_*) $REDIS_CMD info 2>/dev/null| grep "${1#*Status_}"|awk 'NR==1'|awk -F: '{print $NF}' ;; *) echo "Usage:$0 (Ping|Status_key);其中 Status_ key爲info中的key,注意大小寫" ;; esac elif [[ $# == 2 ]];then param1="${1#*Status_}"; case $2 in keys) $REDIS_CMD info 2>/dev/null |grep -w "$param1"|grep -w "$2"| awk -F'=|,' '{print $2}' ;; expires) $REDIS_CMD info 2>/dev/null |grep -w "$param1"|grep -w "$2"| awk -F'=|,' '{print $4}' ;; avg_ttl) $REDIS_CMD info 2>/dev/null |grep -w "$param1"|grep -w "$2"| awk -F'=|,' '{print $6}' ;; *) echo "Usage:$0{db0 keys|db0 expires|db0 avg_ttl}" ;; esac fi
status_redis.confweb
#redis db自動發現 UserParameter=redis.discovery,/etc/zabbix/scripts/check_redis.sh Discovery #監控redis狀態,咱們能夠根據這個參數對應的監控項建立redis狀態觸發器。 UserParameter=redis.ping,/etc/zabbix/scripts/check_redis.sh Ping #狀態信息 UserParameter=redis.status[*],/etc/zabbix/scripts/check_redis.sh Status_$1 $2
web管理端配置模板redis
只設置了部分,全部info 下的參數都支持sql