bash scripting: watchdog para load, prevenir crashes

Sem comentários

Terminal / Consola

Muitos SysAdmins (Administradores de Sistemas) deparam-se por vezes com o problema de, por algum motivo (ou um DDoS (Ataque de Negação de Serviço Distribuído), um loop infinito ou mal programado em algum script, etc.), o load de um determinado computador/servidor chega a valores tão altos que o sistema fica praticamente parado, levando a quebras do serviço.

Uma forma um pouco brusca mas eficaz de evitar esse problema é criar um watchdog que, a partir do momento em que o load chegue a um valor alto (determinado pelo utilizador), reinicia os serviços que normalmente poderão estar a causar problemas.

Aqui está um pequeno ficheiro em bash scripting (ou shell scripting, como preferirem) que utilizo para fazer isso mesmo.

Neste caso específico, o processador tem 2 cores, como tal, um load de 2 significa que o processador está a ser utilizado completamente (um load de 1 significaria, neste caso, que o processador estava "a meio", um load de 4 que estaria para processar 2 vezes mais do que a sua capacidade, valor este que vai reduzindo consoante vai processando os pedidos).

Vou também assumir que o script se encontra em /root/scripts/ e que tenho um script /root/scripts/restart_services que reinicia todos os serviços que considero relevantes.

Notem que os valores (nomes dos ficheiros / valor máximo de load) podem mudar de servidor para servidor.

Primeiro, criamos o ficheiro:

# nano /root/scripts/load_wd.sh

Agora, cola-se este conteúdo, devidamente editado

#!/bin/bash

EMAIL="o.seu.email@qualquercoisa.com" # ALTERAR: O email que vai receber o aviso
SUBJECT="Load Alert - $(hostname)" # ALTERAR: Assunto do email
FILE="/root/scripts/load_wd_result" # O ficheiro "temporário" para onde é gravado o que será enviado como email
MAXVAL=2 # ALTERAR: O valor máximo do load (exclusive)

LD="$(uptime|awk '{print $(NF-2)}'|cut -d. -f1)"
if test $LD -gt $MAXVAL
then
echo "$(/root/scripts/restart_services)" >> $FILE # ALTERAR: Aqui está o ficheiro/comando que vai ser executado caso se verifique o load excessivo
mail -s "$SUBJECT" "$EMAIL" < $FILE
fi

Para Guardar usa-se "CTRL + O" (confirma-se a escrita com um enter) e para sair "CTRL + X".

Obviamente não se podem esquecer de tornar o ficheiro executável.

# chmod 700 /root/scripts/load_wd.sh

E agora, colocá-lo na crontab, adicionando-lhe a seguinte linha:

*/5 * * * * /root/scripts/load_wd.sh >> /dev/null 2>&1

Para quem não sabe, para abrir o crontab e editar, é normalmente usado:

# crontab -e

Artigos Relacionados

Seja o primeiro a escrever um comentário!