Zabbix监控服务状态有多种方式,比如:
1,ps aux |grep nginx|grep -v grep |wc -l,依据返回值来判断是否正常;
2,利用zabbix自带函数proc.num[]来判断是否正常;
上面两种都需要指定对象,但通常不适用于生产环境。生产环境中,不同主机启动的服务不同,规模小了还好办,最多辛苦一点,挨个添加,规模大了就不适用了。这个时候就要使用lld来自动发现服务并监控服务状态。
脚本如下:
[[email protected] process]# cat proc.discovery.sh
#!/bin/bash
# get the list service if running in the server
printf '{\n'
printf '\t"data":[\n'
getservice() {
ps axu | grep -v grep | grep $1 &> /dev/null
if [ $? == 0 ];then
if [ $1 != 'sshd' ]; then
printf '\t {\n'
echo '"{#PROCNAME}":' \"$1\" '},'
else
printf '\t {\n'
echo '"{#PROCNAME}":' \"$1\" '}'
fi
fi
}
services="httpd mysqld haproxy sshd"
for srv in $services;do
getservice $srv
done
printf '\t ]\n'
printf '}\n'
修改zabbix_agentd的配置文件,添加
UserParameter=proc.discovery,/bin/bash /home/zabbix/process/proc.discovery.sh
Server端返回值如图,检验正确。如果不正确,无法获取监控值,监控项是不支持的
然后配置WEB端
选择配置,模版,输入模版名称和可见名称,创建模版,单击进入模版,选择自动发现规则,创建自动发现规则
name,agent主动模式,key,更新间隔是采集频率,历史数据保留时间。
创建监控原型
创建触发器原型
配置完成,验证结果