Можно ли добавить скрипт мониторинга размера диска для NAGIOS с помощью цикла?

Речь идет не только об объединении нескольких sedкоманд. (Джейсен объяснил эту часть в своем ответе ). Вы можете узнать больше:

cat file | sort...

catне нужно, так как вы можете дать sortимя файла, вам не нужно catраньше, но сделайте

sort file | uniq -c | awk...

uniq -cудаляет дубликаты и добавляет счетчик, но, поскольку следующий awkиспользует только третий comlun, поэтому счетчик все равно сбрасывается. Вы можете удалить -cи заменить весь uniqопцией -uна sort:

.
sort -u file | awk -F " " '{print $2}' | sed...

Здесь вы неправильно используете awkвместо cut -d" " -f 2, но вы можете это сделать. Но теперь вы можете продолжить использовать awkили выполнить этот шаг и в sed. Нет необходимости переключать инструменты для задачи, которую одинаково можно выполнить в каждом инструменте :

.
sort -u file | sed 's/[^ ]* *\([^ ]*\).*/\1 working IP/'...

Здесь уже странно не знать исходный файл. Но если вы добавляете working IPк каждой строке, удалите его для всех в диапазоне до первого появления,это должно быть идентично добавлению во всех строках, кроме первой:

sort -u file | sed 's/[^ ]* *//;s/.*//;1!s/$/ working IP/'

Затем pasteможно легко включить в sed, собрав строки в удерживаемом пространстве и позже заменив первые новые строки пробелом, а все остальные — working IP. В то же время удаление последней строки($ d)может быть выполнено, поэтому целая миля -длинная командная строка с 6 различными командами и 8 трубами сгорает до простой sort, только одной трубы и короткой sedсценарий:

sort -u file | sed 's/[^ ]* *//;s/.*//;$!{H;1h;d;};x;s/\n/ /;s// working IP /g'

Идентичный результат без затрат целой жизни на чтение вариантов на manстраницах и анализ происходящего на каждом этапе.

0
24.11.2021, 12:26
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

Это просто пример для демонстрации идеи.

1
24.11.2021, 14:52

Теги

Похожие вопросы