Bash
是否可以使用循環為 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
您的腳本(如所寫)不會按照您的預期進行。最大的問題是您可能會
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
這只是一個展示這個想法的例子。