我有一个进程可以获取服务器上所有磁盘的大小,并将其写入这样的文件中
# cat disksize
DISK# ACTUAL WARNING CRITICAL
disk1 12 20 30
disk2 45 60 75
文件的第一行供参考,显示每一列的用途。下面是监控脚本,但我不确定它是否适用于 nagios,因为其中一些大小可能会导致正常,有些可能会导致警告。任何人对此有任何见解,请
# cat check-disk_size
#!/usr/bin/env bash
LOGFILE='disksize'
cat ${LOGFILE} | while
read disk_name actual warning critical
do
if [ $actual -ge $warning ]; then
echo "WARNING: $disk_name has reached standard warning limit, Current actual: ${actual}"
exit 1
elif [ $actual - ge $critical ]; then
echo "WARNING: $disk_name has reached standard critical limit, Current actual: ${actual}"
exit 2
else
echo "OK: $disk_name is under optical limit, Current actual: ${actual}"
exit 0
done
答案1
您的脚本(如所写)不会达到您的预期。最大的问题是您可能会exit 0
过早地退出循环,错过随后可能出现的关键磁盘条目。危险性较小的是,当存在严重问题时,脚本可能会exit 1
发出警告。 Nagios 将基于退出代码检查的状态,因此您的脚本可能仅根据文件中条目的顺序给出令人困惑的结果。
我建议重组脚本,以便根据文件中的数据准确返回您所期望的内容。它应该滚动最严重的警报吗?它应该计算文件中有多少个警报吗?最安全的想法是汇总最差的警报,以便每个磁盘都必须低于警告阈值,Nagios 警报才能“正常”,但您的环境可能会规定其他要求。
以下是出现最严重警报的一种可能性:
awk '
BEGIN {
warn=0
crit=0
}
{
if ($2 > $3) ++warn
if ($2 > $4) ++crit
}
END {
if (crit) {
print "CRITICAL: one or more disks have reached the standard crtical limit"
exit 2
} else if (warn) {
print "WARNING: one or more disks have reached the standard warning limit"
exit 1
} else {
print "OK: all disks are under their limits"
exit 0
}
}
' < file
这只是一个证明这个想法的例子。