本篇要來介紹 Alert Template 的語法。
先複習一下警報系統的運作方式:
1
,則表示觸發警報至設定的下游。第四點的下游 Alertmanager 跟 Prometheus 是獨立的服務。我們先不管。
第一點的警報規則是我們要學會設定的。
警報規則是一個 YAML 檔案,裡面最重要的就是決定警報狀態是 0 還是 1 的那個 PromQL,如
groups:
- name: example
rules:
- alert: HighRequestLatency
expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
for: 10m
labels:
severity: page
annotations:
summary: High request latency
job:request_latency_seconds:mean5m{job="myjob"} > 0.5
就是那個規則。一般方便觀察起見,可以把原 PromQL 寫成 Recording Rule,再在警報規則中引用 Recording Rule。
而 annotations
就是警報模板。他可以用來定義警報的標題、內容等等。這樣人類看到警報時,就可以知道發生了什麼事。
annotations 的值是一個字典,裡面可以有很多 key-value pair。這些 key-value pair 就是警報模板的內容,他會被傳給下游。例如:
annotations:
summary: High request latency
description: This alert is firing because the request latency is too high.
command: {{ .ExternalURL }}/{{ .CommonLabels.namespace }}/{{ .CommonLabels.pod }}
runbook_url: https://example.com/runbook
value 是可以使用 Go 的 text/template 語法。這樣就可以依跳出的警報動態生成警報內容。