Monitoraggio Server · 7 min read · Oct 09, 2025

Il Carico Bilanciato Perfetto & Cluster Web ad Alta Disponibilità Con 2 Server Che Eseguono Xen Su Ubuntu 8.04 Hardy Heron - Pagina 9

15. Script personalizzati per il monitoraggio (lb1, lb2, web1, web2)

Ho creato alcuni script bash per monitorare l’intero setup (sono un po’ brutti ma funzionano). Se li migliori, sentiti libero di inviarmeli!

15.1 Monitoraggio da lb1.example.com

Prima dobbiamo installare sendmail affinché lb1.example.com possa inviare email :

apt-get install sendmail

Il primo script controllerà se il bilanciatore di carico di backup (lb2.example.com) è ancora disponibile per subentrare :

vi /root/lb2_check

#!/bin/bash
# Controllo bilanciatore di carico di backup
# Copyright (c) 2008 blogama.org
# Questo script è concesso in licenza sotto GNU GPL versione 2.0 o superiore
# ---------------------------------------------------------------------
### Questo script esegue 1 verifica ###
### 1) Controlla se il bilanciatore di carico di backup è fallito e invia notifica via email ###
### Da modificare ###
EMAIL="[email protected]"
###### Non apportare modifiche sotto ######
### Binaries ###
MAIL=$(which mail)
### Per ripristinare all'originale quando il problema è risolto ###
if [ $1 ]; then
  if [ $1=="fix" ]; then
    rm /root/lb2_problem.txt
    > /var/log/ha-log
    exit 1;
  fi
fi
### Controlla se già notificato ###
cd /root
if [ -f lb2_problem.txt ]; then
  exit 1;
fi
### Controlla se Heartbeat è in esecuzione in hot standby ###
tail /var/log/ha-log 2>&1 | grep "Asking other side for ping node count"
if [ "$?" -ne "1" ]; then
  echo "Il bilanciatore di carico di backup è fallito" > /root/lb2_problem.txt
  $MAIL -s "Problema bilanciatore di carico di backup" $EMAIL < /root/lb2_problem.txt
fi

Rendiamo questo script eseguibile :

chmod +x /root/lb2_check

Se lb2.example.com fallisce, creerà un file /root/lb2_problem.txt e invierà una notifica via email. Finché il file lb2_problem.txt è presente, non verrà controllato di nuovo. Inoltre, dobbiamo svuotare il file di log una volta che il problema è risolto affinché lo script funzioni correttamente.

Una volta risolto il problema su lb2.example.com, eseguire manualmente :

/root/lb2_check fix

Il prossimo script controllerà se ci sono porte che hanno fallito su web1 o web2 controllando il file di log di ldirectord. C’è già una notifica via email con ldirectord ma invia milioni di notifiche, il mio ne invia solo una fino a quando non risolvi il problema :

vi /root/ports_failed

e fallo apparire così :

#!/bin/bash
# Controllo guasto porte Ldirectord
# Copyright (c) 2008 blogama.org
# Questo script è concesso in licenza sotto GNU GPL versione 2.0 o superiore
# ---------------------------------------------------------------------
### Questo script esegue 1 verifica ###
### 1) Controlla il guasto delle porte sui server bilanciati ###
### Da modificare ###
EMAIL="[email protected]"
###### Non apportare modifiche sotto ######
### Binaries ###
MAIL=$(which mail)

#per ripristinare all'originale quando il problema è risolto
if [ $1 ]; then
  if [ $1=="fix" ]; then
    rm /root/port_problem.txt
    > /var/log/ldirectord.log
  fi
fi
###controlla se già notificato###
cd /root
if [ -f port_problem.txt ]; then
  cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
  exit 1;
fi
### Controlla se la porta è fallita ###
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 porte vedere logfile /var/log/port_problem.log" > /root/port_problem.txt
  $MAIL -s "Alcune porte sono fallite" $EMAIL < /root/port_problem.txt
fi

Rendiamolo eseguibile :

chmod +x /root/ports_failed

Questo è lo stesso del primo script, una volta risolto il problema devi eseguire :

/root/ports_failed fix

per far funzionare di nuovo lo script.

Ora aggiungi entrambi gli script al tuo crontab :

crontab -e

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

15.2 Monitoraggio da lb2.example.com

Il monitoraggio del secondo bilanciatore di carico è importante perché ci dirà se il bilanciatore di carico principale è fallito e, se lo è, tenere d’occhio i guasti delle porte su web1 e web2.

Prima dobbiamo installare sendmail affinché lb2.example.com possa inviare email :

apt-get install sendmail

vi /root/ports_check

E incolla questo script :

#!/bin/bash
# Controllo guasto porte Ldirectord
# Copyright (c) 2008 blogama.org
# Questo script è concesso in licenza sotto GNU GPL versione 2.0 o superiore
# ---------------------------------------------------------------------

### Questo script esegue 2 verifiche ###
### 1) controlla se il bilanciatore di carico principale è fallito e invia notifica via email ###
### 2) Se il bilanciatore di carico principale è fallito, controlla il guasto delle porte sui server bilanciati ###
### Da modificare ###
EMAIL="[email protected]"
###### Non apportare modifiche sotto ######
### Binaries ###
MAIL=$(which mail)
### Data ###
NOW=$(date)
### Per ripristinare all'originale quando il problema è risolto ###
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
#controlla se ldirectord è in esecuzione su lb2.example.com (significa che lb1.example.com è fallito)
#$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
  ###controlla se già notificato###
  cd /root
  if [ -f port_problem.txt ]; then
    cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
    exit 1;
  fi
  ### Controlla se la porta è fallita ###
  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 porte vedere logfile /var/log/port_problem.log" > /root/port_problem.txt
    $MAIL -s "Alcune porte sono fallite" $EMAIL < /root/port_problem.txt
  fi
       
  ### Controlla se già notificato che il bilanciatore di carico principale è fallito ###
  cd /root
  if [ -f server_problem_notified.txt ]; then
    exit 1;
  fi
        
  ### Notifica che il bilanciatore di carico principale è fallito ###
  cd /root
  MESSAGE="$NOW : Il bilanciatore di carico principale è fallito"
  echo $MESSAGE > lb1_problem.txt
  $MAIL -s "Il bilanciatore di carico principale è fallito" $EMAIL < /root/lb1_problem.txt
  echo "notificato" > server_problem_notified.txt
fi

Rendiamolo eseguibile :

chmod +x /root/ports_check

E lo aggiungiamo al nostro crontab :

crontab -e

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

Quando ricevi una notifica dallo script, per favore esegui successivamente :

/root/ports_check fix

15.3 Monitoraggio da web1 & web2

Il monitoraggio del cluster web è già parzialmente fatto con monit e munin.

La parte che non è ancora coperta è il monitoraggio della replica MySQL.

Si prega di leggere il seguente articolo :

Riparare la replica master-master di MySQL

Il monitoraggio di MySQL è facoltativo, ma su un server di produzione, possono verificarsi problemi con la replica MySQL, quindi consiglio vivamente di utilizzare questi script o qualcosa di simile per controllare la coerenza dei database.

15.4 Monitoraggio da server remoto

Questa parte aggiunge ulteriore sicurezza controllando porte importanti (25,53,80,443) da un server remoto (installare dns-utils per dig):

#!/bin/bash
# Script per controllare porte importanti su server web remoto
# Copyright (c) 2008 blogama.org
# Questo script è concesso in licenza sotto GNU GPL versione 2.0 o superiore
# ---------------------------------------------------------------------
### Questo script esegue una verifica sulle porte 25, 53, 80 e 443 ###
### Dopo 2 controlli falliti invierà una notifica via email ###
### Da modificare ###
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"

###### Non apportare modifiche sotto ######
### Binaries ###
MAIL=$(which mail)
TELNET=$(which telnet)
DIG=$(which dig)
### Controlla se già notificato###
cd /root
if [ -f server_problem.txt ]; then
  exit 1;
fi
### Test SMTP ###
(
echo "quit"
) | $TELNET $MAILSERVERIP 25 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
  echo "PORTA CONNESSA"
else
  if [ -f server_problem_first_time_25.txt ]; then
    echo "PORTA 25 NON CONNESSA" >> /root/server_problem.txt
  else
    echo "NON CONNESSA" > /root/server_problem_first_time_25.txt
  fi
fi
### Test HTTP ###
(
echo "quit"
) | $TELNET $WEBSERVERIP 80 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
  echo "PORTA CONNESSA"
else
  if [ -f server_problem_first_time_80.txt ]; then
    echo "PORTA 80 NON CONNESSA" >> /root/server_problem.txt
  else
    echo "NON CONNESSA" > /root/server_problem_first_time_80.txt
  fi
fi
### Test HTTPS###
(
echo "quit"
) | $TELNET $WEBSERVERIP 443 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
  echo "PORTA CONNESSA"
else
  if [ -f server_problem_first_time_443.txt ]; then
    echo "PORTA 443 NON CONNESSA" >> /root/server_problem.txt
  else
    echo "NON CONNESSA" > /root/server_problem_first_time_443.txt
  fi
fi

### Test DNS ###
$DIG $DOMAINTOCHECKDNS @$DNSSERVERIP | grep $DOMAINIP
if [ "$?" -ne "1" ]; then
  echo "PORTA CONNESSA"
else
  if [ -f server_problem_first_time_53.txt ]; then
    echo "PORTA 53 NON CONNESSA" >> /root/server_problem.txt
  else
    echo "NON CONNESSA" > /root/server_problem_first_time_53.txt
  fi
fi
### Invia notifica via email dopo 2 controlli falliti ###
if [ -f server_problem.txt ]; then
  $MAIL -s "Problema server" $EMAIL < /root/server_problem.txt
fi

Et voilà! Sentiti libero di inviarmi email private a admin [at] marchost.com o di lasciare commenti qui o sulla mia pagina : blogama.org

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.