2

我在 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 绘制特定服务检查的图形以不平均或舍入结果?事实上,因为它是一个整数,所以我根本不想要任何小数点。有任何想法吗?

4

2 回答 2

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”。如果在绘制图表时合并更合适,请尝试并将其设置为“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

于 2013-06-09T15:17:19.390 回答
0

请注意,LAST按照其他答案中的说明在 .php 模板中指定,您需要首先在 pnp4nagios 文件“rra.cfg”中创建 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 文件现在应该有一个附加的“cf”(合并功能)。新的 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>
于 2017-06-26T14:34:43.177 回答