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
fi

Tornamos 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
fi

Tornamos 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>&1

15.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
fi

Tornamos executável:

chmod +x /root/ports_check

E o adicionamos ao nosso crontab:

crontab -e

* * * * * /root/ports_failed  >/dev/null 2>&1

Quando 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
fi

Et 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

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.