Journalisation et surveillance avec Symfony
Générer des journaux avec Monolog
1. La journalisation
La journalisation (logging en anglais) est une technique qui accompagne une application aussi bien durant la phase de développement qu’après sa mise en production. Elle consiste à enregistrer dans un journal (généralement matérialisé par un fichier) des événements (logs) qui sont déclenchés par l’application.
Au cours du chapitre sur le répartiteur d’événements, nous avions déjà parlé des événements. Bien que le mot soit le même, les événements du répartiteur d’événements n’ont strictement aucun rapport avec les événements de la journalisation. Pour éviter toute confusion, nous utiliserons exclusivement la dénomination anglaise « logs » tout au long de ce chapitre. Le terme français, même s’il est sémantiquement correct, est de toute façon peu employé par les informaticiens francophones.
Les logs sont datés et comportent un message de description. Voici à quoi pourrait ressembler une portion de journal d’un site web lambda :
[2021-02-16 15:28:30] INFO: "Un nouvel utilisateur s'est inscrit."
[2021-02-16 15:58:55] ERROR: "La page '/article/18' n'existe pas."
[2021-02-16 17:59:11] ALERT: "La connexion avec la base de données a échoué."
[2021-02-16 18:24:17] WARNING: "Il y a eu 5 tentatives de connexion
non concluantes pour l'utilisateur 'toto18'."
Chaque ligne correspond à un log. En plus d’un message et d’une date, nous remarquons qu’un log dispose aussi d’un niveau (ERROR, ALERT, etc.) ; il s’agit du niveau de journalisation. Ce dernier indique la gravité du log.
Bien que ce soit souvent le cas, les logs ne correspondent pas forcément à des erreurs. Ils sont répartis sur une multitude de niveaux, allant d’un message purement informatif à une alerte sur une situation d’extrême urgence.
2. La librairie Monolog
Monolog est une librairie capable non seulement d’enregistrer les logs dans un fichier de journalisation, mais également...
Le monitoring avec Prometheus et Grafana
1. Un allié proactif au logging
Pour une application en production, le logging seul ne permet pas de gérer efficacement les problèmes qui pourraient survenir. Son principal inconvénient est lié à sa nature : il n’est qu’un journal répertoriant une série d’événements ayant déjà eu lieu. Même si vous avez configuré Monolog pour vous envoyer un e-mail en cas d’erreur critique, vous restez dans une démarche « a posteriori » où vous ne pouvez que « limiter les dégâts ».
Le monitoring est une technique complémentaire au logging pour les systèmes en production. Il permet, dans certains cas, de détecter les potentiels incidents avant qu’ils ne surviennent. Pour cela, il s’appuie sur un prélèvement de « mesures » (ou metrics en anglais). Ces dernières seront principalement utilisées pour :
-
envoyer des alertes (via e-mail, SMS, etc.) lorsque certaines mesures atteignent des valeurs préoccupantes,
-
créer des graphiques (ex. afficher le nombre de requêtes par seconde, les taux d’erreurs, etc.).
Exemples de graphiques générés depuis des mesures
Exemple d’alerte depuis des mesures
Pour illustrer la notion d’alerte d’un système de monitoring, imaginons un simple formulaire permettant d’uploader des fichiers. L’utilisateur peut uploader des fichiers locaux vers un serveur distant, dans le but de sauvegarder ses fichiers dans le « cloud ». Ces fichiers occupant de l’espace disque, il serait intéressant de vérifier régulièrement combien d’espace est disponible. Lorsqu’une mesure indique, par exemple, que 80 % de l’espace est utilisé, vous pourriez recevoir une alerte, que ce soit par SMS, e-mail ou autre.
2. Préparation d’une application Symfony pour Prometheus
Prometheus est un système de monitoring ; il va nous permettre de collecter des mesures auprès de notre application Symfony. Nous pourrons ensuite les visualiser dans des graphiques et les intégrer à un système d’alerte.
Prometheus s’appuie sur un système...