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