redismon

by ZhuoRoger

ZhuoRoger / redismon

Redis monitor plugin for Open-Falcon

129 Stars 65 Forks Last release: Not found 5 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Redis monitor plugin for Open-Falcon


功能支持

已测试的Redis版本2.2.15, 2.4.16, 2.6.14, 2.8.23, 3.0.0.

采集Redis基础状态信息, Redis复制,Redis Cluster, slowlog,所有cmdstat_xx命令执行频率等; 支持单机多实例;

暂不支持Sentinel(哨兵)的监控

环境需求

操作系统: Linux

Python > 2.6

PyYAML > 3.10

redis-py > 2.10

python-requests > 0.11

redismon部署

1 目录解压到/path/to/redismon

2 配置当前服务器的Redis多实例信息,/path/to/redismon/conf/redismon.conf 每行记录一个实例: 集群名,密码,端口

  • {clustername: cluster1, password: '', port: 6379}

3 配置crontab, 修改redismoncron文件中redismon安装path; cp redismoncron /etc/cron.d/

4 查看日志文件/path/to/redismon/log/redismon.log, 如无异常信息,表示采集正常;几分钟后,可从open-falcon的dashboard中查看redis metric

5 endpoint默认是hostname

采集的Redis指标


| Counters | Type | Notes| |-----|------|------| |aofcurrentrewritetimesec |GAUGE|当前AOF重写持续的耗时| |aofenabled |GAUGE| appenonly是否开启,appendonly为yes则为1,no则为0| |aoflastbgrewritestatus |GAUGE|最近一次AOF重写操作是否成功| |aoflastrewritetimesec |GAUGE|最近一次AOF重写操作耗时| |aoflastwritestatus |GAUGE|最近一次AOF写入操作是否成功| |aofrewriteinprogress |GAUGE|AOF重写是否正在进行| |aofrewritescheduled |GAUGE|AOF重写是否被RDB save操作阻塞等待| |blockedclients |GAUGE|正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量| |clientbiggestinputbuf |GAUGE|当前客户端连接中,最大输入缓存| |clientlongestoutputlist |GAUGE|当前客户端连接中,最长的输出列表| |clusterenabled |GAUGE|是否启用Redis集群模式,clusterenabled| |clusterknownnodes |GAUGE|集群中节点的个数| |clustersize |GAUGE|集群的大小,即集群的分区数个数| |clusterslotsassigned |GAUGE|集群中已被指派slot个数,正常是16385个| |clusterslotsfail |GAUGE|集群中已下线(客观失效)的slot个数| |clusterslotsok |GAUGE|集群中正常slots个数| |clusterslotspfail |GAUGE|集群中疑似下线(主观失效)的slot个数| |clusterstate |GAUGE|集群的状态是否正常| |cmdstatauth |COUNTER|auth命令每秒执行次数| |cmdstatconfig |COUNTER|config命令每秒执行次数| |cmdstatget |COUNTER|get命令每秒执行次数| |cmdstatinfo |COUNTER|info命令每秒执行次数| |cmdstatping |COUNTER|ping命令每秒执行次数| |cmdstatset |COUNTER|set命令每秒执行次数| |cmdstatslowlog |COUNTER|slowlog命令每秒执行次数| |connectedclients |GAUGE|当前已连接的客户端个数| |connectedclientspct |GAUGE|已使用的连接数百分比,connectedclients/maxclients | |connectedslaves |GAUGE|已连接的Redis从库个数| |evictedkeys |COUNTER|因内存usedmemory达到maxmemory后,每秒被驱逐的key个数| |expiredkeys |COUNTER|因键过期后,被惰性和主动删除清理key的每秒个数| |hz |GAUGE|serverCron执行的频率,默认10,表示100ms执行一次,建议不要大于120| |instantaneousinputkbps |GAUGE|瞬间的Redis输入网络流量(kbps)| |instantaneousopspersec |GAUGE|瞬间的Redis操作QPS| |instantaneousoutputkbps |GAUGE|瞬间的Redis输出网络流量(kbps)| |keys |GAUGE|当前Redis实例的key总数| |keyspacehitratio |GAUGE|查找键的命中率(每个周期60sec精确计算)| |keyspacehits |COUNTER|查找键命中的次数| |keyspacemisses |COUNTER|查找键未命中的次数| |latestforkusec |GAUGE|最近一次fork操作的耗时的微秒数(BGREWRITEAOF,BGSAVE,SYNC等都会触发fork),当并发场景fork耗时过长对服务影响较大| |loading |GAUGE|标志位,是否在载入数据文件| |masterreploffset |GAUGE|master复制的偏移量,除了写入aof外,Redis定期为自动增加| |memfragmentationratio |GAUGE|内存碎片率,usedmemoryrss/usedmemory| |pubsubchannels |GAUGE|目前被订阅的频道数量| |pubsubpatterns |GAUGE|目前被订阅的模式数量| |rdbbgsaveinprogress |GAUGE|标志位,记录当前是否在创建RDB快照| |rdbcurrentbgsavetimesec |GAUGE|当前bgsave执行耗时秒数| |rdblastbgsavestatus |GAUGE|标志位,记录最近一次bgsave操作是否创建成功| |rdblastbgsavetimesec |GAUGE|最近一次bgsave操作耗时秒数| |rdblastsavetime |GAUGE|最近一次创建RDB快照文件的Unix时间戳| |rdbchangessincelastsave |GAUGE|从最近一次dump快照后,未被dump的变更次数(和save里变更计数器类似)| |redisalive |GAUGE|当前Redis是否存活,ping监控sockettime默认500ms| |rejectedconnections |COUNTER|因连接数达到maxclients上限后,被拒绝的连接个数| |replbacklogactive |GAUGE|标志位,master是否开启了replbacklog,有效地psync(2.8+)| |replbacklogfirstbyteoffset|GAUGE|replbacklog中首字节的复制偏移位| |replbackloghistlen |GAUGE|replbacklog当前使用的字节数| |replbacklogsize |GAUGE|replbacklog的长度(repl-backlog-size),网络环境不稳定的,建议调整大些 |role |GAUGE|当前实例的角色:master 1, slave 0| |masterlinkstatus |GAUGE|标志位,从库复制是否正常,正常1,断开0| |masterlinkdownsinceseconds|GAUGE|从库断开复制的秒数| |slavereadonly |GAUGE|从库是否设置为只读状态,避免写入| |slowloglen |COUNTER|slowlog的个数(因未转存slowlog实例,每次采集不会slowlog reset,所以当slowlog占满后,此值无意义)| |syncfull |GAUGE|累计Master full sync的次数;如果值比较大,说明常常出现全量复制,就得分析原因,或调整repl-backlog-size| |syncpartialerr |GAUGE|累计Master pysync 出错失败的次数| |syncpartialok |GAUGE|累计Master psync成功的次数| |totalcommandsprocessed |COUNTER|每秒执行的命令数,比较准确的QPS| |totalconnectionsreceived |COUNTER|每秒新创建的客户端连接数| |totalnetinputbytes |COUNTER|Redis每秒网络输入的字节数| |totalnetoutputbytes |COUNTER|Redis每秒网络输出的字节数| |uptimeindays |GAUGE|Redis运行时长天数| |uptimeinseconds |GAUGE|Redis运行时长的秒数| |usedcpusys |COUNTER|Redis进程消耗的sys cpu| |usedcpuuser |COUNTER|Redis进程消耗的user cpu| |usedmemory |GAUGE|由Redis分配的内存的总量,字节数| |usedmemorylua |GAUGE|lua引擎使用的内存总量,字节数;有使用lua脚本的注意监控| |usedmemorypct |GAUGE|最大内存已使用百分比,usedmemory/maxmemory; 存储场景无淘汰key注意监控.(如果maxmemory=0表示未设置限制,pct永远为0)| |usedmemorypeak |GAUGE|Redis使用内存的峰值,字节数| |usedmemoryrss |GAUGE|Redis进程从OS角度分配的物理内存,如key被删除后,malloc不一定把内存归还给OS,但可以Redis进程复用|

建议设置监控告警项

说明:系统级监控项由falcon agent提供;监控触发条件根据场景自行调整

| 告警项 | 触发条件 | 备注| |-----|------|------| |load.1min|all(#3)>10|Redis服务器过载,处理能力下降| |cpu.idle |all(#3)<10|CPU idle过低,处理能力下降| |df.bytes.free.percent|all(#3)<20|磁盘可用空间百分比低于20%,影响从库RDB和AOF持久化| |mem.memfree.percent|all(#3)<15|内存剩余低于15%,Redis有OOM killer和使用swap的风险| |mem.swapfree.percent|all(#3)<80|使用20% swap,Redis性能下降或OOM风险| |net.if.out.bytes|all(#3)>94371840|网络出口流量超90MB,影响Redis响应| |net.if.in.bytes|all(#3)>94371840|网络入口流量超90MB,影响Redis响应| |disk.io.util|all(#3)>90|磁盘IO可能存负载,影响从库持久化和阻塞写| |redis.alive|all(#2)=0|Redis实例存活有问题,可能不可用| |usedmemory|all(#2)>32212254720|单实例使用30G,建议拆分扩容;对fork卡停,fullsync时长都有明显性能影响| |usedmemorypct|all(#3)>85|(存储场景)使用内存达85%,存储场景会写入失败| |memfragmentationratio|all(#3)>2|内存碎片过高(如果实例比较小,这个指标可能比较大,不实用)| |connectedclients|all(#3)>5000|客户端连接数超5000| |connectedclientspct|all(#3)>85|客户端连接数占最大连接数超85%| |rejectedconnections|all(#1)>0|连接数达到maxclients后,创建新连接失败| |totalconnectionsreceived|每秒新创建连接数超5000,对Redis性能有明显影响,常见于PHP短连接场景| |masterlinkstatus>|all(#1)=0|主从同步断开;会全量同步,HA/备份/读写分离数据最终一致性受影响| |slavereadonly|all(#1)=0|从库非只读状态| |replbacklogactive|all(#1)=0|replbacklog关闭,对网络闪断场景不能psync| |keys|all(#1)>50000000|keyspace key总数5千万,建议拆分扩容| |instantaneousopspersec|all(#2)>30000|整体QPS 30000,建议拆分扩容| |slowloglen|all(#1)>10|1分钟中内,出现慢查询个数(一般Redis命令响应大于1ms,记录为slowlog)| |latestforkusec|all(#1)>1000000|最近一次fork耗时超1秒(其间Redis不能响应任何请求)| |keyspacehitratio|all(#2)<80|命中率低于80%| |clusterstate|all(#1)=0|Redis集群处理于FAIL状态,不能提供读写| |clusterslotsassigned|all(#1)<16384|keyspace的所有数据槽未被全部指派,集群处理于FAIL状态| |cluster_slots_fail|all(#1)>0|集群中有槽处于失败,集群处理于FAIL状态|

Contributors

  • 卓汝林: weibo: http://weibo.com/u/2540962412

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.