sar -u 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 говорится об ошибке "синтаксиса". Любые идеи?
Правильный способ сделать это - НЕ делать этого.
Использование ЦП (% использования или% простоя) является фиктивным значением для мониторинга - оно может (и ДОЛЖНО) составлять 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 ...
хорошо правильная команда это
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)
}
}'