Zabbix-使用自动发现,实现对应用进程的监控
说明
在维护工作中,对应用进程的监控是必不可少的一部分,当服务器规模庞大,应用进程种类繁多时,逐个的添加进程监控会让人很恼火。那如何能快速、有效的在各类服务器中,对应用进程实现准确的监控呢?本文将从思路、过程、验证三个维度,一步步的举例完成。
思路
一,梳理需要监控哪些进程
二,编写进程自动发现脚本
三,编写获取进程数脚本
四,修改agent配置文件
五,创建监控模板
六,验证
一,梳理进程
本文将以app_mon和app_mon_master进程举例,因为在工作中经常遇到在同一服务器上,有名称相似的进程。当grep一个进程时,会将另外一个进程也检索出来,这种情况会对判断进程是否存在带来很大干扰,为此总结分享,有效闭坑。
[root@localhost scripts]# ps -ef | grep app_mon
root 13125 12456 0 12:50 pts/1 00:00:00 sh /apps/soft/proc_test/app_mon
root 13136 12456 0 12:50 pts/1 00:00:00 sh /apps/soft/proc_test/app_mon_master
root 16316 15549 0 14:56 pts/3 00:00:00 grep --color=auto app_mon
二,进程自动发现脚本
脚本运行在zabbix agent端。进程名当做参数传入脚本,判断在服务器中是否存在该进程,若存在,将会检索出进程的绝对路径,并以[{#NAME:绝对路径/进程名},{#NAME:绝对路径/进程名},…]的方式显示,并交个zabbix server,用于进程的自动发现。
[root@ys~]# /etc/zabbix/scripts/find_proc_list.sh
#!/bin/bash
fun_check()
{
data=""
for x in $@
#$@代表所有位置参数
do
data="${data}{\"{#NAME}\":\"${x}\"},"
#以字典的形式输出,KEY为#NAME
done
data=${data%?}
#${%?} 删除变量末尾的特殊符号,本次删除“,”号
echo "[${data}]"
}
if [ $1 == app_mon ];then
cmd_line=`ps -ef | grep app_mon | grep -v grep | grep -v $0 | grep -oP "(?<=sh )\S+"`
#在grep时,锚定每行的“sh ”,然后将后面的字符串输出
fi
fun_check ${cmd_line}
三,获取进程数脚本
脚本运行在zabbix agent端。该脚本将进程名和进程的绝对路径当做位置参数传入,准确判断该进程的数量,并将值传回zabbix server,用以进程监控的触发器使用。
[root@ys~]# /etc/zabbix/scripts/check_proc_num.sh
#!/bin/bash
fun_app_mon()
# 针对既有app_mon进程又有app_mon_master进程的情况,避免获取到不准确的值。
{
res=`ps -ef | grep $1 | grep -v grep | grep -v $0 | grep -oP "(?<=sh )\S+" | grep -Fx $2`
# grep -Fx为完全匹配,避免匹配app_mon时,匹配到app_mon_master的数据
}
if [ app_mon == $1 ];then
fun_app_mon $1 $2
else
for x in $@
do
if [ -z ${res} ];then
res=`ps -ef | grep -v grep | grep -v $0 | grep ${x}`
else
res=`echo ${res} | grep -v grep | grep -v $0 | grep ${x}`
fi
done
fi
if [ -z ${res} ];then
echo 0
else
echo ${res} | wc -l
fi
四,修改agent配置文件
[root@ys~]# cat /etc/zabbix/zabbix_agent2.d/proc_check.conf
# 进程自动发现配置
UserParameter=find.proc.name[*],sh /etc/zabbix/scripts/find_proc_list.sh $1
# 获取进程个数配置
UserParameter=check_proc_num[*],sh /etc/zabbix/scripts/check_proc_num.sh $1 $2
五,创建监控模板
六,验证
1,在监控项中出现了对应的进程监控。
2,在最新数据中,获取到了对应的监控数值。