💻 Serveur & shell

Lire ses logs : Apache, PHP, mail, fail2ban

Où se trouvent les logs de votre hébergement, comment les consulter depuis Plesk ou en SSH, quelles commandes utiliser pour diagnostiquer un problème sans passer par un ticket.

intermédiaire ⏱ 10 min Mise à jour : 2026-04-24

Savoir lire ses logs, c'est gagner un temps fou : 80 % des incidents courants (erreur 500, mail qui ne part pas, IP bloquée, site lent) se diagnostiquent directement dans les fichiers de logs, sans avoir à ouvrir de ticket. Et quand le ticket est nécessaire, vous arrivez avec les bons éléments : timestamp précis, extrait du log, code d'erreur. Résultat : réponse plus rapide, aller-retours évités.

Cette doc couvre les logs accessibles depuis votre espace Plesk et en SSH, les commandes utiles pour les explorer, et ce qui relève du serveur (donc d'un ticket Datacampus).

Logs via l'interface Plesk

Le plus rapide pour jeter un œil rapide, sans ouvrir de terminal.

  1. Connectez-vous à votre espace Plesk.
  2. Cliquez sur le domaine concerné.
  3. Dans la colonne de droite, cliquez sur Logs.

Vous y trouvez :

  • Access log — chaque requête HTTP reçue par le site.
  • Error log — les erreurs Apache et PHP.
  • Filtres par type d'événement, code HTTP, période, mot-clé.
  • Live tail — affichage en temps réel, pratique pour reproduire un bug et voir la ligne arriver.
  • Téléchargement des logs bruts pour analyse locale.

Logs en SSH

Si vous avez un accès SSH (voir la doc SSH et SFTP), vous accédez aux fichiers bruts. Chaque site a son utilisateur Linux et ses propres logs sous /var/www/vhosts/system/<domaine>/logs/.

Chemins types

# Apache (HTTP et HTTPS)
/var/www/vhosts/system/monsite.fr/logs/access_log
/var/www/vhosts/system/monsite.fr/logs/access_ssl_log
/var/www/vhosts/system/monsite.fr/logs/error_log

# Nginx en reverse proxy devant Apache (si activé)
/var/www/vhosts/system/monsite.fr/logs/proxy_access_log
/var/www/vhosts/system/monsite.fr/logs/proxy_access_ssl_log

# PHP-FPM (pool par domaine, version selon abonnement)
/var/log/plesk-php83-fpm/error.log
/var/log/plesk-php82-fpm/error.log
Le dossier logs/ est un lien symbolique
Depuis votre home, ~/logs/ pointe vers /var/www/vhosts/system/<domaine>/logs/. Vous pouvez donc faire cd ~/logs une fois connecté.

Commandes utiles

Voir les dernières lignes

# Les 100 dernières lignes du log d'erreur
tail -n 100 error_log

# Suivi en temps réel (Ctrl+C pour quitter)
tail -f error_log

# Suivi de plusieurs fichiers en parallèle
tail -f error_log access_ssl_log

Filtrer par code HTTP

# Toutes les erreurs 500 des dernières lignes
grep ' 500 ' access_ssl_log | tail -20

# Les 404 sur une période (log déjà filtré)
grep ' 404 ' access_ssl_log | tail -50

# Compter les erreurs 5xx du jour
grep -cE ' 5[0-9]{2} ' access_ssl_log

Top des IPs qui tapent le site

# Les 20 IPs les plus actives
awk '{print $1}' access_ssl_log | sort | uniq -c | sort -rn | head -20

Utile pour détecter un scraper, un bot agressif ou une attaque brute force avant qu'elle déclenche fail2ban.

Chercher une erreur précise

# Erreur de mémoire PHP
grep -i "allowed memory" error_log

# Timeout
grep -i "maximum execution time" error_log

# Erreur MySQL
grep -i "mysql" error_log | tail -30

Isoler une fenêtre temporelle

# Toutes les lignes entre 14h30 et 14h45 le 24 avril
grep "24/Apr/2026:14:3" access_ssl_log
grep "24/Apr/2026:14:4[0-5]" access_ssl_log

Logs mail (Mailcow)

Les logs mail ne sont pas accessibles via SSH client. Ils sont centralisés dans l'interface Mailcow.

  1. Connectez-vous à Mailcow avec votre compte admin de domaine.
  2. Menu Logs (en haut à droite).
  3. Sélectionnez le service :
    • Postfix — envoi et réception SMTP, rejets, relais.
    • Dovecot — connexions IMAP/POP, authentifications.
    • SOGo — webmail, CalDAV, CardDAV.
    • Rspamd — antispam, scores, actions.
    • Clamd — antivirus.
  4. Filtrez par période et par mot-clé (ex : une adresse email destinataire pour savoir pourquoi un mail n'est jamais arrivé).

Logs fail2ban

fail2ban tourne au niveau du serveur. Le fichier /var/log/fail2ban.log n'est lisible qu'avec un accès root, donc inaccessible en hébergement mutualisé Plesk.

Pour vérifier si une IP est bannie ou la débloquer, ouvrez un ticket (la procédure complète est dans la doc Débloquer une IP fail2ban). Fournissez l'IP exacte et l'horaire approximatif du blocage, on la retrouve en quelques secondes.

Logs applicatifs

Selon l'application que vous hébergez, des logs supplémentaires peuvent exister dans votre espace web.

WordPress

Activez le debug en ajoutant dans wp-config.php :

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Les erreurs PHP du site sont alors écrites dans wp-content/debug.log. À désactiver en production une fois le diagnostic terminé.

PrestaShop

Depuis PrestaShop 1.7, les logs applicatifs sont dans var/logs/ (nom du fichier préfixé par l'environnement : prod-*.log, dev-*.log).

Node.js via pm2

pm2 centralise les logs de chaque process. Voir la doc Node.js avec pm2 pour la mise en place.

# Logs de tous les process pm2
pm2 logs

# Logs d'un process précis
pm2 logs monapp

# Les 200 dernières lignes sans suivi temps réel
pm2 logs --lines 200 --nostream

Décortiquer une ligne Apache (format combiné)

Le format par défaut sur nos hébergements est le combined log format.

203.0.113.42 - - [24/Apr/2026:14:33:12 +0200] "GET /page HTTP/2.0" 200 15234 "https://google.com" "Mozilla/5.0..."
ChampSignification
203.0.113.42IP du client
- -Identité et utilisateur HTTP authentifié (rarement renseignés)
[24/Apr/2026:14:33:12 +0200]Date et heure de la requête, fuseau
"GET /page HTTP/2.0"Méthode HTTP, URL demandée, version du protocole
200Code de réponse HTTP
15234Taille de la réponse en octets
"https://google.com"Referer (page d'origine)
"Mozilla/5.0..."User-agent (navigateur ou bot)

Rotation et archivage

Les logs sont automatiquement pivotés par logrotate : un nouveau fichier démarre chaque jour (ou chaque semaine selon l'abonnement), les anciens sont compressés en .gz.

access_ssl_log          # log courant
access_ssl_log.1        # hier, non compressé
access_ssl_log.2.gz     # il y a 2 jours
access_ssl_log.3.gz
...

Pour lire un log compressé sans le décompresser :

# Afficher le contenu
zcat access_ssl_log.2.gz | less

# Navigation page par page
zless access_ssl_log.2.gz

# grep directement dans un .gz
zgrep ' 500 ' access_ssl_log.2.gz

Ce qui n'est PAS dans vos logs

Certains logs relèvent du système et ne sont pas accessibles côté client :

  • Syslog (/var/log/syslog, /var/log/messages) — événements système globaux.
  • Logs noyau (dmesg, /var/log/kern.log) — matériel, kernel, OOM killer.
  • Logs Plesk internes, fail2ban, sshd global.
  • Logs du MTA de sortie du serveur si vous n'utilisez pas Mailcow.

Pour ces cas : ticket avec un timestamp précis (date + heure + fuseau) et la description du symptôme. Plus c'est précis, plus on va vite.

💡
Rapport quotidien d'erreurs par mail
Un cron simple qui grep les erreurs de la veille et vous les envoie. Pratique pour surveiller un site sans checker les logs à la main.
0 7 * * * grep -E ' (5[0-9]{2}) ' ~/logs/access_ssl_log.1 | mail -s "Erreurs 5xx hier" vous@exemple.fr
Voir la doc Tâches planifiées pour la mise en place.
⚠️
Ne jamais rm un log
Supprimer un log courant (rm access_ssl_log) casse la rotation : Apache ou PHP-FPM continuent d'écrire dans un inode qui n'existe plus, logrotate ne récupère pas la main, et le disque peut se remplir sans que vous vous en rendiez compte. Pour vider un log tout en préservant le fichier :
truncate -s 0 nom_du_log
Le fichier est vidé mais conservé, la rotation continue de fonctionner.

Pour aller plus loin

Pour aller plus loin

Besoin d'aide ?

Cette documentation ne couvre pas votre cas ? Notre support humain est là.