Сценарий оболочки для уведомления, когда загрузка процессора достигает 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...