Bash

是否可以使用循環為 NAGIOS 添加磁碟大小監控腳本?

  • November 24, 2021

我有一個程序可以獲取伺服器上所有磁碟的大小,將其寫入這樣的文件中

# 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

您的腳本(如所寫)不會按照您的預期進行。最大的問題是您可能會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

這只是一個展示這個想法的例子。

引用自:https://unix.stackexchange.com/questions/678887