RousselTMLEARNING

Observabilité

Alerter sur les logs avec le Ruler de Loki

Mettre en place des alertes et des recording rules LogQL avec le Ruler Loki : configuration, fichiers de règles, Alertmanager, remote write et tests.

1. Principe #

Même mécanique que Prometheus, avec LogQL.

Alertes et recording rules #

Le Ruler exécute des requêtes LogQL de type métrique selon un intervalle. Une alerte notifie Alertmanager lorsque le résultat dépasse un seuil pendant la durée for ; une recording rule précalcule une série et l'écrit via remote write.

Fonctionnement du Ruler Loki
Le Ruler lit les règles sur disque ou dans un stockage objet.

2. Configurer le Ruler #

Stockage des règles et destinations.

loki.yaml #

ruler:
  storage:
    type: local
    local:
      directory: /loki/rules              # <répertoire>/<tenant>/*.yaml
  rule_path: /loki/rules-temp
  alertmanager_url: http://alertmanager:9093
  ring: { kvstore: { store: inmemory } }
  enable_api: true
  enable_alertmanager_v2: true
  remote_write:
    enabled: true
    client:
      url: http://prometheus:9090/api/v1/write
À savoir : Avec auth_enabled: false, le tenant s'appelle fake : placez les règles dans /loki/rules/fake/rules.yaml.

3. Écrire des règles #

Alertes et enregistrements.

Fichier de règles #

# /loki/rules/fake/rules.yaml
groups:
  - name: logs-alerts
    interval: 1m
    rules:
      - alert: HighErrorLogRate
        expr: sum by (app) (rate({env="prod"} |= "error" [5m])) > 5
        for: 10m
        labels: { severity: warning }
        annotations:
          summary: "Taux d'erreurs élevé dans {{ $labels.app }}"
          description: "{{ $value | printf \"%.1f\" }} erreurs/s depuis 10 minutes."

      - alert: ServiceSilent
        expr: absent_over_time({app="payment", env="prod"}[10m])
        for: 5m
        labels: { severity: critical }
        annotations: { summary: "Plus aucun log reçu du service payment" }

  - name: logs-recording
    rules:
      - record: app:log_errors:rate5m
        expr: sum by (app) (rate({env="prod"} |= "error" [5m]))

4. Tester et exploiter #

API et vérifications.

API du Ruler #

curl -s http://localhost:3100/prometheus/api/v1/rules | jq '.data.groups[].rules[] | {name, state}'
curl -s http://localhost:3100/prometheus/api/v1/alerts | jq
curl -s http://localhost:3100/loki/api/v1/rules             # règles stockées

# Charger des règles avec lokitool / cortex-tools
lokitool rules sync --address=http://localhost:3100 --id=fake rules.yaml
lokitool rules check rules.yaml
lokitool rules lint rules.yaml
Bonne Pratique : Testez d'abord l'expression dans Explore : une requête qui renvoie des données et un seuil réaliste évitent les alertes bruyantes.

Pour aller plus loin