Zabbix3.4通过shell脚本监控redis集群
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,为了避免单点故障,生产环境中redis升级为集群模式,需要对redis集群进行监控,一旦有节点出现故障便触发报警。Redis有自带的redis-cli客户端,通过cluster info命令能查询到集
千家信息网最后更新 2025年12月02日Zabbix3.4通过shell脚本监控redis集群
为了避免单点故障,生产环境中redis升级为集群模式,需要对redis集群进行监控,一旦有节点出现故障便触发报警。Redis有自带的redis-cli客户端,通过cluster info命令能查询到集群的运行情况,我们可以写个shell脚本,通过zabbix来调用这个脚本实现集群的监控。
一、cluster info命令的使用
命令格式:
redis-cli -h [hostname] -p [port] -a [password] cluster info1、查询集群运行情况(其中一个master节点即可)
/data/redis/bin/redis-cli -h xxx.xxx.xxx.xxx -a 'password' -p 7001 cluster info
2、查询集群运行状态,1为正常,0为故障
/data/redis/bin/redis-cli -h xxx.xxx.xxx.xxx -a 'password' -p 7001 cluster info | grep "cluster_state"/data/redis/bin/redis-cli -h xxx.xxx.xxx.xxx -a 'password' -p 7001 cluster info | grep -w "cluster_state" | awk -F':' '{print $2}'|grep -c "ok"
3、查询集群已知节点数量
/data/redis/bin/redis-cli -h xxx.xxx.xxx.xxx -a 'password' -p 7001 cluster info | grep -w "cluster_known_nodes" | awk -F':' '{print $2}'二、创建监控脚本
vim /etc/zabbix/zabbix_agentd.d/redis_cluster.sh#!/bin/bashREDISCLI="/data/redis/bin/redis-cli"HOST="xxx.xxx.xxx.xxx"PORT=7001PASS="password"if [[ $# == 1 ]];then case $1 in cluster_state) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_state" | awk -F':' '{print $2}' | grep -c "ok"` echo $result ;; cluster_slots_assigned) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_slots_assigned" | awk -F':' '{print $2}'` echo $result ;; cluster_slots_ok) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_slots_ok" | awk -F':' '{print $2}'` echo $result ;; cluster_slots_pfail) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_slots_pfail" | awk -F':' '{print $2}'` echo $result ;; cluster_slots_fail) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_slots_fail" | awk -F':' '{print $2}'` echo $result ;; cluster_known_nodes) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_known_nodes" | awk -F':' '{print $2}'` echo $result ;; cluster_size) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_size" | awk -F':' '{print $2}'` echo $result ;; cluster_current_epoch) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_current_epoch" | awk -F':' '{print $2}'` echo $result ;; cluster_my_epoch) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_my_epoch" | awk -F':' '{print $2}'` echo $result ;; cluster_stats_messages_ping_sent) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_stats_messages_ping_sent" | awk -F':' '{print $2}'` echo $result ;; cluster_stats_messages_pong_sent) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_stats_messages_pong_sent" | awk -F':' '{print $2}'` echo $result ;; cluster_stats_messages_sent) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_stats_messages_sent" | awk -F':' '{print $2}'` echo $result ;; cluster_stats_messages_ping_received) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_stats_messages_ping_received" | awk -F':' '{print $2}'` echo $result ;; cluster_stats_messages_pong_received) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_stats_messages_pong_received" | awk -F':' '{print $2}'` echo $result ;; cluster_stats_messages_meet_received) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_stats_messages_meet_received" | awk -F':' '{print $2}'` echo $result ;; cluster_stats_messages_received) result=`$REDISCLI -h $HOST -a $PASS -p $PORT cluster info 2>/dev/null | grep -w "cluster_stats_messages_received" | awk -F':' '{print $2}'` echo $result ;; *) echo -e "\033[33mUsage: $0 {cluster_state|cluster_slots_assigned|cluster_slots_ok|cluster_slots_pfail|cluster_slots_fail|cluster_known_nodes|cluster size|cluster current epoch|cluster my epoch|cluster_stats_messages_ping_sent|cluster_stats_messages_pong_sent|cluster_stats_messages_sent|cluster_stats_messages_ping_received|cluster_stats_messages_pong_received|cluster_stats_messages_meet_received|cluster_stats_messages_received}\033[0m" ;; esacfi2、赋予脚本可执行权限
chmod +x /etc/zabbix/zabbix_agentd.d/redis_cluster.sh3、脚本测试
查看redis集群节点数量
/etc/zabbix/zabbix_agentd.d/redis_cluster.sh cluster_known_nodes三、创建redis集群监控配置文件
1、编写redis监控配置文件
vim /etc/zabbix/zabbix_agentd.d/redis.confUserParameter=Redis.Cluster[*],/etc/zabbix/zabbix_agentd.d/redis_cluster.sh $12、重启zabbix-agent
systemctl restart zabbix-agent3、在zabbix server端测试
zabbix_get -s xxx.xxx.xxx.xxx -p 10050 -k "Redis.Cluster[cluster_slots_ok]"四、创建并导入监控模板
1、创建监控模板文件
注:此模板报警阀值设置为cluster current epoch < 6、cluster known nodes < 6和clusterstate不是ok
redis_cluster_templates.xml文件内容如下
3.4 2019-12-06T05:43:56Z Templates Template Redis Cluster Template Redis Cluster redis集群监控模板 Templates Redis cluster node Redis cluster slots Redis cluster stats messages -
cluster_current_epoch 0 Redis.Cluster[cluster_current_epoch] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster node -
cluster_known_nodes 0 Redis.Cluster[cluster_known_nodes] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster node -
cluster_my_epoch 0 Redis.Cluster[cluster_my_epoch] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster node -
cluster_size 0 Redis.Cluster[cluster_size] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster node -
cluster_slots_assigned 0 Redis.Cluster[cluster_slots_assigned] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster slots -
cluster_slots_fail 0 Redis.Cluster[cluster_slots_fail] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster slots -
cluster_slots_ok 0 Redis.Cluster[cluster_slots_ok] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster slots -
cluster_slots_pfail 0 Redis.Cluster[cluster_slots_pfail] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster slots -
cluster_state 0 Redis.Cluster[cluster_state] 30s 90d 365d 0 3 0 0 0 0 0 -
cluster_stats_messages_meet_received 0 Redis.Cluster[cluster_stats_messages_meet_received] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster stats messages -
cluster_stats_messages_ping_received 0 Redis.Cluster[cluster_stats_messages_ping_received] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster stats messages -
cluster_stats_messages_ping_sent 0 Redis.Cluster[cluster_stats_messages_ping_sent] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster stats messages -
cluster_stats_messages_pong_received 0 Redis.Cluster[cluster_stats_messages_pong_received] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster stats messages -
cluster_stats_messages_pong_sent 0 Redis.Cluster[cluster_stats_messages_pong_sent] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster stats messages -
cluster_stats_messages_received 0 Redis.Cluster[cluster_stats_messages_received] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster stats messages -
cluster_stats_messages_sent 0 Redis.Cluster[cluster_stats_messages_sent] 30s 90d 365d 0 3 0 0 0 0 0 Redis cluster stats messages {Template Redis Cluster:Redis.Cluster[cluster_current_epoch].last()}<6 0 cluster current epoch < 6 0 0 3 0 1 {Template Redis Cluster:Redis.Cluster[cluster_known_nodes].last()}<6 0 cluster known nodes < 6 0 0 3 0 1 {Template Redis Cluster:Redis.Cluster[cluster_state].last()}=0 0 Redis Cluster is down 0 0 4 0 1 Redis cluster node 900 200 0.0000 100.0000 1 1 0 1 0 0.0000 0.0000 0 0 0 0 0 0 1A7C11 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_current_epoch] 1 0 F63100 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_known_nodes] 2 0 2774A4 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_my_epoch] 3 0 A54F10 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_size] Redis cluster slots 900 200 0.0000 100.0000 1 1 0 1 0 0.0000 0.0000 0 0 0 0 0 0 1A7C11 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_slots_assigned] 1 0 F63100 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_slots_fail] 2 0 2774A4 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_slots_ok] 3 0 A54F10 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_slots_pfail] Redis cluster stats messages 900 200 0.0000 100.0000 1 1 0 1 0 0.0000 0.0000 0 0 0 0 0 0 1A7C11 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_stats_messages_meet_received] 1 0 F63100 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_stats_messages_ping_received] 2 0 2774A4 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_stats_messages_ping_sent] 3 0 A54F10 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_stats_messages_pong_received] 4 0 FC6EA3 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_stats_messages_pong_sent] 5 0 6C59DC 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_stats_messages_received] 6 0 AC8C14 0 7 0 -
Template Redis Cluster Redis.Cluster[cluster_stats_messages_sent] 2、导入监控模板
配置-模板-导入
点击"选择文件",找到redis_cluster_templates.xml文件,将其导入
五、给主机添加监控模板
六、监控效果图
监控
集群
模板
文件
脚本
查询
命令
故障
节点
运行
配置
情况
数量
报警
测试
主机
内容
客户
客户端
效果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
嵌入式软件开发与测试视频
全面解读网络安全法1
数据库 数据描述领域 教案
java加入数据库jar包
中美网络安全概念股
江门自主可控软件开发销售厂
包大大互联网科技有限公司
数据库切换功能测试
软件开发的工作分解结构
实况连接服务器超时
亿兴互联网科技
如何恢复数据库数据
谈一谈如何防范信息网络安全
时事新闻课网络安全小知识ppt
apache 主从服务器
亚马逊网络安全
2017韩国云服务器
临潼区网络安全知识有奖竞答
我关于网络安全
安卓软件开发特点
软件开发行业主要干什么
求生药抗服务器代码
附加数据库时出错5173
浙江沃德尔科技集团软件开发
mysql查询数据库所有表行数
服务器域名通过ip访问
软件开发中心吕楠楠
上海今创病案系统数据库
linux命令启动数据库
中国网络安全文化发展