ループを使用して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警告が「正常」になるために各ディスクが警告しきい値を下回るように最悪の警告を集計することです。ただし、環境によっては異なる要件が必要になる場合があります。

最も深刻な警告の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

これはアイデアを証明する例です。

関連情報