如果这个问题已经在某个地方得到解答,请原谅我——我发现很多类似的问题,但似乎没有什么能解决我的问题。
我只是在 nagios 中测试一些 Windows 服务器的正常运行时间,如果它超过了某个值,我希望发出警报。
昨天它还在运行,但在某些时候我似乎弄坏了一些东西,但又无法准确找出问题所在。
首先,以 root 身份进行测试:
./libexec/check_uptime.sh x.x.x.x 28 30
1449919
OK. Uptime 16 Days.
作为 nagios,通过 su - nagios 测试工作:
su - nagios
-bash-3.2$ pwd
/usr/local/nagios
-bash-3.2$ ./libexec/check_uptime.sh xx.xx.xx.xx 28 30
1449969
OK. Uptime 16 Days.
但是我相信“正确”的测试方法是通过 su - nagios -c?
su - nagios -c "./libexec/check_uptime.sh 10.36.128.22 28 30"
1450084
OK. Uptime 16 Days.
然而该命令在网页/守护进程中仍然失败
Uptime UNKNOWN 15-03-2016 11:04:24 0d 1h 4m 10s 3/3 0
该命令定义对我来说看起来是正确的:
define command{
command_name check_uptime
command_line $USER1$/check_uptime.sh -H $HOSTADDRESS$ 25 28
}
服务定义如下:
define service{
use generic-service
hostgroup_name Windows-Servers
service_description Uptime
check_command check_uptime
}
不知何故在编辑中丢失了脚本,这里再次提供:
#!/bin/bash
## Shamelessly adapted from http://correctlife.blogspot.de/2011/02/wrapper-on-checkntuptime.html
HOSTADDRESS=$1
MAXWARN=28 # in days
MAXCRIT=30 # in days
MINCRIT=1
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
SECONDS=`/usr/local/nagios/libexec/check_nt -H $HOSTADDRESS -p 12489 -s $ekr3t -v COUNTER -l "\\System\\System Up Time"`
#echo $SECONDS
if [ $SECONDS == 0 ]; then
echo "UNKNOWN: No uptime recieved. Uptime Value: $SECONDS"
exit 3
fi
HOURS=$(( $SECONDS / 60 / 60 ))
SECONDSINHOURS=$(( $HOURS * 60 * 60 ))
DAYS=$(( $HOURS / 24 ))
REMAININGSECONDS=$(( $SECONDS - $SECONDSINHOURS ))
MINUTES=$(( $REMAININGSECONDS / 60 ))
FORMEDUPTIME="${DAYS} Days"
if [[ $HOURS -lt $MINCRIT ]]; then
echo "CRITICAL: System restarted in last hour."
exit 2
fi
if [[ $DAYS -ge $MAXCRIT ]]; then
echo "CRITICAL: System up over ${MAXCRIT} Days."
exit 2
fi
if [[ $DAYS -ge $MAXWARN ]]; then
echo "WARNING: System up over ${MAXWARN} Days."
exit 1
fi
echo "OK. Uptime $FORMEDUPTIME."
exit 0
答案1
我是个白痴。
线索来自于命令定义。
在某个时候,我会有帮助地“添加”-H,这显然意味着我将-H作为主机名传递;)
本来应该:
define command{
command_name check_uptime
command_line $USER1$/check_uptime.sh $HOSTADDRESS$ 25 28
}