Script de shell para notificar quando o uso da CPU atingir 100%

4

sar -u 1 | awk '{print $9}'

então isso me dará valor "CPU Idle" a cada segundo. Eu gostaria de receber e-mail, neste caso, o valor vai para "0" 10 vezes seguidas?

Qual seria a maneira apropriada de fazer isso?

Eu encontrei uma solução preliminar

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"
            }'

mas na última linha onde imprimo "enviando e-mail" não consigo colocar a chamada no mutt, assim

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" [email protected] < /home/semenov/strace.output
            }'

o problema é que ele diz "sintaxe" erro na chamada de comando do mutt. Alguma idéia?

    
por DmitrySemenov 27.09.2012 / 20:41

2 respostas

0

o comando correto está correto

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 protected] < /home/semenov/strace.output";
                      system(cmd)
               }
            }'
    
por 27.09.2012 / 21:53
2

A maneira apropriada de fazer isso é NÃO fazer isso.

A Utilização da CPU (% usada ou% ociosa) é um valor falso para monitorar - pode (e DEVE) ser 100% em vários momentos durante a operação normal. Você realmente quer um monte de alertas porque você recebeu 5-10 solicitações da Web ao mesmo tempo em que seu sistema de monitoramento verificou a utilização da CPU? Eu estou apostando que a resposta é não.

Em vez disso, você deve monitorar Load Average (relatado por uptime entre outras ferramentas), que é uma medida do número de processos que deseja executar agora (o comprimento de RunQ em Termos de agendamento do SO).
O valor geralmente é relatado como três valores, média de carga de 1 minuto ("agora"), média de carga de 5 minutos e média de carga de 15 minutos.

As médias de carga abaixo de 1 indicam um sistema "descarregado" (muito tempo de CPU livre, nenhum programa aguardando para ser executado). Altas médias de carga (sendo "alto" relativo ao número de CPUs que você possui e ao desempenho interativo do seu sistema sob carga) são motivo de preocupação e devem ser investigadas.

Eu normalmente uso 10 como meu limite para alarmes médios de carga - um valor alto o suficiente para que você não o veja normalmente na produção, mas baixo o suficiente para que você tenha tempo de responder à situação quando o alarme disparar. / p>

O script a ser monitorado nos dois casos é trivial:

# [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

A parte de obtê-e-recheio é deixada como um exercício para o leitor.
Se você realmente quer fazer direito, você deve investigar alguns sistemas de monitoramento e SNMP ...

    
por 27.09.2012 / 20:49