2016-02-05 180 views
0

简短版本:Nagios输出格式化

是否有更好的方式来编写下面的检查?

./check_snmp -H x.x.x.x -o oidstring -C public | awk '{print $4}' | sed 's/.$/.&/' | sed -e 's/$/ KB/' 

龙版本:

我有一个Nagios的服务检查输出三个数字:

./check_snmp -H x.x.x.x -o oidstring -C public 

SNMP OK - 711 | iso.oidstring=711 

这是我做了什么把它格式化为我喜欢并给予准确值:

./check_snmp -H x.x.x.x -o oidstring -C public | awk '{print $4}' | sed 's/.$/.&/' | sed -e 's/$/ KB/' 

71.1 KB 

输出完美,我可以在CentOS环境下运行命令没有问题,但是当试图在Nagios中执行检查时,服务不会返回值,而是我得到(stdout上没有输出)。奇怪的是,我甚至可以在Nagios中成功执行服务测试检查,但显示主机和服务值的页面是提供(stdout上没有输出)的页面。

我觉得Nagios不喜欢我试图格式化我的输出的方式,至少在网页上的东西。

是否有一个'整洁'的方式来写上面的检查?

在此先感谢。

+0

我不认为这是你问什么,但你可以不SED报表做和更改awk'awk'{print($ 4/10)“KB”}''。 – jas

回答

2

你可以将它使用一个单一的sed(使用破折号锚)做:

... | sed 's/^.*- \([0-9]*\)\([0-9]\) .*$/\1.\2 KB/' 

或单AWK:

... | awk '{printf "%s KB\n", $4/10}' 
+0

这两个例子都很好,谢谢! FTR,@jas上面的例子也很棒。感谢您帮我清理我丑陋的服务检查。 – DrewCot

0

我Icinga显示我一个空。

$USER1$/check_snmp -H $HOSTADDRESS$ -C SNMP -o .1.3.6.1.2.1.33.1.2.5.0 $ARG1$ | awk '{printf "%s V\n", $4/10}'

当我手动做到这一点我有正确的输出:80.2V