标签:count support bin ++ one erp zabbix模板 密码 obj
在zabbix自带的linux模板的自动发现规则中,有一个Mounted filesystem discovery
自动发现规则,可以根据每个服务器磁盘梳理不同,自动生成相应的磁盘监控数据.
这就是自动注册的用途,根据不同服务器上同一个监控项不同的数量,自动生成对应数量的监控
例如5个服务器都分别启动了tomcat多实例,但启动的tomcat数量不相同,端口也不同,我想要监控这些端口是否down掉:
用普通的方式创建的监控模板,就得给每个服务器单独创建,不能通用
而如果通过自动发现规则来创建,就可以只用一个模板,对应这些不同数量的tomcat进行端口检查
以监控java端口的自动发现为例,进行操作说明
流程:
验证结果
[root@zhimai-api02 api]# ss -lntup|grep java|awk -F "[ |:]+" '{print $6}'
9090
9091
zabbix的api需要的都是json格式的数据,这里也不例外,不管通过shell脚本还是python脚本,反正最终需要输出json格式数据
shell脚本如下:
vim java_port_list.sh
#!/bin/bash
#获取所有java服务端口,并以json格式返回
string=`ss -lntup|grep java|awk -F "[ |:]+" '{print $6}'`
count=`echo $string|wc -w`
printf '{"data":[\n'
for ((i=1;i<=$count;i++))
do
proc_array=`echo $string |cut -d ' ' -f$i`
#echo "proc"$proc_array
printf "\t{\"{#PORT}\":\"${proc_array}\"},\n"
done
date=`date +%d%H%m%s`
printf "\t{\"{#DATE}\":\"${date}\"}\n"
printf "\t]\n"
printf "}\n"
脚本执行结果如下:
[root@zhimai-api02 ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/java_port_list.sh
{"data":[
{"{#PORT}":"9090"},
{"{#PORT}":"9091"},
{"{#DATE}":"3117101572512518"}
]
}
# 最前面的data是标准语法要求的,必须要相同,后面的key可以自己定义
在zabbix_agentd.d
目录下,创建两个自定义key,一个key用来自动发现,一个key用来作为具体监控项
[root@zhimai-api02 ~]# cat /etc/zabbix/zabbix_agentd.d/java_api.conf
# 获取json列表传递给zabbix-server
UserParameter=discovery.api.port,sh /etc/zabbix/zabbix_agentd.d/scripts/java_port_list.sh
# 端口状态监控key
UserParameter=api.port.status[*],ss -lntup|grep "$1"|wc -l
重启zabbix客户端,然后到服务端去测试验证
systemctl restart zabbix-agent.service
在zabbix服务使用zabbix-get命令验证
[root@zq-zabbix ~]# zabbix_get -s 172.17.19.13 -k discovery.api.port
{"data":[
{"{#DATE}":"3114101572502867"}
]
}
如上,没有获取到java端口信息,经查是ss -lntup
命令中的-p
参数,在普通用户下是看不了其他用户进程的,也就获取不到数据,可以使用免密sudo方式,也可以给ss
命令添加s
权限,让ss命令直接在root命令下运行
#客户端上操作
chmod +s /usr/sbin/ss
再次在服务端验证:
[root@zq-zabbix ~]# zabbix_get -s 172.17.19.13 -k discovery.api.port
{"data":[
{"{#PORT}":"9090"},
{"{#PORT}":"9091"},
{"{#DATE}":"3117101572512494"}
]
}
再拿获取的端口9090
验证端口存活状态key
[root@zq-zabbix ~]# zabbix_get -s 172.17.19.13 -k api.port.status[9090]
1
如上,已经能获取端口列表,也能验证改端口的状态了,可以添加规则了
A 先创建模板的自动发现规则
在web页面创建模板,进入模板的自动发现规则
页,创建自动发现规则,主要注意键值
和过滤器
两项设置
B 继续编写自动发现规则的监控项原型和触发器类型
此操作过于简单,略
became not supported
sh discovery rule "xxx:discovery.api.port" became not supported: Value should be a JSON object
json #正确 {"data":[ {"{#PORT}":"9090"}, {"{#PORT}":"9091"} ] } #错误 {"data":[{ "{#PORT}":"9090", "{#PORT}":"9091" }] }
ss
,在普通用户模式下,是没有权限获取如进程信息之类数据导致的s
权限,如chmod +s /usr/sbin/ss
#增加操作一定要慎重,个别可以修改数据的命令,一定不要添加s权限
zabbix模板的自动发现规则(ldd)实现被监控项自动发现
标签:count support bin ++ one erp zabbix模板 密码 obj
原文地址:https://www.cnblogs.com/noah-luo/p/11772542.html