check_fpm_socket.sh

Ce script vérifie qu'il n'y a pas de pb de connexion fpm (toto.socket failed) dans les logs nginx.

#!/bin/bash
 
# Script pour surveiller les pb de connexion à php-fpm
# On part du principe que toutes les connexions se font en socket nommé ${site}.socket, 
# avec les logs nginx dans /wln/${site}.error.log
 
# nos fichiers
LOG=/var/log/$(basename $0 .sh).log
ERRLOG=/var/log/$(basename $0 .sh).err
TMP=/tmp/$(basename $0 .sh)/tmp.avirer
MAILTMP=/tmp/$(basename $0 .sh)/mail.avirer
# On créé notre dossier tmp si besoin
[ -d /tmp/$(basename $0 .sh)/ ] || mkdir /tmp/$(basename $0 .sh)
 
# Les seuils
MAX_ERR_NOALERT=0 # si plus que ça d’erreur en 10min, on notifie, sinon on loggue
MAX_ERR_DETAILS=50 # Au dessus on envoie juste le nb et pas le détail
 
# et pour les mails
MAILa='Content-Type: text/plain; charset=UTF-8'
DEST=destinataire@domaine.tld
 
# Les logs d’erreurs nginx (format pas modifiable) commencent par
# YYYY/MM/DD hh:mm:ss
 
# pour la dizaine de minute précédente
pastdate=$(date --date '10 minutes ago' '+%Y/%m/%d %H:%M')
# on vire les unités des minutes
pattern=${pastdate:0:15}
 
# init de la notif éventuelle
echo -e "Récap des erreurs de connexion sur socket php-fpm\npour les 10 minutes $pattern\n" > $MAILTMP
erreurs="no"
 
# pour chaque log d’erreur
for log in /wln/*.error.log
do
  grep "^$pattern" $log | grep "socket failed" > $TMP
  if [ -s $TMP ] # pas vide
  then
    erreurs="yes"
    nberr=$(wc -l < $TMP)
    if [ $nberr -gt $MAX_ERR_NOALERT ]
    then
      # Faut notifier
      if [ $nberr -gt $MAX_ERR_DETAILS ]
      then
        # résumé only
        echo -e "$(basename $log .error.log) : $nberr echecs de connexion sur la socket php-fpm\n" >> $MAILTMP
      else
        # les erreurs du log intégrales
        echo -e "$(basename $log .error.log), $nberr echecs de connexion sur la socket php-fpm :" >> $MAILTMP
        cat $TMP >> $MAILTMP
      fi
    fi
    # On loggue de toute façon
    cat $TMP > $ERRLOG
  fi
done
# Si on a rencontré des pbs, on notifie
[ $erreurs = "yes" ] && mail -a "$MAILa" -s "Erreurs de connexion sur socket php-fpm" $DEST < $MAILTMP