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.
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 : Avecauth_enabled: false, le tenant s'appellefake: 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.yamlBonne 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.
