루프를 사용하여 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

이것은 아이디어를 증명하는 예일뿐입니다.

관련 정보