blog.bressure.net

Application, Paramétrage

Les alertes avec Prometheus

admin

Remplacer munin par Prometheus se serait complet sans la partie envoi des alertes. Dans mon cas un simple mail suffira.

Alertmanager

Comme tout est dockerisé chez moi, je vais donc ajouter dans mon application de monitoring le service alertmanager. Le rôle de l’alertmanager est de recevoir les demandes de notification quand une métrique a une valeur donnée. Les fonctions de l’alertmanager sont entre autres de temporiser, relayer ou inhiber les notifications.

Grafana peut également envoyer des notifications mais comme je l’ai déjà mentionné, je ne vais l’utiliser que pour sa fonction de tableau de bord. Par ailleurs Grafana peut envoyer des alertes vers l’alertmanager donc ce dernier jouera parfaitement son rôle en recevant les demandes de notification de la part de Promethéus ou Grafana.

Alertes

Créer des alerte est relativement simple. Si munin est fournit avec beaucoup de plugin déjà éprouvés, il va falloir ajouter les alertes de bases comme: la saturation cpu, mémoire ou disque.

Paramétrage d’une destination mail dans l’alertmanager

Comme je définis un volume pour le conteneur alertmanager via mon fichier docker-compose.yml de l’appication de monitoring

   alertmanager:
      image: 'prom/alertmanager'
      restart: always 
      volumes:
        - alertmanager_conf:/etc/alertmanager

Il suffit depuis l’hôte docker de modifier le fichier /var/lib/docker/volumes/monitoring_alertmanager_conf/_data/alertmanager.yml

Voici le contenu qui permet de configurer l’envoi de mail, à modifier pour adapter à votre configuration de mail !

global:
  resolve_timeout: 5m
  smtp_smarthost: 'mon.serveur.smtp.com:587'
  smtp_from: 'monadresse@mail.com'
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'mail_to_admin'
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'
- name: 'mail_to_admin'
  email_configs:
  - to: destinataire@mail.com
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']

Configuration de prometheus pour utiliser l’alertmanager

L’application de monitoring utilise une image personnalisée de prométheus dont le seul but est de fournir une configuration de base visible dans le fichier prometheus.yml.

La partie importante est celle-ci:

rule_files:
  - '/etc/prometheus/rules/*'
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['alertmanager:9093']
    scheme: http
    timeout: 10s
    api_version: v1

Ajout d’un alerte d’occupation disque

Dans le fichier de configuration prometheus.yml on a indiqué de prendre tous les fichiers du répertoire /etc/prometheus comme règles. Il suffit alors d’ajouter dans ce répertoire les fichiers de règles des alertes. Comme prométheus est dans un conteneur, il faudra aller sur machine hôte dans le répertoire /var/lib/docker/volumes/monitoring_prometheus_conf/_data/rules/

Voici par exemple le contenu d’un fichier qui donne l’alerte quand l’occupation disque dépasse 80%

groups:
- name: disk
  rules:
  - alert: diskUsage
    expr: 1 - node_filesystem_free_bytes / node_filesystem_size_bytes > 0.8
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: consommation disque eleve

Règles enregistrées

On pourra factoriser les calculs de métriques qui peuvent être coûteux et partager le résultat dans des définitions d’alerte. Ainsi dans l’exemple suivant on calcul un seul fois l’occupation d’overcommit et 2 alertes réutilisent le résultat:

groups:
- name: memoire
  rules:
  - record: memoire:overcommit
    expr: node_memory_Committed_AS_bytes / (node_memory_MemTotal_bytes + node_memory_SwapTotal_bytes) 
  - alert: overcommit
    expr: memoire:overcommit > 0.9
    for: 10m
    labels:
      severity: critical
    annotations:
      summary: surconsommation memoire
  - alert: overcommit
    expr: memoire:overcommit > 0.8 and memoire:overcommit <= 0.9
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: surconsommation memoire

L’étape suivante sera la surveillance de l’espace disque occupé par docker. Il peut être intéressant de suivre l’évolution de cette métrique et se sera l’occasion d’apprendre à étendre le node-exporter de prométheus. La suite au prochain billet…

Tags:

Comments

  1. Bonjour,
    Je ne comprends pas comment ajouter différentes règles à différentes machines.
    Merci d’avance,
    Fred

    1. Bonjour,

      Si vous voulez avoir des alertes différentes selon les machines, vous pourriez utiliser des filtres sur les instances.

      Par exemple si j’ai une règle qui s’appelle overcommit, je peux créer une alerte overcommit:moninstance avec comme valeur overcommit{instance=’192.168.0.12:9100′} > 1 qui sera déclenchée pour l’instance donnée par 192.168.0.12:9100

      Cordialement,

Répondre à Frédéric Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Back to top