Introduction
Les alertes et les notifications sont une partie critique de votre flux de travail de déploiement. Lorsque vous travaillez avec un cluster Kubernetes, vous avez souvent besoin d’être immédiatement notifié de tout problème critique dans votre cluster.
Alertmanager fait partie du kube-prom-stack
installé dans votre cluster dans la pile Prometheus. Il vous permet de recevoir des alertes de différentes sources telles que Prometheus. Des règles sont créées du côté de Prometheus, qui à leur tour peuvent déclencher des alertes. Il incombe à Alertmanager d’intercepter ces alertes, de les regrouper (agrégation), d’appliquer d’autres transformations et enfin de les router vers les destinataires configurés. Les messages de notification peuvent être formatés pour inclure des détails supplémentaires si nécessaire. Vous pouvez utiliser Slack, Gmail, etc. pour envoyer des notifications en temps réel.
Dans cette section, vous apprendrez à inspecter les alertes existantes, à en créer de nouvelles, puis à configurer Alertmanager pour envoyer des notifications via Slack en utilisant le même fichier de manifeste utilisé pour configurer Prometheus.
Table des matières
- Prérequis
- Étape 1 – Vérifier les alertes incluses
- Étape 2 – Créer une nouvelle alerte
- Étape 3 – Configurer Alertmanager pour envoyer des notifications à Slack
- Étape 4 – Déboguer une alerte déclenchée
- Conclusion
Prérequis
Pour compléter ce tutoriel, vous aurez besoin de :
- La pile de surveillance Prometheus installée dans votre cluster comme expliqué dans la pile Prometheus.
- La pile Loki installée dans votre cluster comme expliqué dans la pile Loki.
- Application d’exemple Emojivoto déployée dans le cluster. Veuillez suivre les étapes du dépôt principal. Vous allez créer des alertes pour cette application.
- Droits administratifs sur un espace de travail Slack. Plus tard, vous allez créer une application avec un webhook entrant qui sera utilisé pour envoyer des notifications depuis Alertmanager.
Étape 1 – Vérifier les alertes incluses
kube-prom-stack
compte déjà plus d’une centaine de règles activées. Pour accéder à la console Prometheus, commencez par un renvoi de port vers votre machine locale.
Ouvrez un navigateur web sur localhost:9091 et accédez à l’élément de menu Alertes. Vous devriez voir quelques alertes prédéfinies et cela devrait ressembler à ce qui suit :
Cliquez sur l’une des alertes pour l’élargir. Vous pouvez voir des informations sur l’expression qu’elle interroge, les étiquettes qu’elle a configurées, et les annotations qui sont très importantes d’un point de vue de la modélisation. Prometheus prend en charge la modélisation dans les annotations et les étiquettes des alertes. Pour plus d’informations, consultez la documentation officielle.
Étape 2 – Création d’une nouvelle alerte
Pour créer une nouvelle alerte, vous devez ajouter une nouvelle définition dans la section additionalPrometheusRule
du fichier de valeurs Helm kube-prom-stack
.
Vous allez créer une alerte exemple qui sera déclenchée si l’espace de noms emojivoto
n’a pas un nombre attendu d’instances. Le nombre attendu de pods pour l’application emojivoto
est de 4.
Tout d’abord, ouvrez le fichier 04-setup-observability/assets/manifests/prom-stack-values.yaml
fourni dans le dépôt du Kit de Démarrage, en utilisant un éditeur de texte de votre choix (de préférence avec le support de validation YAML). Ensuite, décommentez le bloc additionalPrometheusRules
.
Enfin, appliquez les paramètres à l’aide de helm
:
Pour vérifier que l’alerte a été créée avec succès, accédez à la Console Prometheus, cliquez sur l’élément de menu Alertes et identifiez l’alerte EmojivotioInstanceDown
. Elle devrait être visible en bas de la liste.
Étape 3 – Configuration d’Alertmanager pour envoyer des notifications à Slack
Pour compléter cette section, vous devez avoir des droits administratifs sur un espace de travail Slack. Cela vous permettra de créer le webhook entrant dont vous aurez besoin dans les prochaines étapes. Vous devrez également créer un canal où vous souhaitez recevoir les notifications d’Alertmanager.
Vous configurerez Alertmanager pour parcourir toutes les alertes reçues et imprimer leurs résumés et descriptions respectifs sur de nouvelles lignes.
- Ouvrez un navigateur web et accédez à
https://api.slack.com/apps
. Cliquez sur le bouton Créer une nouvelle application. - Dans la fenêtre Créer une application, sélectionnez l’option À partir de zéro. Ensuite, donnez un nom à votre application et sélectionnez l’espace de travail approprié.
- Depuis la page Informations de base, cliquez sur l’option Webhooks entrants, activez-la, et cliquez sur le bouton Ajouter un nouveau webhook au workspace en bas de page.
- Sur la page suivante, utilisez la liste déroulante Rechercher un canal… pour sélectionner le canal désiré où vous souhaitez envoyer les notifications. Une fois prêt, cliquez sur le bouton Autoriser.
- Copiez la valeur de l’URL du webhook affichée sur la page. Vous en aurez besoin dans la section suivante.
Ensuite, vous indiquerez à Alertmanager comment envoyer des notifications Slack. Ouvrez le fichier 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
fourni dans le dépôt du Starter Kit en utilisant un éditeur de texte de votre choix. Décommentez l’ensemble du bloc alertmanager.config
. Assurez-vous de mettre à jour les valeurs slack_api_url
et channel
en remplaçant les marqueurs <>
en conséquence.
Dans la configuration ci-dessus,
slack_api_url
: URL du webhook entrant Slack créé à l’étape 4receivers.[].slack_configs
: définit le canal Slack utilisé pour envoyer des notifications, le titre de la notification et le message réel. Il est également possible de formater le message de notification (ou corps) selon vos besoins.title
ettext
: itère sur les alertes en cours et affiche le résumé et la description en utilisant le système de modélisation Prometheus.send_resolved
: booléen indiquant si Alertmanager doit envoyer une notification lorsque une alerte ne se déclenche plus.
Les paramètres matcher
et continue
sont encore commentés car vous les décommenterez plus tard dans le guide. Pour l’instant, ils doivent rester commentés.
Enfin, mettez à niveau le kube-prometheus-stack
en utilisant helm
:
À ce stade, vous devriez recevoir des notifications Slack pour toutes les alertes en cours.
Ensuite, vous allez tester si l’alerte EmojivotoInstanceDown
ajoutée précédemment fonctionne et envoie une notification à Slack en réduisant le nombre de réplicas pour le déploiement /emoji
de l’espace de noms emojivoto
.
Depuis votre terminal, exécutez la commande suivante pour ramener le nombre de réplicas pour le déploiement /emoji
à 0 :
Ouvrez un navigateur web sur localhost:9091 et accédez à l’élément de menu Alertes. Recherchez l’alerte EmojivotoInstanceDown créée précédemment. Le statut de l’alerte devrait indiquer En cours après environ une minute de réduction du déploiement.
A message notification will be sent to Slack to the channel you configured earlier if everything goes well. You should see the “The Number of pods from the namespace emojivoto
is lower than the expected 4.” alert in the Slack message as configured in the annotations.description
config of the additionalPrometheusRulesMap
block.
Actuellement, toutes les déclenchements d’alerte seront envoyés au canal Slack. Cela peut entraîner une fatigue de notification. Pour préciser quelle notification est envoyée, vous pouvez restreindre Alertmanager à envoyer uniquement des notifications pour les alertes correspondant à un certain motif. Cela se fait en utilisant le paramètre matcher
.
Ouvrez le fichier 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
fourni dans le dépôt Starter Kit en utilisant un éditeur de texte de votre choix. Décommentez l’ensemble du bloc alertmanager.config
. Assurez-vous de décommenter les paramètres matcher
et continue
:
Enfin, mettez à niveau le kube-prometheus-stack
, en utilisant helm
:
Maintenant, vous ne devriez recevoir que des alertes correspondant au nom de l’alerte EmojivotoInstanceDown
. Comme continue
est défini sur false, Alertmanager enverra uniquement des notifications à partir de cette alerte et cessera de les envoyer aux autres.
Cliquer sur le nom de la notification dans Slack ouvrira un navigateur web vers une page web inaccessible avec le DNS interne de Kubernetes du pod Alertmanager. C’est attendu. Voici quelques liens utiles pour vous: Pour plus d’informations, vous pouvez consulter le service DNS du pod,
les paramètres de configuration pour AlertManager, et quelques exemples de notification.
Étape 4 – Déboguer une alerte en cours
Lorsqu’une alerte se déclenche et envoie une notification dans Slack, il est important que vous puissiez facilement déboguer le problème et trouver rapidement la cause principale.
Pour ce faire, vous pouvez utiliser Grafana qui a déjà été installé dans les tutoriels Prometheus Stack et Loki Stack.
Créez un transfert de port pour Grafana sur le port 3000
:
Ouvrez un navigateur web sur localhost:3000 et connectez-vous en utilisant les identifiants par défaut admin/prom-operator
.
Accédez à la section Alerte. Dans le filtre État, cliquez sur l’option Déclenchement. Identifiez l’alerte emojivoto-instance-down
définie dans la section Création d’une nouvelle alerte et développez-la. Vous devriez voir ce qui suit :
Cliquez sur le bouton Voir le graphique. Sur la page suivante, vous pouvez observer le nombre de pods dans l’espace de noms emojivoto
affiché comme une métrique. Notez que Grafana filtre les résultats en utilisant une plage horaire de 1 heure précédente par défaut. Ajustez ceci à l’intervalle de temps lorsque l’alerte est déclenchée. Vous pouvez ajuster la plage horaire en utilisant une option De À pour un résultat plus granulaire ou en utilisant une plage rapide telle que 30 dernières minutes
.
Sur l’onglet Explorer, sélectionnez la source de données Loki. Dans le navigateur de logs, saisissez ce qui suit : {namespace="emojivoto"}
et cliquez sur le bouton Exécuter la requête en haut à droite de la page. Vous devriez voir ce qui suit :
Assurez-vous d’ajuster l’intervalle de temps en conséquence.
Sur cette page, vous pouvez filtrer davantage les résultats des logs. Par exemple, pour filtrer les logs du conteneur web-svc
de l’espace de noms emojivoto
, vous pouvez saisir la requête suivante : {namespace="emojivoto", container="web-svc"}
Plus d’explications sur l’utilisation de LogQL
peuvent être trouvées dans Étape 3 – Utilisation de LogQL.
Vous pouvez également utiliser les Événements Kubernetes Exportés installés précédemment et filtrer les événements liés à l’espace de noms emojivoto
.
Entrez la requête suivante dans le navigateur de journaux : {app="event-exporter"} |= "emojivoto"
. Cela renverra les événements Kubernetes liés à l’espace de noms emojivoto
.
Conclusion
Dans ce tutoriel, vous avez appris à inspecter les alertes existantes, à en créer de nouvelles et à configurer AlertManager
pour envoyer des notifications à Slack.
En savoir plus
- Configurer une pile de surveillance Kubernetes avec Prometheus, Grafana et Alertmanager sur DigitalOcean
- Créer des alertes à l’aide de DigitalOcean Uptime
La prochaine étape consiste à configurer la sauvegarde et la restauration à l’aide de Velero ou de TrilioVault dans votre cluster DOKS.