RousselTMLEARNING

Observabilité

Mimir : ruler, Alertmanager et mimirtool

Évaluer des règles d'enregistrement et d'alerte dans Mimir, configurer l'Alertmanager multi-tenant et automatiser le tout avec mimirtool (rules, alertmanager, analyze).

1. Le ruler #

Les règles Prometheus, évaluées sur toutes les données.

Principe #

Le ruler évalue les règles d'enregistrement et d'alerte au format Prometheus, par tenant, sur l'ensemble des données de Mimir (pas seulement celles d'un Prometheus). Les résultats des règles d'enregistrement sont réécrits dans Mimir ; les alertes sont envoyées à l'Alertmanager.

ruler:
  alertmanager_url: http://localhost:8080/alertmanager   # Alertmanager intégré
  rule_path: /data/ruler
ruler_storage:
  s3: { bucket_name: mimir-ruler }
Bonne Pratique : Déplacez les règles des Prometheus vers le ruler dès que vous agrégez plusieurs sources : une règle sum by (service) évaluée dans un Prometheus ne voit que ses propres cibles.

Un fichier de règles #

# rules/api.yaml
namespace: api
groups:
  - name: api-slo
    interval: 1m
    rules:
      - record: service:http_requests:rate5m
        expr: sum by (service) (rate(http_requests_total[5m]))
      - alert: ApiHighErrorRate
        expr: |
          sum by (service) (rate(http_requests_total{code=~"5.."}[5m]))
            / sum by (service) (rate(http_requests_total[5m])) > 0.05
        for: 10m
        labels: { severity: critical }
        annotations:
          summary: "{{ $labels.service }} : plus de 5 % d'erreurs" 

2. mimirtool #

Le couteau suisse de Mimir.

Installation et configuration #

# Binaire (Linux amd64)
curl -fLo mimirtool https://github.com/grafana/mimir/releases/latest/download/mimirtool-linux-amd64
chmod +x mimirtool

export MIMIR_ADDRESS=http://mimir:8080
export MIMIR_TENANT_ID=team-platform

Gérer les règles #

# Vérifier la syntaxe et le style
mimirtool rules check rules/*.yaml
mimirtool rules lint rules/*.yaml

# Charger un fichier, lister, comparer, synchroniser (GitOps)
mimirtool rules load rules/api.yaml
mimirtool rules list
mimirtool rules diff rules/*.yaml
mimirtool rules sync rules/*.yaml      # supprime aussi ce qui n'est plus dans Git

# Convertir des règles Prometheus existantes
mimirtool rules prepare -i rules/*.yaml
Bonne Pratique : Placez mimirtool rules diff dans la CI des pull requests et mimirtool rules sync dans le déploiement : les règles deviennent du code relu et versionné.

Analyser l'usage des métriques #

mimirtool analyze compare les métriques utilisées par vos dashboards et règles aux métriques stockées : idéal pour supprimer les séries que personne ne lit.

mimirtool analyze grafana --address=http://grafana:3000 --key=$GRAFANA_TOKEN   # metrics-in-grafana.json
mimirtool analyze ruler                                                           # metrics-in-ruler.json
mimirtool analyze prometheus --address=http://mimir:8080/prometheus --id=$MIMIR_TENANT_ID

3. L'Alertmanager multi-tenant #

Une configuration par tenant.

Configurer et charger #

# mimir.yaml
alertmanager:
  data_dir: /data/alertmanager
  external_url: http://mimir.example.com/alertmanager
  fallback_config_file: /etc/mimir/alertmanager-fallback.yaml
# alertmanager.yaml du tenant team-platform
route:
  receiver: slack
  group_by: [alertname, service]
receivers:
  - name: slack
    slack_configs:
      - api_url: https://hooks.slack.com/services/XXX
        channel: '#alertes-plateforme'
mimirtool alertmanager load alertmanager.yaml
mimirtool alertmanager get
À savoir : Grafana sait gérer cet Alertmanager : ajoutez une source de données de type Alertmanager pointant vers http://mimir:8080/ avec l'implémentation « Mimir », puis gérez règles et silences depuis Grafana Alerting.

Articles liés

La stack LGTM (Loki, Grafana, Tempo, Mimir) : architecture et mise en place

Comprendre la stack LGTM de Grafana Labs : Loki pour les logs, Grafana pour la visualisation, Tempo pour les …

Pourquoi Grafana Mimir ? Architecture et modes de déploiement

Les limites de Prometheus seul, ce qu'apporte Mimir (stockage long terme, haute disponibilité, multi-tenant),…

Mimir : le chemin d'écriture (distributor, ingesters, réplication et déduplication HA)

Comment Mimir ingère les métriques : remote_write, validation et limites du distributor, hash ring, réplicati…

Pour aller plus loin