一、引言
很多人在工作中一般喜欢把Redis、Memcached、MongoDB等数据库按照实例的方式对外提供服务。一般都是一台高配的服务器上开启多个实例给每个业务使用。如果一台服务器有几个实例,那如果集群呢,如果要监控,你得手动添加到什么时候,而且可能会出现手敲的错误,导致诸多的不顺利,因此就用到了这个自动发现功能。
二、监控采集依据
类似吞吐量,缓存的查询次数,命中率之类的
三、主要监控指标解析,通过stats命令进行采集
uptime ##memcached运行时长
curr_connections ##当前的连接数
total_connections ##曾经打开的连接总数
connection_structures ##服务器分配的连接数
cmd_get ##执行get命令总数
cmd_set ##执行set命令总数
get_hits ##get命中次数
get_misses ##get未命中次数
bytes_read ##读取字节总数
bytes_written ##写入字节总数
bytes ##服务器当前存储占用的内存(字节)
limit_maxbytes ##分配的内存大小(字节)
evictions ##为获取内存而删除的item个数
[root@lconline-ec2 ~]# echo stats |nc 127.0.0.1 11211 STAT pid 1859 memcache服务进程ID STAT uptime 491093 服务器已运行秒数 STAT time 1522740969 服务器当前Unix时间戳 STAT version 1.4.25 memcache版本 STAT libevent 1.4.13-stable STAT pointer_size 64 操作系统指针大小 STAT rusage_user 14.321822 进程累计用户时间 STAT rusage_system 14.095857 进程累计系统时间 STAT curr_connections 5 当前连接数量 STAT total_connections 51010 Memcached运行以来连接总数 STAT connection_structures 8 Memcached分配的连接结构数量 STAT reserved_fds 20 STAT cmd_get 0 get命令请求次数 STAT cmd_set 0 set命令请求次数 STAT cmd_flush 0 flush命令请求次数 STAT cmd_touch 0 touch命令请求次数 STAT get_hits 0 get命令命中次数 STAT get_misses 0 get命令未命中次数 STAT delete_misses 0 delete命令未命中次数 STAT delete_hits 0 delete命令命中次数 STAT incr_misses 0 incr命令未命中次数 STAT incr_hits 0 incr命令命中次数 STAT decr_misses 0 decr命令未命中次数 STAT decr_hits 0 decr命令命中次数 STAT cas_misses 0 cas命令未命中次数 STAT cas_hits 0 cas命令命中次数 STAT cas_badval 0 使用擦拭次数 STAT touch_hits 0 STAT touch_misses 0 STAT auth_cmds 0 认证命令处理的次数 STAT auth_errors 0 认证失败数目 STAT bytes_read 357040 读取总字节数 STAT bytes_written 60197691 发送总字节数 STAT limit_maxbytes 1073741824 分配的内存总大小(字节) STAT accepting_conns 1 服务器是否达到过最大连接(0/1) STAT listen_disabled_num 0 失效的监听数 STAT time_in_listen_disabled_us 0 STAT threads 4 当前线程数 STAT conn_yields 0 连接操作主动放弃数目 STAT hash_power_level 16 STAT hash_bytes 524288 当前存储占用的字节数 STAT hash_is_expanding 0 STAT malloc_fails 0 STAT bytes 0 当前存储占用的字节数 STAT curr_items 0 当前存储的数据总数 STAT total_items 0 启动以来存储的数据总数 STAT expired_unfetched 0 STAT evicted_unfetched 0 STAT evictions 0 LRU释放的对象数目 STAT reclaimed 0 已过期的数据条目来存储新数据的数目 STAT crawler_reclaimed 0 STAT crawler_items_checked 0 STAT lrutail_reflocked 0 END
四、安装telnet
五、在被监控端上编写自动发现脚本
1、创建zabbix脚本存放目录
2、编写自动发现memcached脚本
vim /etc/zabbix/shell/memcached_discovery.py
#!/usr/bin/env pythonimport os
import json
t=os.popen("""sudo netstat -nltp|awk -F: '/memcached/&&/LISTEN/{print $2}'|awk '{print $1}'| grep -v grep | grep -v '^$' """)
ports = []
for port in t.readlines():
r = os.path.basename(port.strip())
ports += [{'{#MCPORT}':r}]
print json.dumps({'data':ports},sort_keys=True,indent=4,separators=(',',':'))
3、给予脚本执行权限
4、允许zabbix用户无密码运行netstat
vim /etc/sudoers
zabbix ALL=(root) NOPASSWD:/bin/netstat #添加
5、编辑zabbix_agentd的配置文件支持自定义脚本
vim /etc/zabbix/zabbix_agentd.conf
6、编辑zabbix_agentd的配置文件添加zabbix配置文件目录
vim /etc/zabbix/zabbix_agentd.conf
7、创建key文件
vim /etc/zabbix/zabbix_agentd.conf.d/memcached_status.conf
UserParameter=memcached[*],(echo stats; sleep 0.1) | telnet 127.0.0.1 $1 2>&1 | awk '/STAT $2 / {print $NF}'
参数说明:
其中的格式为UserParameter=<key>,<command>
<key>:就是在web端添加监控脚本时的key值
<command>:就是该key值对应的执行脚本,也就是脚本执行路径
8、重启zabbix_agentd服务
service zabbix_agentd restart
9、在zabbix server端进行测试
zabbix_get -s 127.0.0.1 -p10050 -k"memcached.discovery[*]"zabbix_get -s 192.168.10.27 -p10050 -k"memcached[11211,uptime]"
zabbix_get -s 192.168.10.27 -p10050 -k"memcached[11211,bytes_written]"
没有评论