zabbix除了自带的模板提供监控cpu、磁盘容量、内存这样的“老三篇”功能之外,还可以自己选择监控服务器里指定的程序,一般来说公司内部都会有自己的开发人员用java或者c++写一些程序放在各自对应的服务器上奔跑,而zabbix就可以实现“监控这些程序以及这些程序端口是否正常运行”。
其实zabbix监控相关程序是否正常运行的原理很简单,其实就是看一下这个文件在后台运行的数量,如果数量与运维设定的数量一样,那么zabbix就基本认为这个程序是在后台运行,也就不会触发报警。反之就会有对应的报警。
zabbix_server查看“文件在后台运行数量”所对应的key就是:proc.num[<name>,<user>,<state>,<cmdline>],具体意思如下:
<name>:进程名称,默认为“all processes”;
<user>:用户名,默认 “all users”;
<state>:可用值,默认是 all,可以进一步设定比如run,sleep等等;
<cmdline>:ps -ef命令行过滤,这里可以写正则表达式或者关键字,推荐用这个而不要用上面的name,因为这个更准确。
千说万说不如一个例子,现在我要监控一个叫MRS的一个模块,这是我们公司的一个内部模块,至于里面的内容鬼知道,这个不是我们care的地方,我们care的是它是否在后台运行。首先,我们先登陆这个MRS模块所在的服务器里,检查一下它现在运行着几个后台程序,既然它是我们的PL用java写的程序,那自然要用#ps -ef | grep java了。
可以看到,虽然这台mrs-012出现了三行java相关进程,但是只有一个是mrs程序,另一个是zookeeper,还有一个是gerp,这两个不是我们想要的,所以后台mrs进程数是1。
那么我们再返回到zabbix-server使用zabbix_get命令,查看一下zabbix_server是否能得到这个“1”。
看,mrs进程数量是1,java进程数量是2,与真实结果相同,这样我们心里就有底了,这个key是可以用的,可以直接添加到item里。
于是乎,在zabbix的web界面里---configuration---Templates/Hosts里添加一个item,如图:
有了item之后还要有trigger,我们都有了key还担心啥trigger,如图直接搞!
这个expression意思是最近一次的mrs程序数为0就会触发high级别的报警,如果各位觉得这样的判别语句比较容易误报的话,可以把expression语句改一下,改成:{templates名/hosts名:proc.num[,root,all,java].max(#2)}=0},即最近的两次值为0会触发报警,这样可能正确率会更高一点吧。
至于action神马的,就是看个人喜好了。这里不多赘述。
参考资料:http://blog.csdn.net/apache0554/article/details/45821591