Monitoramento · 7 min read · Oct 09, 2025
O Cluster Web Perfeito com Balanceamento de Carga e Alta Disponibilidade com 2 Servidores Rodando Xen no Ubuntu 8.04 Hardy Heron - Página 9
15. Scripts personalizados para monitoramento (lb1, lb2, web1, web2)
Eu fiz alguns scripts bash para monitorar toda a configuração (eles são um pouco feios, mas funcionam). Se você melhorá-los, sinta-se à vontade para me enviar por e-mail!
15.1 Monitoramento de lb1.example.com
Primeiro, devemos instalar o sendmail para que lb1.example.com possa enviar e-mails:
apt-get install sendmail
O primeiro script verificará se o balanceador de carga de backup (lb2.example.com) ainda está disponível para assumir:
vi /root/lb2_check
#!/bin/bash
# Verificação do balanceador de carga de backup
# Copyright (c) 2008 blogama.org
# Este script é licenciado sob a GNU GPL versão 2.0 ou superior
# ---------------------------------------------------------------------
### Este script faz 1 verificação ###
### 1) Verifica se o balanceador de carga de backup falhou e envia notificação por e-mail ###
### A ser modificado ###
EMAIL="[email protected]"
###### Não faça modificações abaixo ######
### Binários ###
MAIL=$(which mail)
### Para restaurar ao original quando o problema for corrigido ###
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/lb2_problem.txt
> /var/log/ha-log
exit 1;
fi
fi
### Verifica se já foi notificado ###
cd /root
if [ -f lb2_problem.txt ]; then
exit 1;
fi
### Verifica se o Heartbeat está rodando em espera quente ###
tail /var/log/ha-log 2>&1 | grep "Asking other side for ping node count"
if [ "$?" -ne "1" ]; then
echo "O balanceador de carga de backup falhou" > /root/lb2_problem.txt
$MAIL -s "Problema no balanceador de carga de backup" $EMAIL < /root/lb2_problem.txt
fiTornamos este script executável:
chmod +x /root/lb2_check
Se o lb2.example.com falhar, ele criará um arquivo /root/lb2_problem.txt e enviará uma notificação por e-mail. Até que o arquivo lb2_problem.txt esteja lá, ele não verificará novamente. Também devemos esvaziar o arquivo de log uma vez que o problema esteja corrigido para que o script funcione corretamente.
Uma vez que o problema esteja corrigido em lb2.example.com, execute manualmente:
/root/lb2_check fix
O próximo script verificará se alguma porta falhou em web1 ou web2 verificando o arquivo de log do ldirectord. Já existe uma notificação por e-mail com o ldirectord, mas ele envia milhões de notificações, o meu envia apenas uma até que você corrija o problema:
vi /root/ports_failed
E faça com que fique assim:
#!/bin/bash
# Verificação de falha de portas do Ldirectord
# Copyright (c) 2008 blogama.org
# Este script é licenciado sob a GNU GPL versão 2.0 ou superior
# ---------------------------------------------------------------------
### Este script faz 1 verificação ###
### 1) Verifica falha de porta em servidores balanceados ###
### A ser modificado ###
EMAIL="[email protected]"
###### Não faça modificações abaixo ######
### Binários ###
MAIL=$(which mail)
# para restaurar ao original quando o problema for corrigido
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/port_problem.txt
> /var/log/ldirectord.log
fi
fi
### verifica se já foi notificado ###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Verifica se a porta falhou ###
cat /var/log/ldirectord.log 2>&1 | grep Deleted
if [ "$?" -ne "1" ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
cat "Problema nas portas veja o logfile /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Algumas portas falharam" $EMAIL < /root/port_problem.txt
fiTornamos executável:
chmod +x /root/ports_failed
Isso é o mesmo que o primeiro script, uma vez que o problema esteja corrigido você deve executar:
/root/ports_failed fix
para que o script funcione novamente.
Agora adicione ambos os scripts ao seu crontab:
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1
* * * * * /root/lb2_check >/dev/null 2>&115.2 Monitoramento de lb2.example.com
O monitoramento do segundo balanceador de carga é importante porque nos dirá se o balanceador de carga mestre falhou e, se falhou, devemos ficar de olho nas falhas de porta em web1 e web2.
Primeiro, devemos instalar o sendmail para que lb2.example.com possa enviar e-mails:
apt-get install sendmail
vi /root/ports_check
E cole este script:
#!/bin/bash
# Verificação de falha de portas do Ldirectord
# Copyright (c) 2008 blogama.org
# Este script é licenciado sob a GNU GPL versão 2.0 ou superior
# ---------------------------------------------------------------------
### Este script faz 2 verificações ###
### 1) verifica se o balanceador de carga mestre falhou e envia notificação por e-mail ###
### 2) Se o balanceador de carga mestre falhou, verifica falha de porta em servidores balanceados ###
### A ser modificado ###
EMAIL="[email protected]"
###### Não faça modificações abaixo ######
### Binários ###
MAIL=$(which mail)
### Data ###
NOW=$(date)
### Para restaurar ao original quando o problema for corrigido ###
if [ $1 ]; then
cd /root/
if [ $1=="fix" ]; then
if [ -f lb1_problem.txt ]; then
rm /root/lb1_problem.txt
fi
if [ -f port_problem.txt ]; then
rm /root/port_problem.txt
fi
if [ -f /root/server_problem_notified.txt ]; then
rm /root/server_problem_notified.txt
fi
> /var/log/ldirectord.log
> /var/log/ha-log
exit 1;
fi
fi
# verifica se o ldirectord está rodando em lb2.example.com (significa que lb1.example.com falhou)
#$LDIRECTORD /etc/ha.d/ldirectord.cf status 2>&1 | grep running
cat /var/log/ha-log | grep "takeover complete" > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
### verifica se já foi notificado ###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Verifica se a porta falhou ###
cat /var/log/ldirectord.log 2>&1 | grep Deleted
if [ "$?" -ne "1" ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
echo "Problema nas portas veja o logfile /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Algumas portas falharam" $EMAIL < /root/port_problem.txt
fi
### Verifica se já foi notificado que o balanceador de carga mestre falhou ###
cd /root
if [ -f server_problem_notified.txt ]; then
exit 1;
fi
### Notifica que o balanceador de carga mestre falhou ###
cd /root
MESSAGE="$NOW : O balanceador de carga mestre falhou"
echo $MESSAGE > lb1_problem.txt
$MAIL -s "O balanceador de carga mestre falhou" $EMAIL < /root/lb1_problem.txt
echo "notificado" > server_problem_notified.txt
fiTornamos executável:
chmod +x /root/ports_check
E o adicionamos ao nosso crontab:
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1Quando você receber uma notificação do script, execute depois:
/root/ports_check fix
15.3 Monitoramento de web1 & web2
O monitoramento do cluster web já está parcialmente feito com monit e munin.
A parte que ainda não está coberta é o monitoramento da replicação do MySQL.
Por favor, leia o seguinte artigo:
Reparar replicação master-master do MySQL
O monitoramento do MySQL é opcional, mas em um servidor de produção, problemas podem ocorrer com a replicação do MySQL, então eu realmente recomendo usar esses scripts ou algo semelhante para verificar a consistência dos bancos de dados.
15.4 Monitoramento de servidor remoto
Esta parte adiciona segurança extra verificando portas importantes (25,53,80,443) de um servidor remoto (instale dns-utils para dig):
#!/bin/bash
# Script para verificar portas importantes em servidor web remoto
# Copyright (c) 2008 blogama.org
# Este script é licenciado sob a GNU GPL versão 2.0 ou superior
# ---------------------------------------------------------------------
### Este script faz uma verificação nas portas 25, 53, 80 e 443 ###
### Após 2 verificações falhadas, enviará uma notificação por e-mail ###
### A ser modificado ###
WEBSERVERIP="192.168.1.106"
MAILSERVERIP="192.168.1.106"
EMAIL="[email protected]"
DNSSERVERIP="192.168.1.106"
DOMAINTOCHECKDNS="example.com"
DOMAINIP="192.168.1.106"
###### Não faça modificações abaixo ######
### Binários ###
MAIL=$(which mail)
TELNET=$(which telnet)
DIG=$(which dig)
### Verifica se já foi notificado###
cd /root
if [ -f server_problem.txt ]; then
exit 1;
fi
### Teste SMTP ###
(
echo "quit"
) | $TELNET $MAILSERVERIP 25 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PORTA CONECTADA"
else
if [ -f server_problem_first_time_25.txt ]; then
echo "PORTA 25 NÃO CONECTADA" >> /root/server_problem.txt
else
echo "NÃO CONECTADA" > /root/server_problem_first_time_25.txt
fi
fi
### Teste HTTP ###
(
echo "quit"
) | $TELNET $WEBSERVERIP 80 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PORTA CONECTADA"
else
if [ -f server_problem_first_time_80.txt ]; then
echo "PORTA 80 NÃO CONECTADA" >> /root/server_problem.txt
else
echo "NÃO CONECTADA" > /root/server_problem_first_time_80.txt
fi
fi
### Teste HTTPS###
(
echo "quit"
) | $TELNET $WEBSERVERIP 443 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PORTA CONECTADA"
else
if [ -f server_problem_first_time_443.txt ]; then
echo "PORTA 81 NÃO CONECTADA" >> /root/server_problem.txt
else
echo "NÃO CONECTADA" > /root/server_problem_first_time_443.txt
fi
fi
### Teste DNS ###
$DIG $DOMAINTOCHECKDNS @$DNSSERVERIP | grep $DOMAINIP
if [ "$?" -ne "1" ]; then
echo "PORTA CONECTADA"
else
if [ -f server_problem_first_time_53.txt ]; then
echo "PORTA 53 NÃO CONECTADA" >> /root/server_problem.txt
else
echo "NÃO CONECTADA" > /root/server_problem_first_time_53.txt
fi
fi
### Envia notificação por e-mail após 2 verificações falhadas ###
if [ -f server_problem.txt ]; then
$MAIL -s "Problema no servidor" $EMAIL < /root/server_problem.txt
fiEt voila! Sinta-se à vontade para me enviar e-mails privados para admin [at] marchost.com ou postar comentários aqui ou na minha página: blogama.org
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.