Vous êtes ici : Accueil / Debian GNU/Linux / Serveurs / PHP / Mettre en place une notification par email des erreurs PHP

Mettre en place une notification par email des erreurs PHP

Par Pierre-Yves Landuré Dernière modification 02/03/2018 18:04

Être notifié rapidement des erreurs PHP apparaissant sur un serveur permet d'être réactif lors qu'un problème se pose sur un site en production. Ce guide vous propose une solution pour mettre en place de telles notifications.

Ce guide est testé sur:

  • Debian 5.0 Lenny
  • Debian 6.0 Squeeze

Prérequis

Ce guide nécessite:

Installation

Installez le Simple Event Correlator:

command apt-get install sec

Créez le dossier pour les fichiers de configuration:

command mkdir --parents "/etc/sec"

Créez le fichier de configuration de la notification par e-mail des erreurs PHP pour Apache 2:

command echo '# Capture error lines and store them in php-errors
type=Single
ptype=RegExp
pattern=^\[.+\] \[error\] \[client .+\] PHP .+$
desc=PHP error or warning
action=add php-errors $0
 
# Report errors every minute if php-errors is set
type=Calendar
time=* * * * *
desc=Mail PHP errors
context=php-errors
action=report php-errors /usr/bin/mail -s "PHP errors" root@localhost; delete php-errors;
' > "/etc/sec/apache2-php-errors.conf"

Créez le fichier de configuration de la notification par e-mail des erreurs PHP pour LigHTTPd:

command echo '# Capture error lines and store them in php-errors
type=Single
ptype=RegExp
pattern=^.+: \(mod_fastcgi\.c\..+\) .+$
desc=PHP error or warning
action=add php-errors $0
 
# Report errors every minute if php-errors is set
type=Calendar
time=* * * * *
desc=Mail PHP errors
context=php-errors
action=report php-errors /usr/bin/mail -s "PHP errors" root@localhost; delete php-errors;
' > "/etc/sec/lighttpd-php-errors.conf"

Créez le fichier de configuration de la notification par e-mail des erreurs PHP pour Syslog:

command echo '# Capture error lines and store them in php-errors
type=Single
ptype=RegExp
pattern=^.+: PHP .+$
desc=PHP error or warning
action=add php-errors $0
 
# Report errors every minute if php-errors is set
type=Calendar
time=* * * * *
desc=Mail PHP errors
context=php-errors
action=report php-errors /usr/bin/mail -s "PHP errors" root@localhost; delete php-errors;
' > "/etc/sec/syslog-php-errors.conf"

Configurez le démon de notification pour le serveur HTTP installé:

if [ -n "$(command grep '/php.log' '/etc/syslog-ng/syslog-ng.conf')" ]; then
command echo '
# PHP monitoring defaults
RUN_DAEMON="yes"
DAEMON_ARGS="-conf=/etc/sec/syslog-php-errors.conf -input=/var/log/php.log -pid=/var/run/sec.pid -detach -syslog=daemon"
' >> "/etc/default/sec"
elif [ -d "/var/log/apache2" ]; then command echo ' # PHP monitoring defaults RUN_DAEMON="yes" DAEMON_ARGS="-conf=/etc/sec/apache2-php-errors.conf -input=/var/log/apache2/*error.log -pid=/var/run/sec.pid -detach -syslog=daemon" ' >> "/etc/default/sec" elif [ -d "/var/log/lighttpd" ]; then command echo ' # PHP monitoring defaults RUN_DAEMON="yes" DAEMON_ARGS="-conf=/etc/sec/lighttpd-php-errors.conf -input=/var/log/lighttpd/*error.log -pid=/var/run/sec.pid -detach -syslog=daemon" ' >> "/etc/default/sec" fi

Lancez le démon:

/etc/init.d/sec start

Le compte root du système reçoit maintenant des e-mails le notifiant des erreurs PHP apparues dans les journaux du serveur HTTP.

Niveau des erreurs signalées

Si vous ne contrôlez pas les applications installées sur le serveur (logiciels libres par exemple), assurez-vous que les notifications PHP ne sont pas ajoutées au journal d'erreur:

echo "; PHP error log level
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE" \
    > '/etc/php5/conf.d/error_reporting.ini'

Rechargez la configuration de PHP:

test -x /etc/init.d/php5-fpm && /etc/init.d/php5-fpm restart
test -x /etc/init.d/apache2 && /etc/init.d/apache2 force-reload
test -x /etc/init.d/lighttpd && /etc/init.d/lighttpd force-reload
test -x /etc/init.d/nginx && /etc/init.d/nginx force-reload

Remerciements