Alerting auf Logs mit dem Loki-Ruler
Der Loki-Ruler
Der Loki-Ruler wertet Prometheus-artige Alerting-Rules aus, deren Ausdruck eine LogQL-Query ist. Treffer werden als Alerts an Alertmanager geschickt.
Damit lassen sich Logs direkt als Alert-Quelle nutzen, ohne sie zuvor in Metriken umzuwandeln. Die Auswertung läuft im Ruler-Komponente von Loki.
rulerConfig in den Helm-Chart-Values
In den Helm-Chart-Values aktiviert ein rulerConfig-Block den Ruler.
rulerConfig:
alertmanager_url: http://alertmanager-operated.example.com:9093
ring:
kvstore:
store: inmemory
enable_api: true
alertmanager_url verweist auf den Alertmanager, der die Alerts empfängt. ring.kvstore.store: inmemory hält den Ruler-Ring im Speicher und genügt für eine einzelne Replica. enable_api: true schaltet die Ruler-API frei.
Rules per Kustomize-Patch mounten
Die Rules liegen in einer ConfigMap und werden über einen Kustomize-JSON6902-Patch in das Loki-StatefulSet gemountet.
patches:
- target:
kind: StatefulSet
name: loki
namespace: loki
patch: |-
- op: add
path: /spec/template/spec/containers/0/volumeMounts/-
value:
name: loki-ruler-cm
mountPath: /var/loki/rules/fake/rules.yaml
subPath: rules.yaml
- op: add
path: /spec/template/spec/volumes/-
value:
name: loki-ruler-cm
configMap:
name: loki-ruler-cm
Der erste Patch hängt einen volumeMount an den Loki-Container an, der zweite ein volume, das die ConfigMap referenziert. subPath: rules.yaml mountet nur den einen Schlüssel als Datei.
Rules-Pfad-Layout pro Tenant
Loki erwartet Rules unter <rules-path>/<tenant>/. Der Tenant-Teil des Pfades ist erforderlich.
/var/loki/rules/<tenant>/rules.yaml
Im Single-Tenant-Modus ist fake die Standard-Tenant-ID. Deshalb liegt die Datei unter fake/, also /var/loki/rules/fake/rules.yaml.
ConfigMap mit den Alerting-Rules
Die ConfigMap enthält die rules.yaml mit einer groups/rules-Struktur.
apiVersion: v1
kind: ConfigMap
metadata:
name: loki-ruler-cm
namespace: loki
data:
rules.yaml: |
groups:
- name: log-alerts
rules:
- alert: HighErrorLogRate
expr: |
sum(rate({k8s_namespace_name="example-app"} |= `error` [5m])) > 0.5
for: 5m
labels:
severity: warning
annotations:
summary: Erhöhte Rate an Fehler-Logzeilen in example-app
Der expr-Ausdruck ist eine LogQL-Query. Der innere rate(...)-Ausdruck misst die Rate passender Logzeilen über fünf Minuten, sum(...) aggregiert sie, der Schwellwert > 0.5 löst den Alert aus. for: 5m verlangt, dass die Bedingung fünf Minuten anhält, bevor der Alert von pending auf firing wechselt. labels und annotations werden an den Alert angehängt.
Zusammenfassung
- Der Loki-Ruler wertet Alerting-Rules mit LogQL-Ausdrücken aus und sendet Alerts an Alertmanager.
- Alerting auf Logs erfolgt ohne vorherige Umwandlung in Metriken.
rulerConfigaktiviert den Ruler mitalertmanager_url,ring.kvstore.store: inmemoryundenable_api: true.- Ein Kustomize-JSON6902-Patch mountet die Rules-ConfigMap als
volumeMountundvolumein das Loki-StatefulSet. - Loki erwartet Rules unter
<rules-path>/<tenant>/. fakeist die Standard-Tenant-ID im Single-Tenant-Modus, daher derfake/-Pfad.- Eine Rule besteht aus
expr(LogQL),for,labelsundannotations.