欢迎访问linux宝典,请记住本站唯一域名:www.linuxbaodian.com

zabbix小结(六)low level discovery

来源:原创    更新时间:2018-09-26 21:27:49    编辑:管理员    浏览:1609

一、lld(low level discovery)概述 


什么是lld ?即低水平自动发现,使用它可以自动创建项目、触发器及被监控主机上的实体图。如zabbix 可以自动监控主机上的文件系统和网络拉口,而不需要为每个监控项创建items 。此处,其也可以实现被监控项目的自动删除 。上面的话不是我的总结,是我从官方文档上翻译过来的话。

本篇就结合lld 实现单机多redis实例在不知道目前所用端口中的情况下自动发现 。


二、创建模板


由于创建模板不是本篇的重点,就不提创建模板的过程了 。这里重点提下如何在模板中创建自动发现规则。

1、创建自动发现规则

步骤为:Configuration ----> Templates ------> 选中之前创建好的模板名----->Create discovery rule

blob.png

注意,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 。

blob.png

三、客户端配置


1、端口数据json化


端口数据json化 ,这里可以通过python实现:


linuxbaodian@ubuntu:/etc/zabbix$ cat redis_port.py
#!/usr/bin/env python
import os
import json
t=os.popen("""netstat -natp|awk -F: '/redis-server/&&/LISTEN/{print $2}'|awk '{print $1}' """)
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=(',',':'))

上面代码运行的结果为:


linuxbaodian@ubuntu:/etc/zabbix$ python redis_port.py
{
    "data":[
        {
            "{#REDISPORT}":"6376"
        },
        {
            "{#REDISPORT}":"6378"
        },
        {
            "{#REDISPORT}":"6379"
        }
    ]
}

2、zabbix_agentd.conf配置


在/etc/zabbix/zabbix_agentd.conf末尾加入如下内容:


UserParameter=redis.discovery,/etc/zabbix/redis_port.py
UserParameter=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 程序。也可以把最后一句改为如下的语句,增加其适应性:

UserParameter=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进行验证:


[root@linuxbaodian zabbix_agentd.d]# zabbix_get -s 172.20.0.214 -k redis_stats[6378,used_memory:]
808272
[root@linuxbaodian zabbix_agentd.d]# zabbix_get -s 172.20.0.214 -k redis_stats[6378,blocked_clients]
0

经验证是可以正常取得数据的。


五、其他问题


第三步里的 json脚本中调用netstat命令中的-p参数,很多网友遇到zabbix无法运行使用的情况 。针对该问题,默认如果使用apt源安装的话,会发现zabbix的用户shell指的是/bin/false ,而其启动脚本是以deamon的方式运行的 。这里相当于是由root用户发起的一组进程请求,是可以直接运行netstat -p参数的。如果是通过源码包或者真遇到了无法使用-p参数的情况,可以通过下面两种方法解决:


方法一:通过sudo 赋予权限


在/etc/sudoers中增加如下一行

zabbix ALL=(root) NOPASSWD:/bin/netstat

同时修改其中的一行

sed -i 's/^Defaults.*.requiretty/#Defaults    requiretty/' /etc/sudoers

方法二:s 权位法


在linux有一种权限们叫s ,可以通过下面的命令为netstat命令增加 s 权位,不过这样所有的用户都拥有了使用netstat -p参数的权限 。

chmod +s /bin/netstat

最后:给一下多实例redis low level discovery下的监控出图截图

blob.png

评论区

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

相关内容

点击排行

随机新闻

评论排行榜