Сценарий оболочки для уведомления, когда загрузка процессора достигает 100%

сар -у 1 | awk '{print $9}'

так что это даст мне значение "CPU Idle" каждую секунду. Я хотел бы получить электронную почту в этом случае значение идет в "0" 10 раз подряд?

Каков был бы подходящий способ сделать это?

Я нашел предварительное решение

sar -u 1 | awk '{ if (int($9)==0) { 
                 i=i+1; {
                           print i, $9
                         }
                  }
       if (int($9)>=0) {
                  i=0
               }
               if (i>=10) print "sending email"
            }'

но в последней строке, где я печатаю "отправка электронной почты", я не могу поставить вызов Mutt, как это

sar -u 1 | awk '{ if (int($9)==0) { 
                 i=i+1; {
                           print i, $9
                         }
                  }
       if (int($9)>=0) {
                  i=0
               }
               if (i>=10) mutt -s "VPNC Problem" test@test.com < /home/semenov/strace.output
            }'

проблема в том, что в вызове команды Mutt написано "синтаксическая ошибка". Есть идеи?

2 ответа

Решение

Хорошо , правильная команда это

sar -u 1 | awk '{ if (int($9)==0) { 
                 i=i+1; {
                           print i, $9
                         }
                  }
       if (int($9)>=0) {
                  i=0
               }
               if (i>=10) {
                      print "Sending email";
                      cmd="mutt -s  \"test\" email@domain.com < /home/semenov/strace.output";
                      system(cmd)
               }
            }'

Надлежащий способ сделать это - НЕ делать этого.

Загрузка ЦП (% используется или% простаивает) является поддельным значением для мониторинга - оно может (и ДОЛЖНО) быть 100% в разное время при нормальной работе. Вы действительно хотите кучу предупреждений, потому что вы получили 5-10 веб-запросов одновременно, когда ваша система мониторинга проверила загрузку процессора? Держу пари, ответ - нет.

Вместо этого вы должны следить за средней нагрузкой (сообщается uptime среди других инструментов), который является мерой количества процессов, которые хотят запустить прямо сейчас (длина RunQ в сроки планирования ОС).
Значение обычно указывается в виде трех значений: средняя загрузка за 1 минуту ("сейчас"), средняя загрузка за 5 минут и средняя загрузка за 15 минут.


Средние значения нагрузки ниже 1 указывают на "незагруженную" систему (много свободного времени ЦП, нет программ, ожидающих выполнения).
Высокие средние нагрузки ("высокая" по отношению к количеству процессоров, которые у вас есть, и интерактивная производительность вашей системы под нагрузкой) являются поводом для беспокойства и должны быть исследованы.

Обычно я использую 10 в качестве порогового значения для аварийных сигналов средней нагрузки - это значение достаточно высокое, чтобы вы обычно не видели его в производстве, но достаточно низкое, чтобы у вас было время реагировать на ситуацию после срабатывания сигнализации.


Скрипт для мониторинга в любом случае тривиален:

# [get your value and stuff it into $value
# Pick an appropriate threshold and stuff it into $threshold
if [ $value -gt $threshold ]; then  # (-gt or -lt as appropriate)
    echo "`hostname` needs attention!" | \
         mail -s "`hostname` monitoring alert" user@host
fi

Часть "получить и заполнить" оставлена ​​читателю в качестве упражнения.
Если вы действительно хотите сделать все правильно, вам следует изучить некоторые системы мониторинга и SNMP...

Другие вопросы по тегам