Prometheus Alert Manager

Für die Alarmierung sollte der Prometheus Alertmanager verwendet werden. Dieser unterstützt das Gruppieren von Alarmen nach vordefinierten Labels (z.B. "Serverinstanzen") und das Routen über verschiedene Drittanbieter, z.B. per JSON über ein Web-Hook oder per E-Mail.

Eine Liste der Integrationen ist unter hier verfügbar.

Die Alerts selbst müssen in der Prometheus-Konfiguration gesetzt werden. Hierzu kann auch eine separate alertrules.yml-Datei angelegt werden, die in der Prometheus-Konfiguration referenziert wird.

Beispielkonfiguration

Die folgende Beispielkonfiguration prüft, ob der freie RAM eines Node-Exporters die Schwelle von 10% unterschreitet:

alertrules.yml
groups:
- name: Node_Exporter.SystemAlerts
  rules:
  - alert: HostOutOfMemory
    expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: Host out of memory (instance {{ $labels.instance }})
      description: Node memory is filling up (< 10% left)\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}

Pfad anpassen

Außerdem muss der Pfad zum Alert Manager im Prometheus konfiguriert werden (standardmäßig localhost:9093):

prometheus.yml
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - localhost:9093
rule_files:
  - "alertrules.yml"

Alert-Verarbeitung

In der Alert-Manager-Konfiguration wird die Alert-Verarbeitung angepasst. Hier können Alert Receiver konfiguriert werden (hier beispielhaft ein SMTP Receiver) sowie Gruppierung und Inhibition Rules festgelegt werden.

Alerts können nach bestimmten Labels gruppiert (route-Elemente) werden, außerdem können für Alert-Gruppen Zeitintervalle gesetzt werden, welche die Verteilung der Alerts steuern. Inhibition Rules können gesetzt werden, um beispielsweise hierarchische Alert-Strukturen (z.B. nach severity) aufzubauen.

alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: inubit.nemesys:25
  smtp_from: alertmanager@virtimo.de

route:
  group_by: ['instance','alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  receiver: 'smtp'

receivers:
- name: 'smtp'
  email_configs:
  - to: alerting@virtimo.de

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']