虽然pnp4nagios本意上是nagios的一个插件,提供一个web界面,展示nagios里的数据,但是可以把pnp4nagios单独搭建起来,使用它的web界面来展示我的数据。只需要4个步骤:
- 写一个数据格式转换工具,把我的数据转换成pnp4nagios的格式,而这个数据格式,就是这里我要说的,因为pnp4nagios的官方文档里并没有提到
- 数据转换工具输出的数据文件,放到pnp4nagios配置的一个文件目录里,
spool目录
- 启用pnp4nagios的npcd进程,这是一个C语言daemon,使用它的bulk工作模式(默认)。由npcd扫描这个spool目录,然后把每个文件给予perl脚本
process_perfdata.pl
(pnp4nagios提供),脚本把数据写入RRD文件 - 配置展示数据的模板,把模板给到pnp4nagios的模板目录
目前我使用pnp4gios提供了一个伪接口,传入机器的hostname和模板名,就可以查看数据了,调用方式类似:http://your_hostname/pnp4nagios/index.php/graph?host=param_hostname&srv=param_template
传入了2个参数:host
和srv
。
嗯,总的来说,使用的是pnp4nagios的Bulk Mode with NPCD
模式,抛开nagios,把pnp4nagios单独拿出来。
pnp4nagios的数据格式,也就是输入到脚本
process_perfdata.pl
的每个文件,文件名要求默认要求是以perfdata
开头。这个perl脚本对应有一个配置文件process_perfdata.cfg
,有较多的配置需要在这里修改。而脚本期望的每一行数据(这里假设我只使用SERVICEPERFDATA
这个数据类型)包含如下字段,各个字段用\t
分割,字段顺序没要求:
DATATYPE 值为SERVICEPERFDATA
TIMET 时间戳
HOSTNAME 域名或ip
SERVICEDESC 服务描述
SERVICEPERFDATA 性能数据
SERVICECHECKCOMMAND 命令名,跟模板名一致,process_perfdata.pl使用它来匹配模板名
各个字段中,稍微复杂些的是「性能数据」SERVICEPERFDATA
的格式,为:'label'=value[UOM];[warn];[crit];[min];[max]
,可以包含多个性能数据,空格分割。
性能数据格式SERVICEPERFDATA在pnp4nagios文档有详细描述。
总的来说,假设有一个数据样例为:
- DATATYPE::SERVICEPERFDATA TIMET::1378779841 HOSTNAME::zh_v542 SERVICEDESC::PING SERVICECHECKCOMMAND::check_icmp SERVICEPERFDATA::rta=92.412ms;200.000;500.000;0; pl=0%;40;80;; rtmax=97.281ms;;;; rtmin=86.727ms;;;;
数据经处理后,通过数据里的zh_v542(hostname)
和check_icmp(servicecheckcommand)
,访问urlhttp://your_hostname/pnp4nagios/index.php/graph?host=zh_v542&srv=check_icmp
就可以查看pnp4nagios的数据展示了。
后续我再把略微繁琐的部署和配置记录一下,以备忘。
– EOF –