• 抬起头,继续前进吧,去把这个不完美的故事,变成你成所期望的样子
  • 登山路上我们会放弃很多东西,但这些被我们丢掉在我们登上山顶之际,都会一一回来
  • 不论开发还是逆向,数学水平的高低直接决定了”你的饭碗里有没有肉”
  • 万丈高楼平地起,勿在浮沙筑高台

基于Linux的Nagios监控PNP4nagios可视化扩展

Linux 菜鸟 2年前 (2017-11-30) 8572次浏览 已收录 0个评论
[隐藏]

1、编译安装

准备源代码包 :pnp4nagios-0.6.25.tar.gz
【下载地址在这里:https://sourceforge.net/projects/pnp4nagios/】

主要的依赖包:
        perl-Time-HiRes
        php-gd

*注意*要保证已安装 rrdtool 及各种依赖包,如果没有请先安装 rrdtool。

开始编译安装:

./configure --prefix=/usr/local/pnp4nagios --with-nagios-user=nagios --with-nagios-group=Nagios --with-rrdtool=/usr/bin/rrdtool --with-httpd-conf=/etc/httpd/conf.d --with-perl_lib_path=/usr/local/rrdtool/lib/perl/5.10.1/x86_64-linux-thread-multi/
*选项注明*
–with-rrdtool rrdtool 的二进制命令文件
–with-httpd-conf httpd 配置文件路径
–with-perl_lib_path RRDs 模块文件路径

检查无报错后往下进行

make all
make fullinstall

到此已编译安装成功

2、主要目录和文件

路径 说明
/usr/local/pnp4nagios/share/templates    个人编写的模板放在这个目录
/usr/local/pnp4nagios/share/templates.dist    程序自带的模板以及默认模板
/usr/local/pnp4nagios/var/spool    卷轴文件目录
/usr/local/pnp4nagios/var/perfdata    XML 和 RRD 文件
/usr/local/pnp4nagios/etc/ config.php    Pnp4nagios 配置文件
/usr/local/pnp4nagios/libexec/ process_perfdata.pl    处理性能数据的 perl 脚本

3、联动 Nagios

由于现网 nagios 版本为 4.1.1(2.x 或 3.x 注意事项请参照官方文档做出调整),所以我们使用 bluk with NPCD 的模式(使用 Synchronous mode 则无法出图)。
有关 bluk with NPCD 模式的流程及参数详解请参见: PNP4nagios 工作模式详解 —Bulk Mod with NPCD

3.1、插件

主要检查插件是否返回性能数据,且格式是否正确。可以在 Nagios 的 web 界面查看(Performance Data)
基于 Linux 的 Nagios 监控 PNP4nagios 可视化扩展
性能数据格式

'label'=value[UOM];[warn];[crit];[min];[max]

如果要输出多个性能标签,需要用空格分隔。单引号可以省略,如果标签名存在空格,下滑线等需要加上单引号。
虽然 warn,crit,min,max 可以为空,不过有些在 pnp4nagios 的模板中要用变量引用,所以最好将能写的写上

*注意*根据 bluk with NPCD 模式的流程,只要插件有返回性能数据,nagios 就会按照后边的配置生成卷轴文件。如果 NPCD 服务也已开启,就会进一步生成 XML 和 RRD 文件,并匹配默认模板。所以,对于某些不想画图的对象,最好让它们的插件不要返回性能数据

对于没有返回性能数据且不可修改的插件,可以使用加一个包裹层这个折中办法。
样例如下:

#!/bin/bash

#通过 link 程序将"插件名称 _wrapper"连接到此脚本来启动本程序
#比如,想为 check_mem 程序添加性能数据
#就执行 'ln -s check_mem check_mem_wapper'

#去除程序名后的'wrapper'
NAME=$(echo $0 | sed -e 's/_wrapper//')

#调用插件并捕捉其输出信息
OUTPUT=$(${NAME} $@)

#捕捉插件的退出代码
CODE=$?

#对参数和数据数据进行处理
WARN_VALUE=$(echo $@|awk '{print $2}')

CRITICAL_VALUE=$(echo $@|awk '{print $4}')

PERFDATA=$(echo ${OUTPUT}|awk -F':' '{print $2}')

#重放插件输出至 stdout,并按照格式添加性能数据,通过管道符分离
echo "${OUTPUT}|load=${PERFDATA}%;${WARN_VALUE};${CRITICAL_VALUE};0;100"

#以于插件相同的代码退出
exit ${CODE} 

如果想取消不可修改插件的性能数据输出,可以用包裹层提取输出信息中管道符之前的数据。

3.2、nagios.cfg 文件

检查 nagios.cfg 包含以下参数:

process_performance_data=1	#开启性能数据信息
enable_enviroment_macros=1	#开启全局变量输出


# # service performance data # 
service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
service_perfdata_file_mode=a 
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file 
			
			
# # host performance data 
host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file

参数说明请参考 PNP4naigos 工作模式详解-bulk mode with NPCD

3.3、command.cfg 文件

在 command.cfg 文件中添加以下内容:

define command{ 
        command_name process-service-perfdata-file 
        command_line /bin/mv /usr/local/pnp4nagios/var/service-perfdata /usr/local/pnp4nagios/var/spool/service-perfdata.$TIMET$ 
} 

define command{ 
        command_name process-host-perfdata-file 
        command_line /bin/mv /usr/local/pnp4nagios/var/host-perfdata /usr/local/pnp4nagios/var/spool/host-perfdata.$TIMET$ 
}

3.4 template.cfg 文件

*提示*以下内容也可以分别定义在 hosts.cfg 和 services.cfg 中。如果定义在 template.cfg,需要在 nagios.cfg 中指定

define host { 
        name host-pnp
        action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_
        register 0 
} 

define service {
        name srv-pnp 
        action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
        register 0 
}

如果要求鼠标悬停出图的话,需要在 action_url 的后面加上
‘ class=’tips’ rel=’/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
和 class=’tips’ rel=’/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=_HOST_

同时将源码包中的 contrib/ssi/下的文件复制到 nagios 的 share/ssi/下

这是鼠标悬停效果:
基于 Linux 的 Nagios 监控 PNP4nagios 可视化扩展

最后给需要的对象引用模板就可以了,下面是最终效果:
基于 Linux 的 Nagios 监控 PNP4nagios 可视化扩展

4、PNP4nagios 模板

这是一个个人模板的单数据测试样例:

<?php
#
# Plugin: check_cpu
#
# LOAD

$ds_name[1] = "The Load Of Cpu";
$opt[1]  = "--vertical-label \"LOAD(%)\" --title \"CPU\" ";
$opt[1] .= "--upper-limit 120 --lower-limit 0";
$def[1]  =  rrd::def("cpu", $RRDFILE[1], $DS[1], "AVERAGE");
$def[1] .=  rrd::gradient("cpu", "ff5c00", "ffdc00", "The Load Of Cpu", 20);
$def[1] .=  rrd::gprint("cpu", array("LAST", "MAX", "AVERAGE"), "%6.2lf $UNIT[1]");
$def[1] .=  rrd::line1("cpu", "#000000");
$def[1] .=  rrd::hrule($MAX[1], "#000000");

if($WARN[1] != ""){
	if($UNIT[1] == "%%"){ $UNIT[1] = "%"; };
	$def[1] .= rrd::hrule($WARN[1], "#FFFF00", "Warning ".$WARN[1].$UNIT[1]."\\n");
}

if($CRIT[1] != ""){
	if($UNIT[1] == "%%"){ $UNIT[1] = "%"; };
	$def[1] .= rrd::hrule($CRIT[1], "#FF0000", "Critical ".$CRIT[1].$UNIT[1]."\\n");
}

?>

通过序号区分是 XML 文件中的第几段数据。最终表格效果图如下:
基于 Linux 的 Nagios 监控 PNP4nagios 可视化扩展

*注意*该样例使用的是 rrd::前缀()这样的格式。也可以直接用双引号括住,直接按 rrdtool 命令的格式来写,具体可以参考 check_swap.php 这个模板

$ds_name[1] = "The Load Of Cpu";

$ds_name[] :WEB 页面中 Datasouce 的信息
基于 Linux 的 Nagios 监控 PNP4nagios 可视化扩展
控制表头描述那一块

$opt[1]  = "--vertical-label \"LOAD(%)\" --title \"CPU\" ";
$opt[1] .= "--upper-limit 120 --lower-limit 0";

$opt[] :用来定义 rrdtool graph 要用到的选项。后续的要用.=追加

要用到的选项:
–vertical-label :图像中的竖轴标签
–title :图像标题(支持$hostname 和$servicedesc 分别定义主机名和服务描述)
–upper-limit :定义竖轴最大值,如果超过则不予显示,依然可以自动缩放

*注意*一般最大值定义比实际上要大一点,比如百分比最大的 100,这个就定义成 120

–lower-limit :定义竖轴最小值,同上

$def[1]  =  rrd::def("cpu", $RRDFILE[1], $DS[1], "AVERAGE");

$def[] :用来定义 rrdtool graph 要用到绘图信息。后续的要用.=追加
$RRDFILE[] :rrd 文件的路径
$DS[] = :数据源名称
括号前的表示 rrdtool graph 要用到的信息前缀,括号中的字段信息:
1、定义数据来源名称
2、定义来源 RRD 文件
3、数据源
4、聚合计算方式

$def[1] .=  rrd::gradient("cpu", "ff5c00", "ffdc00", "The Load Of Cpu", 20);

Gradient 这个前缀在 rrdtool graph 中并未发现,括号中的字段信息:
1、数据来源名称
2、颜色十六进制(第一层颜色,相当于一个蒙版)
3、颜色十六进制(第二层颜色,底部标注信息也是显示该颜色)
4、底部标注信息的名称
5、未知(测试结果无变化,观测其他模板可以省略)

*渐变颜色组合*
第一层    第二层    效果
66CCFF    0000ff    浅蓝色渐变
ff5c00    ffdc00    橘黄色渐变

这两个颜色控制可以达到一个区域图的色彩渐变效果,使图像更美观一些,单数据的图使用这个效果不错。如果要画线条图可以不写这一行

$def[1] .=  rrd::gprint("cpu", array("LAST", "MAX", "AVERAGE"), "%6.2lf $UNIT[1]");

Gprint 前缀表示的是标注信息,也就是这里的第一行

括号中的信息:
1、数据来源名称
2、要显示的信息(保持大写,基本特殊要求的无需更改)
3、数据显示格式,一般使用双精度浮点型 lf,6 控制的数据与之前的间隔距离,2 代表小数点后有几位,$UNIT[]是单位,也可以直接指定

*注意*单位是%的话,需要使用%号进行转义

$def[1] .=  rrd::line1("cpu", "#000000");

Line 前缀代表线条图,后面的数字表示粗细程度,分为 1,2,3 这三个级别。括号中的信息:
1、数据来源名称
2、颜色十六进制
3、标注信息名称(如果已定义 gradient,可以省略)

$def[1] .=  rrd::hrule($MAX[1], "#000000");
$def[1] .= rrd::hrule($WARN[1], "#FFFF00", "Warning ".$WARN[1].$UNIT[1]."\\n");
$def[1] .= rrd::hrule($CRIT[1], "#FF0000", "Critical ".$CRIT[1].$UNIT[1]."\\n");

Hrule 前缀是定义竖轴标线,做一个最大值的黑色标线(如果有最大值的话),一个告警黄色标线,严重红色标线。括号中的第三个字段定义说明格式,重点是 .$WARN[1].$UNIT[1]. ,注意看,两边都有个英文句号
基于 Linux 的 Nagios 监控 PNP4nagios 可视化扩展


学习心得 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明基于 Linux 的 Nagios 监控 PNP4nagios 可视化扩展
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址