PflogsummDans ce septième article dédié à Postfix et Dovecot, nous allons aborder la gestion des logs de notre serveur mail. Nous disposons à présent d’un serveur fonctionnel avec une poignée d’utilisateurs. Avant d’aller plus loin dans le peaufinage de la configuration, il est important de garder à l’oeil tout ce qui se passe sous le capot de Postfix.

Toutes les opérations de Postfix sont écrites dans le fichier /var/log/maillog. Le problème avec ce fichier, c’est qu’il devient vite ingérable. À titre d’exemple, jetons un oeil sur les logs d’un serveur mail de taille modeste hébergeant une petite vingtaine de comptes mail.

$ sudo wc -l /var/log/maillog
190372 /var/log/maillog

En cinq jours, ce fichier contient plus de 190.000 entrées au total. Il nous faut donc trouver une solution pour gérer intelligemment tout ce fatras. Quelque chose qui permette de répondre rapidement à la question suivante.

« Qu’est-ce qui se passe sur mon serveur mail ? »

C’est là où Pflogsumm (Postfix Log Summary) entre en jeu. Pflogsumm est un outil écrit en Perl capable de générer des rapports détaillés depuis les logs de Postfix.

Red Hat Enterprise Linux et CentOS fournissent Pflogsumm dans les dépôts officiels.

$ sudo yum install postfix-perl-scripts

Pour tester le bon fonctionnement de Pflogsumm, commençons par générer un rapport à la volée pour la journée en cours.

$ sudo pflogsumm -d today /var/log/maillog | less
Postfix log summaries for Jun  5

Grand Totals
------------
messages

    108   received
    127   delivered
      0   forwarded
      2   deferred  (18  deferrals)
      0   bounced
     21   rejected (14%)
      0   reject warnings
      0   held
      0   discarded (0%)

   5634k  bytes received
   5687k  bytes delivered
     36   senders
     33   sending hosts/domains
     16   recipients
      4   recipient hosts/domains
...

Faisons la même chose pour la veille.

$ sudo pflogsumm -d yesterday /var/log/maillog | less
Postfix log summaries for Jun  4

Grand Totals
------------
messages

    486   received
    521   delivered
      0   forwarded
      3   deferred  (57  deferrals)
      4   bounced
    497   rejected (48%)
      0   reject warnings
      0   held
      0   discarded (0%)

  31152k  bytes received
  32372k  bytes delivered
    133   senders
    102   sending hosts/domains
     36   recipients
     11   recipient hosts/domains
...

Pflogsumm accepte une série d’options décrites en détails dans la page de manuel pflogsumm(1). Pour une aide plus succincte, invoquez pflogsumm avec l’option --help.

Dans l’exemple ci-dessous, je génère un rapport en commençant par les problèmes de traitement, notamment les rejets de messages.

$ sudo pflogsumm -d yesterday --problems_first --rej_add_from \
  --verbose_msg_detail -q /var/log/maillog | less

À partir de là, je peux envisager la création d’une tâche automatique pour la génération d’un rapport quotidien par mail. Pour éviter de me retrouver avec une commande à rallonge dans mon fichier crontab, je commence par éditer un petit script shell postfix-logs.sh comme ceci.

#!/bin/bash
#
# postfix-logs.sh
#
# Send daily Postfix log summary to the admin

SERVER='alphajet.microlinux.fr'
PFLOG='/usr/sbin/pflogsumm'
EMAIL='info@microlinux.fr'

# Make sure the script is being executed with superuser privileges
if [[ "${UID}" -ne 0 ]]
then
  echo 'Please run with sudo or as root.' >&2
  exit 1
fi

# Check if Pflogsumm is installed
if [[ ! -x ${PFLOG} ]]
then
  echo 'Pflogsumm is not installed on this system.' >&2
  exit 1
fi

# Generate daily report
${PFLOG} -d yesterday /var/log/maillog \
  --rej_add_from \
  --verbose_msg_detail \
  -q \
  | mail -s "Postfix log summary for ${SERVER}" ${EMAIL}

exit 0

Je range le script dans un endroit approprié comme ~/bin, je définis les permissions appropriées et je le teste manuellement.

$ sudo ./postfix-logs.sh

Je jette un oeil dans ma boîte mail pour vérifier si j’ai bien reçu le rapport généré par Pflogsumm.

Pflogsumm

Une fois que tout fonctionne comme prévu, il ne me reste plus qu’à définir une tâche automatique.

$ sudo crontab -e
# Postfix logs
00 04 * * * /home/microlinux/bin/postfix-logs.sh 1> /dev/null

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


1 commentaire

Stéphane · 3 décembre 2020 à 6 h 54 min

Bonjour,

Merci pour cet article et le script. M’est super utile sur mon serveur de mail.
Bonne journée.

Les commentaires sont fermés.