Zabbix3.4通过shell脚本监控redis集群
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,为了避免单点故障,生产环境中redis升级为集群模式,需要对redis集群进行监控,一旦有节点出现故障便触发报警。Redis有自带的redis-cli客户端,通过cluster info命令能查询到集
千家信息网最后更新 2025年02月05日Zabbix3.4通过shell脚本监控redis集群
为了避免单点故障,生产环境中redis升级为集群模式,需要对redis集群进行监控,一旦有节点出现故障便触发报警。Redis有自带的redis-cli客户端,通过cluster info命令能查询到集群的运行情况,我们可以写个shell脚本,通过zabbix来调用这个脚本实现集群的监控。
一、cluster info命令的使用
命令格式:
redis-cli -h [hostname] -p [port] -a [password] cluster info
1、查询集群运行情况(其中一个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" ;; esacfi
2、赋予脚本可执行权限
chmod +x /etc/zabbix/zabbix_agentd.d/redis_cluster.sh
3、脚本测试
查看redis集群节点数量
/etc/zabbix/zabbix_agentd.d/redis_cluster.sh cluster_known_nodes
三、创建redis集群监控配置文件
1、编写redis监控配置文件
vim /etc/zabbix/zabbix_agentd.d/redis.conf
UserParameter=Redis.Cluster[*],/etc/zabbix/zabbix_agentd.d/redis_cluster.sh $1
2、重启zabbix-agent
systemctl restart zabbix-agent
3、在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安全错误
数据库的锁怎样保障安全
中泰网络安全审计
青浦区智能软件开发售后服务
怎么设计数据库报表标题
网站数据库时不时访问不了
锦州 软件开发有限公司
山东正规的浪潮存储服务器服务
打开服务器的iis管理器
添加dns服务器的作用
db2数据库 创建用户
服务器备货公司
上海瀚缤网络技术有限公司
永辉服务器安全吗
测绘数据库平台
无法启动该acd数据库
多个数据库怎么控制事务
数字科技互联网
存储服务器读写操作
简述维护网络安全的重要措施
加强学生网络安全的方法
数据库中创建子报表的方法
服务器架构师
厦门龙商网络技术有限公司
无法启动该acd数据库
存储服务器读写操作
一台大型服务器辐射
网络安全自检方案
软件开发qq群
软件开发属于专利的哪一种
河南智慧社区软件开发公司
华域视觉 软件开发