Prometheus unterstützt die Definition von Regeln, um Metriken zu
aggregieren, zu berechnen und Alarme auszulösen. Diese Regeln werden in
sogenannten Regeldateien definiert, die in der
prometheus.yml-Datei referenziert werden. Es gibt zwei
Haupttypen von Regeln: Aufzeichnungsregeln (Recording Rules) und
Alarmregeln (Alerting Rules).
Aufzeichnungsregeln dienen dazu, komplexe oder häufig benötigte Abfragen vorab zu berechnen und die Ergebnisse als neue Metriken zu speichern. Dies verbessert die Abfrageleistung und vereinfacht die Nutzung von wiederkehrenden Berechnungen.
Beispiel für eine Aufzeichnungsregel:
Erstellen Sie eine Datei recording.rules:
groups:
- name: example
rules:
- record: job:http_inprogress_requests:sum
expr: sum by (job) (http_inprogress_requests)Diese Regel summiert alle laufenden HTTP-Anfragen pro Job und
speichert das Ergebnis als neue Metrik
job:http_inprogress_requests:sum.
Referenzierung der Regeldatei in
prometheus.yml:
rule_files:
- 'recording.rules'Alarmregeln definieren Bedingungen, unter denen Alarme ausgelöst werden sollen. Diese Alarme können an den Alertmanager gesendet und von dort weiterverarbeitet werden.
Beispiel für eine Alarmregel:
Erstellen Sie eine Datei alert.rules:
groups:
- name: example-alerts
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."Diese Regel löst einen Alarm aus, wenn eine Instanz für mehr als
5 Minuten nicht erreichbar ist (up == 0).
Referenzierung der Regeldatei in
prometheus.yml:
rule_files:
- 'alert.rules'Um Alarme weiterzuleiten und zu verwalten, muss Prometheus mit dem Alertmanager konfiguriert werden.
Konfiguration des Alertmanagers in
prometheus.yml:
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']Beispiel für eine
alertmanager.yml-Datei:
Diese Datei wird zur Konfiguration des Alertmanagers verwendet:
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
receiver: 'team-X-mails'
receivers:
- name: 'team-X-mails'
email_configs:
- to: 'team-X@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'alertmanager'
auth_identity: 'alertmanager'
auth_password: 'password'Beispiel für eine komplexere Aufzeichnungsregel:
groups:
- name: instance_cpu
rules:
- record: instance:cpu_usage:rate5m
expr: avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]))Diese Regel berechnet die durchschnittliche CPU-Auslastung pro Instanz über einen Zeitraum von 5 Minuten.
Beispiel für eine komplexere Alarmregel:
groups:
- name: complex-alerts
rules:
- alert: HighMemoryUsage
expr: node_memory_Active_bytes / node_memory_MemTotal_bytes * 100 > 90
for: 10m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.instance }}"
description: "Memory usage on {{ $labels.instance }} is above 90% for more than 10 minutes."
- alert: DiskSpaceLow
expr: node_filesystem_free_bytes / node_filesystem_size_bytes * 100 < 10
for: 10m
labels:
severity: critical
annotations:
summary: "Low disk space on {{ $labels.instance }}"
description: "Disk space on {{ $labels.instance }} is below 10% for more than 10 minutes."Durch die Verwendung regelbasierter Konfigurationen können Sie komplexe Überwachungsszenarien abdecken, Metriken effizient aggregieren und aussagekräftige Alarme definieren, die Ihnen helfen, Probleme frühzeitig zu erkennen und zu beheben.