首先,您应该检查检查返回的 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”。如果在绘制图表时合并更合适,请尝试并将其设置为“LAST”。
gprintf
使用以下printf
语法的最后一行,其中lf
将是前面的精度为 4 和 3 个数字的双精度数 (3.4) [2] 更改%lf
为%d
(integer) 可能会解决图例的问题。
您可以按如下方式进行更改,例如
$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 将不适合 rrd 存储的附加数据存储在其自己的*.xml
文件中。这些 xml 文件会随着每次正常运行的 rrd 更新而更新process_perfdata.pl
。其中一个是“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