根据其他检查的值创建聚合Nagios检查

时间:2014-01-09 17:27:33

标签: linux nagios

我对十个不同的Web服务器进行了多次检查。其中一项检查是监视已建立连接的数量(使用neststat和findstr过滤ESTABLISHED)。它在服务器WEB1到WEB10上按预期工作。我可以绘制(使用pnp4nagios)TCP建立的连接计数,因为输出是一个整数。如果它超过某个阈值,它会进入警告状态,在另一个阈值之上,它变得至关重要。

个别支票按照我想要的方式运作。

但是,我要做的是将所有这些连接添加到一个图表中。这将是某种聚合图或所有其他图的SUM。

有没有办法从其他检查中获取值/输出并将它们添加到一个?

Server  TCP Connections

WEB1    223
WEB2    124
WEB3    412
WEB4    555
WEB5    412
WEB6    60
WEB7    0
WEB8    144
WEB9    234
WEB10   111

TOTAL   2275

我想只绘制总数。

1 个答案:

答案 0 :(得分:1)

Nagios本身不以任何方式使用性能数据,它只需要它并将其传递给您在配置中指定的任何内容。所以在Nagios中没有好的方法可以做到这一点(你可以将nagios的性能输出传递给一些tee命令,它将它传递给pnp4nagios和一个不同的脚本,它总结了所有东西,但这很难维护)。

如果我有你的问题,我会做以下事情:

在当前插件的末尾,执行类似

的操作
echo $nconnections > /some/dir/connections.$NAGIOS_HOSTNAME

其中nconnections是插件找到的连接数。这个例子是shell,如果你为插件使用一些不同的语言,则替换。重要的是:将数字写入插件中的特殊文件应该很容易。

然后,创建一个新插件,其代码类似于:

#!/bin/bash
WARN=1000
CRIT=2000
sumconn=$(cat /some/dir/connections.* | awk '{sum += $1} END {print sum}')
if [ $sumconn -ge $CRIT ]; then
    echo "Connection sum CRITICAL: $summconn connections|conn=$sumconn;$WARN;$CRIT"
    exit 2
elif [ $sumconn -ge $WARN ]; then
    echo "Connection sum WARNING: $summconn connections|conn=$sumconn;$WARN;$CRIT"
    exit 1
else
    echo "Connection sum OK: $summconn connections|conn=$sumconn;$WARN;$CRIT"
    exit 0
fi

这样,无论何时探测单个服务器,您都将保存新插件的数据;插件只会获取那里的数据,这使得它非常短。当然,摘要的输出会略微落后,但您可以通过将各个服务的normal_check_interval设置得足够低来最小化这种影响。

如果您想获得想象力,请添加代码以从缓存目录中删除早于某个阈值的文件。或者,您甚至可以从nagios配置中删除单个服务,如果您对每个服务器的连接数不感兴趣,则可以从每个服务器的summation插件调用individual-server-plugin。

编辑:

要解决nrpe问题,请创建一个check_nrpe_and_save plugin,如下所示:

#!/bin/bash
output=$($NAGIOS_USER1/check_nrpe "$@")
rc=$?
nconnections=$(echo "$output" | head -1 | sed 's/.*you have \([0-9]*\) connections.*/$1/')
echo $nconnections > /some/dir/connections.$NAGIOS_HOSTNAME
echo $output
exit $rc

为此脚本创建新的define command条目,并在服务定义中使用新命令。您必须将sed模式调整为插件输出的模式。如果常规输出中没有连接数,则.*connections=\([0-9]*\);.*之类的表达式应该有效。这个check_nrpe_and_save应该像check_nrpe一样,特别是它应该输出相同的字符串并返回相同的退出代码,并写入特殊文件。