是否可以使用循环为 NAGIOS 添加磁盘大小监控脚本?

是否可以使用循环为 NAGIOS 添加磁盘大小监控脚本?

我有一个进程可以获取服务器上所有磁盘的大小,并将其写入这样的文件中

# 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

这只是一个证明这个想法的例子。

相关内容