Nagios PNP4Nagios平均整数值?

时间:2013-05-21 19:59:44

标签: powershell nagios

我在nagios中有一个powershell脚本,它使用内置的Windows netstat命令返回一个整数。命令如下:

$conns = nestat -na | select-string -pattern "ESTABLISHED"
$NumberOfConnections = $conns.count
$NumberOfConnections

输出类似于:

123

按预期工作。但是当我将Nagios图形化并每三分钟运行一次检查时,结果将在pnp4nagios中绘制,如120.657或125.124(它将值平均为浮点数而不是绘制整数)。

是否有人知道如何强制Nagios和PNP4Nagios RRDtool图表进行特定服务检查以使结果不平均或舍入?事实上,因为它是一个整数,我根本不需要任何小数点。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

首先,您应该检查检查返回的perfdata - 应该是'key'=value之后的有效perfdata规范。

然后了解pnp4nagios模板是如何工作的 - 取决于您的版本(0.6是积极开发的),例如,这里:[1]

默认情况下,模板将通过其检查命令名称进行查找(因此,如果您没有为自定义检查创建模板,则可能使用了default.php模板。)

根据您安装pnp4nagios的方式,可以在$prefix/share/templates.dist下方找到模板目录 - 将您的设置放入$prefix/share/templates以防止它们在升级过程中丢失。现在将$prefix/share/templates.dist/default.php复制到$prefix/share/templates/<yourcheckcommandname>.php并开始编辑(确保网络服务器的用户可以打开它)。

你会看到这只是创建对rrdtool的调用,主要是在PHP代码中附加字符串。关于你的问题:

  • 您不想拥有AVG,而是想要传奇中的当前值
  • 不需要浮点格式

看着

$def[$KEY]  = rrd::def     ("var1", $VAL['RRDFILE'], $VAL['DS'], "AVERAGE");
$def[$KEY] .= rrd::gradient("var1", "3152A5", "BDC6DE", rrd::cut($VAL['NAME'],16), 20);
$def[$KEY] .= rrd::line1   ("var1", $_LINE );
$def[$KEY] .= rrd::gprint  ("var1", array("LAST","MAX","AVERAGE"), "%3.4lf%S".$VAL['UNIT']);

在第一行中,您将var1定义为“AVERAGE”。如果在绘制图形时整合更合适,请四处游戏并将其设置为“最后”。

gprintf的最后一行遵循printf语法,其中lf将是精度为4的双精度数和前面的3个数字(3.4)[2] 将%lf更改为%d(整数)可能会解决图例问题。

您可以更改如下,例如

$def[$KEY]  = rrd::def     ("var1", $VAL['RRDFILE'], $VAL['DS'], "LAST");
$def[$KEY] .= rrd::gradient("var1", "3152A5", "BDC6DE", rrd::cut($VAL['NAME'],16), 20);
$def[$KEY] .= rrd::line1   ("var1", $_LINE );
$def[$KEY] .= rrd::gprint  ("var1", array("LAST","MAX","AVERAGE"), "%d %S".$VAL['UNIT']);

这些模板还有更多的可能性 - 比如缩放y轴等 - 那就是rrdtool语法。

为了打印最新值Nagios / Icinga Core如何将perfdata发送到PNP4Nagios,您还可以使用另一个技巧--pnp在其自己的*.xml文件中存储不适合rrd存储的其他数据。这些xml文件随process_perfdata.pl运行的每个正常rrd更新一起更新。 其中一个是“ACT”(检查[1]),它可以在第一个数据源上访问,就像模板代码中的$ACT[1]一样,然后作为注释字符串传递给rrdtool调用。

$def[$KEY] .= "COMMENT:\"Current $ACT[$key]\\n\" ";"

[1] http://docs.pnp4nagios.org/pnp-0.6/tpl

[2] http://www.cdf.toronto.edu/~ajr/209/notes/printf.html

答案 1 :(得分:0)

请注意to specify LAST in the .php template as described in the other answer,您需要先在pnp4nagios文件&#34; rra.cfg&#34;中创建LAST作为合并功能。该文件中应该存在AVERAGE,MIN和MAX的现有值。

在我的系统中,该文件不存在,但我确实有rra.cfg-sample。我将/usr/local/pnp4nagios/etc/rra.cfg-sample复制到了/usr/local/pnp4nagios/etc/rra.cfg。然后我编辑/usr/local/pnp4nagios/etc/rra.cfg添加:

RRA:LAST:0.5:1:2880
RRA:LAST:0.5:5:2880
RRA:LAST:0.5:30:4320
RRA:LAST:0.5:360:5840

请注意,这些数字对应于我的步长值60秒(我每分钟轮询一次),因此您应该匹配rra.cfg文件中的现有值。

然后你必须删除现有的RRD文件并让pnp4nagios重新创建它们。

新的RRD文件现在应该有一个额外的&#34; cf&#34; (合并功能)。新的RRD文件也将增加25%。

[server]# rrdtool dump Interface_Drops_-_MET_ATL1_VIRL-FLAT.rrd | grep cf

            <cf> AVERAGE </cf>
            <cf> AVERAGE </cf>
            <cf> AVERAGE </cf>
            <cf> AVERAGE </cf>
            <cf> MAX </cf>
            <cf> MAX </cf>
            <cf> MAX </cf>
            <cf> MAX </cf>
            <cf> MIN </cf>
            <cf> MIN </cf>
            <cf> MIN </cf>
            <cf> MIN </cf>
            <cf> LAST </cf>
            <cf> LAST </cf>
            <cf> LAST </cf>
            <cf> LAST </cf>