サーバー上のすべてのディスクのサイズを取得し、次のファイルに書き込むプロセスがあります。
# 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警告が「正常」になるために各ディスクが警告しきい値を下回るように最悪の警告を集計することです。ただし、環境によっては異なる要件が必要になる場合があります。
最も深刻な警告の1つの可能性は次のとおりです。
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
これはアイデアを証明する例です。