zabbix自动发现监控redis数据库与自动发现mongo,mysql的思路差很少。此次汇总完就把模板,脚本上传到git上。若是公司使用的redis都是6379端口的话,那么仍是建议建立一套模板,而后连接到各个服务器便可。若是公司的redis使用的端口比较多,各个都不同,那仍是自动发现并监控redis比较方便。仍是同样,先来看下监控的效果图:python
上述图形是使用zabbix的筛选功能汇总在一块儿的图片。监控redis的客户端链接数,使用的内存,实际使用的内存和redis的内存碎片化状况。mysql
下面来说讲自动发现redis的实现,首先,仍是先看下redis自动发现的配置:git
探索规则配置完后,一样的在zabbix agentd端须要添加以下配置而后重启zabbix_agentd,配置以下:redis
UserParameter=redis.discover,python /usr/local/zabbix/discover_redis.pysql
其中/usr/local/zabbix/discover_redis.py自动发现的脚本内容以下 :数据库
#coding:utf-8 import json import commands (status, output) = commands.getstatusoutput('''sudo netstat -tlnp|grep 'redis-server'|awk '{print $4}'|awk -F':' '{print $(NF)}'|sort -u''') outputs = output.split('\n') ports = [] for port in outputs: ports += [{'{#REDISPORT}': port}] print json.dumps({'data':ports},sort_keys=True,indent=4)
一样的,仍是使用netstat发现正在监听的端口,visudo的权限也是须要加入netstat的权限。visudo添加以下:json
zabbix ALL= NOPASSWD: /bin/netstat
Defaults:zabbix !requirettybash
探索完端口后,zabbix server就会以端口为参数向zabbix agentd获取数据,其中项目原型配置以下:服务器
其中redis.status的键值须要在zabbix agentd客户端进行配置,配置以下:
UserParameter=redis.status[*],sh /usr/local/zabbix/check_redis.sh -k $1 -p $2 (若是有密码的话,加个-P参数,例如-P 'xxxx')ui
获取redis数据的/usr/local/zabbix/check_redis.sh脚本以下,其中-k表示获取redis info的哪一个值,-p表示端口,若是redis有密码的话,-P参数也须要传入。
#!/bin/sh while getopts "p:k:P:" opt do case $opt in p ) redis_port=$OPTARG;; k ) info_key=$OPTARG;; P ) redis_passwd=$OPTARG;; ? ) echo 'parameter is wrong!' exit 1;; esac done if [ ! "${redis_port}" ] || [ ! "${info_key}" ];then echo "parameter is null" exit 1 fi if [ "${redis_passwd}" ];then result=`/usr/local/bin/redis-cli -a ${redis_passwd} -p ${redis_port} info|grep "${info_key}:"|cut -d: -f2` else result=`/usr/local/bin/redis-cli -p ${redis_port} info|grep "${info_key}:"|cut -d: -f2` fi echo $result
经过以上的配置,就能实现自动发现并监控redis了,监控完把数据添加到筛选里面,就能获得如图1的那张数据图。
Zabbix实战教程:https://edu.51cto.com/sd/36433