zabbix小结(六)low level discovery
一、lld(low level discovery)概述
什么是lld ?即低水平自动发现,使用它可以自动创建项目、触发器及被监控主机上的实体图。如zabbix 可以自动监控主机上的文件系统和网络拉口,而不需要为每个监控项创建items 。此处,其也可以实现被监控项目的自动删除 。上面的话不是我的总结,是我从官方文档上翻译过来的话。
之前我有写过利用zabbix监控redis 的一篇博文 ,本篇就结合lld 实现单机多redis实例在不知道目前所用端口中的情况下自动发现 。
二、创建模板
由于创建模板不是本篇的重点,就不提创建模板的过程了 。这里重点提下如何在模板中创建自动发现规则。
1、创建自动发现规则
步骤为:Configuration —-> Templates ——> 选中之前创建好的模板名—–>Create discovery rule
注意,regexp正则部分不能使用”d+” 这种标准的正则语句,只能使用类似 ^(6379|6378)$ 这种格式,平时基本留空。如果填写了内容,表示对上报结果的二次处理。
还需要注意的是,上面的时间默认使用的是3600秒。为什么要使用3600秒?原因是如果设置时间过短,比如你设置60s,一个是服务器的压力大,一个是如果你检测的端口突然当掉了,还没有来的急报警,主机通过json获取不到这个信息(关于json部分,后面会提到),就认为没有这个端口,模板里会自动关闭这个监控项的内容(默认保留30天,然后自动删除),这样报警功能就基本没有了,所以还是发现的间隔时间长一些比较好。
2、创建item prototype
创建好auto discovery rule后,可以通过Configuration —-> Templates —-> Template Redis Auto Discovery(假设模板名为该名称)—-> Discovery rules —-> Item prototypes —-> Create item prototype 创建新的item 。
redis_auto_discovery的模板文件同样我已上传到github上,地址为:https://github.com/361way/zabbix/blob/master/redis/redis_Auto_Discovery.xml
三、客户端配置
1、端口数据json化
端口数据json化 ,这里可以通过python实现:
1361way@ubuntu:/etc/zabbix$ cat redis_port.py
2#!/usr/bin/env python
3import os
4import json
5t=os.popen("""netstat -natp|awk -F: '/redis-server/&&/LISTEN/{print $2}'|awk '{print $1}' """)
6ports = []
7for port in t.readlines():
8 r = os.path.basename(port.strip())
9 ports += [{'{#REDISPORT}':r}]
10print json.dumps({'data':ports},sort_keys=True,indent=4,separators=(',',':'))
上面代码运行的结果为:
1361way@ubuntu:/etc/zabbix$ python redis_port.py
2{
3 "data":[
4 {
5 "{#REDISPORT}":"6376"
6 },
7 {
8 "{#REDISPORT}":"6378"
9 },
10 {
11 "{#REDISPORT}":"6379"
12 }
13 ]
14}
2、zabbix_agentd.conf配置
在/etc/zabbix/zabbix_agentd.conf末尾加入如下内容:
1UserParameter=redis.discovery,/etc/zabbix/redis_port.py
2UserParameter=redis_stats[*],redis-cli -h 127.0.0.1 -p $1 info|grep $2|cut -d : -f2
注:在一些不规范的维护人员的环境中,其可能把redis-cli 藏到了/opt/redis/bin这样的目录下又未在环境变量中配置,这时候zabbix就会找到redis-cli 程序。也可以把最后一句改为如下的语句,增加其适应性:
1UserParameter=redis_stats[*],(echo info; sleep 1) | telnet 127.0.0.1 $1 2>&1 |grep $2|cut -d : -f 2
上面的telnet 也可以换成nc提交,思路是一样的。配置完成后,通过sudo /etc/init.d/zabbix-agent restart 重启服务,使配置生效 。
四、服务端端配置及验证
服务端上通过configuration ——> hosts ——-> 增加主机的方式完成主机增加后(这里的篇幅省略),并不会立即自动发现主机,在本篇开始Create discovery rule 时,设置的时间是3600秒,也即在一个小时内能发现主机上的多个redis实例都是正常的。如果你着急看到结果,可以将该值调小,验证了再改回去。也可以通过zabbix_get进行验证:
1[root@361way zabbix_agentd.d]# zabbix_get -s 172.20.0.214 -k redis_stats[6378,used_memory:]
2808272
3[root@361way zabbix_agentd.d]# zabbix_get -s 172.20.0.214 -k redis_stats[6378,blocked_clients]
40
经验证是可以正常取得数据的。
五、其他问题
第三步里的 json脚本中调用netstat命令中的-p参数,很多网友遇到zabbix无法运行使用的情况 。针对该问题,默认如果使用apt源安装的话,会发现zabbix的用户shell指的是/bin/false ,而其启动脚本是以deamon的方式运行的 。这里相当于是由root用户发起的一组进程请求,是可以直接运行netstat -p参数的。如果是通过源码包或者真遇到了无法使用-p参数的情况,可以通过下面两种方法解决:
方法一:通过sudo 赋予权限
在/etc/sudoers中增加如下一行
1zabbix ALL=(root) NOPASSWD:/bin/netstat
同时修改其中的一行
1sed -i 's/^Defaults.*.requiretty/#Defaults requiretty/' /etc/sudoers
方法二:s 权位法
在linux有一种权限们叫s ,可以通过下面的命令为netstat命令增加 s 权位,不过这样所有的用户都拥有了使用netstat -p参数的权限 。
1chmod +s /bin/netstat
**最后:**给一下多实例redis low level discovery下的监控出图截图
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/zabbix-low-level-discovery-redis/3981.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.