Provisioning алертов и контакт-поинтов¶
Алерты: вы разобрались с ручным созданием в части VI. Теперь вопрос: как перенести это в Git?
Исторически сложилось так: алертинг в Grafana долго жил без полноценного Provisioning'а. Только с 2023 появились нормальные API и конфиги для него. В Grafana 13.1.3 Provisioning алертов полностью поддерживается — contact points, notification templates, mute timings, alert rules, notification policies.
Структура конфига¶
Всё это описывается в одном YAML-файле (или нескольких — Grafana читает все). Например:
apiVersion: 1
contactPoints:
- orgId: 1
name: default
receivers:
- uid: cp_one
type: email
settings:
addresses: oncall@company.ru
singleEmail: false
notificationPolicies:
- orgId: 1
receiver: default
group_by: ["alertname", "severity"]
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
routes:
- receiver: db-oncall
object_matchers:
- ["service", "=", "database"]
group_by: ["alertname"]
mute_time_intervals: ["weekends"]
notificationTemplates:
- orgId: 1
name: company-slack
template: |
{{ define "company-slack.title" }}
[{{ .Status }}] {{ .Labels.alertname }}
{{ end }}
muteTimeIntervals:
- orgId: 1
name: weekends
time_intervals:
- weekdays: "saturday-sunday"
alertRules:
- orgId: 1
name: High CPU
uid: rule-uid
condition: B
folderUID: folder-federal
ruleGroup: main
noDataState: Alerting
execErrState: Error
for: 5m
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU used over 90% for 5 minutes"
runbook_url: "https://wiki.company.run/alerts/high-cpu.md"
labels:
severity: warning
data:
- refId: A
relativeTimeRange:
from: 600
to: 0
model:
expr: avg by(instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.9
Поле data содержит query-ы от источников данных. relativeTimeRange — это "откат назад" на 600 секунд. RefId — ссылки внутри движка алертов.
Важно! Провайдер дашбордов управляет JSON-файлами. Провайдер алертов — YAML-файлами. Это разные провайдеры, они не связаны.
Group by и маршрутизация¶
В Object matchers можно ссылаться на метки label — они берутся из алерта. Синтаксис object_matchers использует тот же язык выражений что и сам алертинг — читайте доку Grafana.
Пример: [["service", "=", "database"]] — все алерты, где service метка равна "database", пойдут ресиверу "db-oncall".
Как применять¶
Grafana ищет в provisioning/alerting/*.yml и загружает все ресурсы. При изменении достаточно перезапустить Grafana или, в версии 13.1.3, послать SIGHUP для перечитывания provisioning/ без рестарта.
Mute Timings provisioning¶
Mute timings — это окна тишины. Их можно задать как в локальной зоне, так и глобально. В конфиге — как выше. Важно: time_intervals — массив; каждый элемент содержит недельные дни и часть дня (часы). Например, ночные выходные:
- weekdays: "friday"
times:
- start_time: "20:00"
end_time: "23:59"
- weekdays: "saturday-sunday"
Проверьте документацию: синтаксис times стыкуется с IANA time zone.
Далее: Provisioning плагинов