Alertes et notifications
Objectifs du chapitre et prérequis
1. Contexte et prérequis
La mise en place de l’exporteur système a été abordée durant les chapitres précédents aussi bien sur des machines Linux classiques que sur des machines faisant partie d’un cluster Docker Swarm ou Kubernetes.
En revanche, les métriques remontées n’ont été observées que de manière très superficielle et surtout, aucune alerte n’a été définie. Ce chapitre va proposer de mettre en place un gestionnaire d’alertes et donner quelques exemples de métriques intéressantes à utiliser.
Pour la suite, l’utilisateur va faire appel à deux techniques différentes :
-
L’utilisation des alertes dans Grafana.
-
La mise en place du gestionnaire d’alertes (alertmanager).
2. Fichiers téléchargeables
Vous pouvez récupérer les exemples sur le repository GitHub suivant : https://github.com/EditionsENI/prometheus-grafana
Vous pouvez également récupérer ces fichiers dans l’archive chapitre-13.tar.gz depuis la page Informations générales.
Gestion des alertes avec Grafana
1. Contexte
Grafana dispose nativement d’un mécanisme d’alertes et de notifications. Ce chapitre est dédié à sa découverte et sa mise en place. À noter que pour la suite de l’exercice, l’utilisateur devra avoir suivi le chapitre Protection des accès.
2. Alerte sur l’activité CPU
a. Alerte à définir
Lors de la mise en place de l’exporteur, le lecteur a déjà abordé l’existence des métriques CPU suivantes :
-
Taux d’occupation des CPU : node_cpu_seconds_total.
-
Charge de la machine : node_load1/5/15.
Une alerte assez classique sur ce genre de métriques est de considérer un seuil au-delà duquel il faut faire intervenir un administrateur.
Dans Grafana, cette définition se fait depuis l’interface édition.
b. Définition du seuil de déclenchement
Ouvrez le tableau de bord CPU activity ou créez-en un nouveau. Cliquez sur le titre du graphique System load puis sur edit ou créez-en un nouveau.
Vérifiez que le champ metrics dans l’onglet Query (sous le graphique) contient bien la valeur suivante :
node_load1
/
count(node_cpu_seconds_total{mode="idle"}) without(mode,cpu)
Cliquez sur l’onglet Alert puis réalisez les opérations suivantes :
Cliquez sur le bouton bleu Create Alert.
Entrez un seuil de déclenchement dans le champ IS ABOVE de la section Conditions (exemple :...
Gestionnaire d’alertes de Prometheus
1. Contexte
L’utilisateur a rapidement abordé la gestion des alertes de Grafana. Toutefois, cette technique a quelques défauts :
-
Les alertes sont découplées de la collecte des métriques.
-
La définition se fait depuis l’interface de Grafana.
Grafana permet de définir ces alertes à l’aide de son API. Cependant, il s’agit plus d’un contournement puisque l’utilisateur devra mettre au point un script prenant en charge ce type d’opération.
La tendance de ces dernières années est de s’appuyer de plus en plus sur l’utilisation de fichiers textes. Au même titre que l’infrastructure ou que le CI/CD, la surveillance doit s’appuyer sur des définitions de fichiers de codes sources (infrastructure as code, pipeline as code, monitoring as code, etc.).
2. Mise en place d’une alerte dans Prometheus
a. Configuration des alertes dans Prometheus
La configuration des alertes se fait à l’aide du champ rule_files dans le fichier de configuration principal de Prometheus. Ce champ se présente sous la forme d’un tableau référençant les fichiers de définition d’alertes à inclure au démarrage.
Ces fichiers sont au format YAML et contiennent un seul champ groups. Ce dernier est un tableau de groupes de règles. Chaque groupe contient deux champs :
-
Un champ name pour indiquer le nom du groupe de règles.
-
Un champ rules contenant un tableau de règles.
Les règles peuvent être de deux types : une alerte ou une règle d’enregistrement.
La première sert à définir comment déclencher une alerte et contient les champs suivants :
-
alert suivi par son nom.
-
expr contenant la requête PromQL de l’alerte.
-
labels et annotations pour enrichir en informations l’alerte.
-
for (optionnel) indiquant le temps de caractérisation d’une alerte.
Les règles d’enregistrement servent à précalculer certaines valeurs. Elles sont généralement utilisées lorsqu’une requête fréquemment appelée est trop consommatrice en ressources. Il peut s’agir d’une agrégation de toutes les métriques d’un moteur lorsque ces dernières...