分布式下通过send_nsca和submit_check_result提交数据到监控中心pnp4nagios不出图,这是个老问题了,以前都碰到过,不过最近在查询check_mk的问题时,又看到网上提问该问题,有些人直接回一句改脚本或者没用过了之。这里总结下(毕竟自己当时调试时也对该问题迷茫过)。

一、监控架构

先上下我的监控架构图:

nagios-dis

由于公司现网环境是跨机房的,而每个机房又都有没有公网地址的机器,所以就在每个机房做了一个中心节点 。在三个机房中的三个节点中,选择一个为主,另两个中心节点的监控数据通过send_nsca和submit_check_result提交数据到监控中心 。而监控节点和监控机之间用nrpe也好用check_mk也好,或者用nslient都ok 。

二、pnp4nagios不出图原因

pnp4nagios之所以不出图,是由于submit_check_result提交时,默认是不提交Performance Data数据的。正常出图的情况如下图

pnp4nagios-data

分布式下不出图,可以先看下Performance Data后面是否为空,如果为空就是该原因引起的。因为pnp4nagios绘图是根据该数据绘制的。

三、解决方法

解决方法很简单,并不需要修改脚本,只需要打开commands.cfg配置文件,将其中submit_check_result的定义做下修改即可。

修改前:

1define command{
2    command_name    submit_check_result
3    command_line    /usr/local/nagios/libexec/eventhandlers/submit_check_result $HOSTNAME$ '$SERVICEDESC$' $SERVICESTATE$ '$SERVICEOUTPUT$'
4    }

修改后:

1define command{
2    command_name    submit_check_result
3    command_line    /usr/local/nagios/libexec/eventhandlers/submit_check_result $HOSTNAME$ '$SERVICEDESC$' $SERVICESTATE$ '$SERVICEOUTPUT$ | $SERVICEPERFDATA$ [$SERVICECHECKCOMMAND$]'
4    }

修改完成后,通过ps auxf命令查看,提交的内容是不是类似如下:

1OK - 127.0.0.1: rta 2.687ms, lost 0% | rta=2.687ms;3000.000;5000.000;0; pl=0%;80;100;; [check_icmp]

如果是,就证明发送数据正常 。

注:该问题pnp4nagios官网已经给出了说明,之前0.4版本的链接就不再发了,这里发下0.6版本关于该问题的链接页。

Distributed Systems

至此,该问题解决,所以遇到类似问题,问论坛或QQ技术群的方法虽然没什么不对,但最好还是先到官网上查下较为好,比较官网更权威更专业。