自动发现主机规则

首先创建自动发现主机:


image.png


配置自动发现规则:

zabbix 自动发现主机,端口,自定义脚本key值_第1张图片

完成后在动作中的自动发现创建发现动作即可:

zabbix 自动发现主机,端口,自定义脚本key值_第2张图片



自定义脚本

zabbix自定义监控key值 自动发现 自动执行远程脚本
例如:
监控一个进程是否存在:
mkdir /etc/zabbix/alertscripts/
vim check_badvp.sh
#!/bin/bash
result=`ps -ef | grep badvp-udpgw | grep -v grep`
if [ -n "$result" ]
then
echo '1'
else
echo '0'
fi
通过脚本判断这个进程是否存在 存在返回1 不存在返回0,我们把这个脚本自定义到上述目录

在zabbix_agent.conf中配置脚本路径 和key值
UnsafeUserParameters=1
UserParameter=check_badvp,/bin/bash /etc/zabbix/alertscripts/check_badvp.sh
修改超时时间
Timeout = 8
设置超时时间,避免脚本执行不成功

设置启动服务的脚本 /opt/autorestart.sh
最后修改sudoers文件 在下边一行新加 zabiix用户的启动权限 visudo
root ALL=(ALL) ALL
zabbix ALL=(root) NOPASSWD:/opt/autorestart.sh
最后重启agent

界面设置
创建监控项:

zabbix 自动发现主机,端口,自定义脚本key值_第3张图片

创建触发器:

zabbix 自动发现主机,端口,自定义脚本key值_第4张图片

最后条件动作通知:

zabbix 自动发现主机,端口,自定义脚本key值_第5张图片

最后实现告警:

zabbix 自动发现主机,端口,自定义脚本key值_第6张图片


zabbix端口自动发现
经历了很多次试验,由于公司服务器上的业务端口又多又没有规律,因此使用网上的端口自动发现规则(netstat)的方法会发现大量的无用端口,而且在告警时候只显示端口也不友好,最终找到了解决办法。
python脚本和pyadmin脚本
利用zabbix的自定义key来调用公司服务器现有的进程管理工具pyadmin

python脚本:
#!/usr/bin/python
import os,json
#command = "sudo /usr/skymobi/admin/PYsanpadmin |awk -F'_' {'print $2'} | awk '{print $1}' | sort|uniq"
command = "sudo /usr/skymobi/admin/PYsanpadmin"
lines = os.popen(command).readlines()
resultLi = []
for line in lines:
lineLi = line.split()
newLineLi = lineLi[0].split("_")
resDic = {"{#SERVICES}":newLineLi[0],"{#TCP_PORT}":newLineLi[1]}
resultLi.append(resDic)
data = {"data":resultLi}
jsonStr = json.dumps(data, sort_keys=True, indent=4)
jsonStr=jsonStr.replace(r"\u001b[1;32;40m","").replace(r"\u001b[1;31;40m","").replace(r"\u001b[1;33;40m","")
print jsonStr
脚本中的replace 是过滤我一下PY输出结果的颜色的 绿色 红色 否者在打印出json格式就会有颜色的代码

PYadmin输出结果

zabbix 自动发现主机,端口,自定义脚本key值_第7张图片

其原理就是利用python脚本分离出pyadmin管理工具输出的结果,把进程名和端口过滤出来,传到zabbix自动发现规则中
vim zabbix-agentd.conf
UserParameter=nettcpservice,/usr/bin/python /etc/zabbix/alertscripts/discover_tcpport.py "$1" "$2"
重启agent即可


配置自动发现规则

zabbix 自动发现主机,端口,自定义脚本key值_第8张图片

健值对应我们配置文件中的健值,这里类型选择主动式,为了减少服务端探测导致客户端服务器连接数过多。

zabbix 自动发现主机,端口,自定义脚本key值_第9张图片

zabbix 自动发现主机,端口,自定义脚本key值_第10张图片

最后绑定到我们的服务器即可~

zabbix agent Value should be a JSON object 故障排除
首先考虑脚本执行权限
chmod 755 发现脚本
其次visudo,最后一行追加
zabbix ALL=(ALL) NOPASSWD: ALL