前言
本文算是一篇how to文档,介绍如何利用zabbix监控redis(正好有同学问我,顺手写一篇)。 大致的过程是:
在zabbix创建redis host组以及对应的template
利用zabbix agent 收集并上传监控数据到zabbix server.
准备监控脚本
对于单机多实例的redis而言,需要先获取所有redis实例的port。
redis.port.discovery.py
import os import json res=os.popen("""sudo netstat -tlpn |grep redis-server|grep 0.0.0.0|awk '{print $4}'|awk -F: '{print $2}' """) ports = [] for port in res.readlines(): r = os.path.basename(port.strip()) ports += [{'{#PORT}':r}] print json.dumps({'data':ports},sort_keys=True,indent=1,separators=(',',':'))
该脚本有一定的限制,如果redis的 conf文件写死了bind ip ,获取redis端口的命令就不能运行了。
收集redis info信息脚本
/usr/local/bin/redis-cli -h 127.0.0.1 -a redis_passwd -p $1 info |grep $2 | cut -d : -f2
没有密码的情况
/usr/local/bin/redis-cli -h 127.0.0.1 -p $1 info |grep $2 | cut -d : -f2
配置zabbix_agent调用的配置文件
在路径/opt/zabbix/etc/zabbix_agentd.conf.d/(不同公司配置可能不同),配置文件 redis.conf
UserParameter=redis.port.discovery,/opt/zabbix/share/zabbix/scripts/redis.port.discovery.py UserParameter=redis.collect[*],/usr/local/bin/redis-cli -h 127.0.0.1 -p $1 info |grep $2|cut -d : -f2
或者使用具体的脚本来收集redis的统计信息。
UserParameter=redis.port.discovery,/opt/zabbix/share/zabbix/scripts/redis.port.discovery.py UserParameter=redis[*],(/opt/zabbix/share/zabbix/scripts/redis_stat.sh $1 > /dev/null; echo $?)
Note
其实我们可以自己编写脚本来收集redis相关的信息,计算内存命中率,get,set次数。
redis.port.discovery是发现规则,需要在模板里面用的。
配置zabbix
创建redis host group,并添加对应的redis机器
创建监控模板
可以从网上(文末会给出url)下载,然后在zabbix监控的网页选择configuration--> templates 导入。
a 需要注意的是模板的template的名称需要自己定义,trigger定义依赖template的名称
<template>redis_template</template> <name>redis_template</name>
b discovery_rule 的名称必须和zabbix_agent config文件配置的一致。
.... <discovery_rule> <name>cip-redis.port.discovery</name> .... <key>cip-redis.port.discovery</key> </discovery_rule>
绑定机器和监控模板。
最后
重启angent,检查监控输出。 在zabbix server服务器上执行如下命令
/opt/zabbix/bin/zabbix_get -s 被监控机器的ip -p zabbix监听的端口 -k key的名称 (比如 redis[6379,used_memory])
key的名称和zabbix_agent中配置的获取监控值的名称redis[*]有关。
可以结合grafna监控来配置监控项的图形展示,具体大家自己调研吧。
自己写了一个redis工具集放在github上面。
https://github.com/yangql/redis-tools
里面有redis监控模板和收集redis的统计信息脚本,有兴趣的朋友可以看看。
https://github.com/yangql/redis-tools/blob/master/zbx_redis_template.xml
https://github.com/yangql/redis-tools/blob/master/redis_stat.sh