前言:Redis作为缓存服务器我想大家都比较的熟悉,那么,如果想要更好的维护和监控,那么我们会对其redis服务器统一监控起来,如何监控呢?如果在生产环境一台服务器部署多个redis,这样就会出现多个端口,如何实施有效的监控呢?下面看下多给出的实录~

[redis-agent端]

主要用于接受redis性能参数

# vim  /etc/zabbix/zabbix_agentd.d/redis_status 

#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli"
HOST="127.0.0.1"
PORT=($(sudo netstat -tpln | awk -F "[ :]+" '/redis/ && /0.0.0.0/ {print $5}'))
PASS="xxxxxxx"if [[ $# == 1 ]];thencase $1 inversion)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info server | grep -w "redis_version" | awk -F':' '{print $2}'`echo $result;;uptime)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info server | grep -w "uptime_in_seconds" | awk -F':' '{print $2}'`echo $result;;connected_clients)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info clients | grep -w "connected_clients" | awk -F':' '{print $2}'`echo $result;;blocked_clients)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info clients | grep -w "blocked_clients" | awk -F':' '{print $2}'`echo $result;;used_memory)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info memory | grep -w "used_memory" | awk -F':' '{print $2}'`echo $result;;used_memory_rss)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info memory | grep -w "used_memory_rss" | awk -F':' '{print $2}'`echo $result;;used_memory_peak)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info memory | grep -w "used_memory_peak" | awk -F':' '{print $2}'`echo $result;;used_memory_lua)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info memory | grep -w "used_memory_lua" | awk -F':' '{print $2}'`echo $result;;used_cpu_sys)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info cpu | grep -w "used_cpu_sys" | awk -F':' '{print $2}'`echo $result;;used_cpu_user)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info cpu | grep -w "used_cpu_user" | awk -F':' '{print $2}'`echo $result;;used_cpu_sys_children)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info cpu | grep -w "used_cpu_sys_children" | awk -F':' '{print $2}'`echo $result;;used_cpu_user_children)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info cpu | grep -w "used_cpu_user_children" | awk -F':' '{print $2}'`echo $result;;rdb_last_bgsave_status)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info Persistence | grep -w "rdb_last_bgsave_status" | awk -F':' '{print $2}' | grep -c ok`echo $result;;aof_last_bgrewrite_status)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info Persistence | grep -w "aof_last_bgrewrite_status" | awk -F':' '{print $2}' | grep -c ok`echo $result;;aof_last_write_status)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info Persistence | grep -w "aof_last_write_status" | awk -F':' '{print $2}' | grep -c ok`echo $result;;*)echo -e "\033[33mUsage: $0 {connected_clients|blocked_clients|used_memory|used_memory_rss|used_memory_peak|used_memory_lua|used_cpu_sys|used_cpu_user|used_cpu_sys_children|used_cpu_user_children|rdb_last_bgsave_status|aof_last_bgrewrite_status|aof_last_write_status}\033[0m";;esac
elif [[ $# == 2 ]];thencase $2 inkeys)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info | grep -w "$1" | grep -w "keys" | awk -F'=|,' '{print $2}'`echo $result;;expires)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info | grep -w "$1" | grep -w "keys" | awk -F'=|,' '{print $4}'`echo $result;;avg_ttl)result=`$REDISCLI -h $HOST -a $PASS -p $PORT info | grep -w "$1" | grep -w "avg_ttl" | awk -F'=|,' '{print $6}'`echo $result;;*)echo -e "\033[33mUsage: $0 {db0 keys|db0 expires|db0 avg_ttl}\033[0m" ;;esac
fi

# chmod 755 -R /etc/zabbix/zabbix_agentd.d/redis_status 

[root@lamp02-salve ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

UserParameter=Redis.Info[*],/etc/zabbix/zabbix_agentd.d/redis_status $1 $2
UserParameter=Redus.Status,/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 ping | grep -c PONG

[root@localhost ~]# vim /etc/sudoers

Defaults:zabbix !requiretty
zabbix ALL=(root) NOPASSWD:/bin/netstat

zabbix-server端测试key值,下面所能监控redis性能参数

监控指标详解:

connected_clients    #已连接客户端的数量blocked_clients       #正在等待阻塞命令的客户端数量used_memory    #由redis分配器分配的内存总量used_memory_rss    #操作系统角度,redis返回的已分配的内存总量used_memory_peak    #redis内存消耗峰值used_memory_lua       #引擎所使用的内存大小used_cpu_sys          #redis服务器消耗的系统CPUused_cpu_user        #服务器消耗的用户CPUused_cpu_sys_children    #redis后台进程消耗的系统cpuused_cpu_user_children   #redis后台进程消耗的用户cpurdb_last_bgsave_status       #关系数据库最后的bgsave状态aof_last_bgrewrite_status    #上次重写状态aof_last_write_status       #上次写入的状态

[root@zabbix-server ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.2.158 -k Redis.Info[used_memory]   #随机选填一个性能参数,如redis用户内存使用情况,即可获取数值
826528,

zabbix-web端定义监控模板即可(在这里,具体监控模板就省略哈,如果想获取的话,可以添加博客QQ群号,在群中即可找我获取即可)

Ps:下图是我对redis的所有该主机监控指标都进行堆叠整合~

【案例需求二】

近期,由于新上线一批redis重要业务以及集群,需要将redis端口统一监控起来,那么需要监控端口哪些状态呢?这里可以监控,端口的连接数,运行时间等等,

我们都知道,redis可能会做多实例,每个机器上面的redis都存在这不同端口,这里可以编写自动发现redis端口,随后进行监控,在这里,我给出来脚本

shell脚本获取redis端口

#!/bin/bash
#Script_name zabbix_discovery_redis.sh
#Auto bxy 2018年11月20日12:04:10
redis() {port=($(sudo netstat -tpln | awk -F "[ :]+" '/redis/ && /0.0.0.0/ {print $5}'))printf '{\n'printf '\t"data":[\n'for key in ${!port[@]}doif [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];thensocket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1`printf '\t {\n'printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"},\n"else [[ "${key}" -eq "((${#port[@]}-1))" ]]socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1`printf '\t {\n'printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"}\n"fidoneprintf '\t ]\n'printf '}\n'
}
$1

python脚本获取端口

[root@lamp02-salve alterscripts]# cat redis_discovery.py
#!/usr/bin/env python
import os
import  json
t=os.popen("""sudo netstat -tlpn |grep redis|grep 0.0.0.0|awk '{print $4}'|awk -F: '{print $2}' """)
ports = []
for port in  t.readlines():r = os.path.basename(port.strip())ports += [{'{#REDISPORT}':r}]
print json.dumps({'data':ports},sort_keys=True,indent=4,separators=(',',':'))

[root@localhost ~]# chmod 755 /etc/zabbix/zabbix_agentd.d/zabbix_discovery_redis.sh 

[root@localhost ~]# vim  /etc/zabbix/zabbix_agentd.d/userparameter_redis.conf   #这个是shell脚本写入的key
UserParameter=redis.discovery[*],/etc/zabbix/zabbix_agentd.d/zabbix_discovery_redis.sh $1
UserParameter=redis_stats[*],(echo info; sleep 1) | telnet 192.168.37.137 $1 2>&1 |grep $2|cut -d : -f2

允许zabbix用户无密码运行netstat

[root@localhost ~]# vim /etc/sudoers  否则会无法检测端口

Defaults:zabbix !requiretty
zabbix ALL=(root) NOPASSWD:/bin/netstat

Ps:在这里我们还是用python获取redis端口号吧,这样更加灵活,轻便~

[root@lamp02-salve ~]# chmod 755 /etc/zabbix/alterscripts/redis_discovery.py    #py脚本呢写完之后,授权即可,直接执行,验证端口是否正常获取~,如果有多个端口,同样全部收集~

[root@lamp02-salve ~]# vim /etc/zabbix/zabbix_agentd.d/redis_discovery_port.conf

UserParameter=redis.discovery,/usr/bin/python /etc/zabbix/alterscripts/redis_discovery.py
UserParameter=redis_stats[*],/usr/local/redis/bin/redis-cli -p $1 -h 127.0.0.1 info |grep -w $2|cut -d : -f2

最后在zabbix server端验证是够能获取到redis端口~显然是没问题的

Ps:如果在server端获取key值时,出现以下错误,那是因为Item由于各种原因返回时间会比较长,导致的,修改agent端timeout参数即可,如下所示

Timeout=8

另外还需要在sudo配置文件中修改一下参数,免密sudo获取redis密码验证

Defaults !requiretty

zabbix ALL=(ALL) NOPASSWD: ALL

 到此我们server端测试数据无问题。接下来在web界面配置了

触发器类型添加

ok!打完收工~

转载于:https://www.cnblogs.com/bixiaoyu/p/9988693.html

记一次线上Zabbix对Redis监控实录相关推荐

  1. 记一次线上环境 redis偶尔连接超时报错 解决

    记一次线上环境 redis偶尔连接超时报错 解决 贴出本地控制台日志 说实话,很痛苦,跟进很久了,一直认为的jvm程序所使用的配置的连接池框架问题 因为程序为 springboot 2 spring ...

  2. 线上故障之-redis锁处理幂等性失效和幂等性问题解决方案

    线上故障之-redis锁处理幂等性失效和幂等性问题解决方案 redis锁处理幂等性失效 事务传播bug try bug 幂等性设计方法 1. insert前先select 2. 加悲观锁 3. 加乐观 ...

  3. 线上zabbix数据库重建表分区

    线上zabbix数据库重建表分区 发表于:2015-03-5 0 条评论 当前线上zabbix数据按月分区单个分区文件过大,现重新按天分区. 注意事项: 1,"truncate table ...

  4. 记一次线上coredump事故

    转自:http://www.likecs.com/show-16439.html 记一次线上coredump事故 1.事故背景 上周三凌晨,我负责的某个模块在多台机器上连续发生coredump,幸好发 ...

  5. 记几次 [线上环境] Dubbo 线程池占满原因分析(第三次:GC STW)

    [线上环境] Dubbo 线程池占满原因排查系列 记几次 [线上环境] Dubbo 线程池占满原因分析(第一次:HttpClient) 记几次 [线上环境] Dubbo 线程池占满原因分析(第二次:C ...

  6. 记一次线上应用连接池满的处理

    记一次线上应用dubbo-claim连接池满的处理 首先看到dubbo-claim应用突然大面积报错,基本反馈是冻结预算出问题了,看了看冻结预算的代码,发现写的非常复杂,果断放弃看代码来排查问题. C ...

  7. 记一次线上redis报错(JedisExhaustedPoolException: Could not get a resource since the pool is exhausted)

    错误详情 redis.clients.jedis.exceptions.JedisExhaustedPoolException: Could not get a resource since the ...

  8. 记一次线上商城系统 Tomcat、JVM 高并发的优化

    来源:https://urlify.cn/jyYny2 对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强的问题定位,问题识别,问题排查能力,还需要很丰富的调优能力. 本篇文章从实战 ...

  9. 记一次线上商城系统高并发的优化

    对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强的问题定位,问题识别,问题排查能力,还需要很丰富的调优能力. 本篇文章从实战角度,从问题识别,问题定位,问题分析,提出解决方案,实施 ...

  10. 记一次线上cpu飙升100%的排查过程

    大家好,我是烤鸭: 最近没怎么写技术文章,还是得回归下初心,正好前几天出现个线上问题,记录下排查过程. 问题描述 某个时间点,接收到接口响应慢报警. 过一会收到服务器cpu可用率低(<10%)报 ...

最新文章

  1. [Unity3D]Unity3D连衣裙实现游戏开发系统
  2. javascript写dfs算法
  3. caffe检测图片是否包含人脸_caffe入门-人脸检测1
  4. 结构体之位域全面分析
  5. ORM内核原理解析之:延迟加载
  6. 使用php-fpm状态页观察当前的php-fpm状态
  7. 攻击者接管账户,攻陷周下载量超700万次的JavaScript 流行库 ua-parser-js
  8. PowerDesigner概念模型与物理模型相互转换及导出数据字典
  9. matlab闭环直流调速系统实验,实验三双闭环直流调速系统MATLAB仿真.doc
  10. JAVA 中大于等于小于的写法
  11. 关于中小学编程教育的一些看法
  12. 500台以上的大型网吧设计解决方案(转)
  13. 翁恺老师Java进阶城堡游戏源码
  14. 这是一片求助帖——关于梆梆加固企业版的托克修复问题
  15. 《TeeRex (Sec‘20)》笔记
  16. oracle查询和编写数据字典
  17. 黑马JAVA P163 字节缓冲流的性能分析
  18. Microsoft_SQL_Server_自定义函数整理大全
  19. 【R】【决策树】【随机森林】
  20. 关于hadoop访问8088端口显示只有一个节点

热门文章

  1. jQuery 仿写京东轮播广告图
  2. Linux网络编程基础
  3. 来自于51CTO的经典学习资料汇总
  4. 安装微软ISA系统,安全浏览外网站点
  5. 关于游戏中的材质系统
  6. day 07总结(数字类型内置方法/字符串类型内置方法)
  7. npm 安装 -D 和-S的区别
  8. 虚电路方式,数据报方式
  9. 以盛唐气象,浇胸中块垒:熊逸《唐诗50讲》学习笔记汇总
  10. Eclipse Maven编译报不支持muti-catch