Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Symfony 6
  3. Journalisation et surveillance avec Symfony
Extrait - Symfony 6 Développez des sites web PHP structurés et performants
Extraits du livre
Symfony 6 Développez des sites web PHP structurés et performants Revenir à la page d'achat du livre

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.).

images/1-graphiques.png

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.

images/metrics.png

Prometheus s’appuie sur un système...