Справочник по шаблонам уведомлений
По умолчанию Grafana предоставляет предопределённые шаблоны для форматирования уведомительных сообщений.
Вы также можете настраивать свои уведомления с помощью пользовательских шаблонов, основанных на языке шаблонов Go.
Эта документация перечисляет данные, доступные для использования в шаблонах уведомлений.
Notification Data
В шаблонах уведомлений dot (.) инициализируется следующими данными:
Важно помнить, что
одно уведомление может группировать несколько оповещений, чтобы сократить количество получаемых уведомлений. Alerts — это массив, включающий все оповещения в уведомлении.
Вот пример, выводящий все доступные данные уведомления из dot (.):
{{ define "custom_template" }}
{{ .Receiver }}
{{ .Status }}
There are {{ len .Alerts }} alerts
There are {{ len .Alerts.Firing }} firing alerts
There are {{ len .Alerts.Resolved }} resolved alerts
{{ .GroupLabels }}
{{ .CommonLabels }}
{{ .CommonAnnotations }}
{{ .ExternalURL }}
{{ end }}
Вы можете выполнить этот шаблон, передав dot (.):
{{ template "custom_template" . }}
Alert
Alert содержит данные об отдельном оповещении:
Grafana-managed оповещения включают следующие дополнительные свойства:
Этот пример итерируется по списку сработавших и разрешившихся оповещений (.Alerts) в уведомлении и выводит данные для каждого оповещения:
{{ define "custom_template" }}
{{ range .Alerts }}
{{ .Status }}
{{ .Labels }}
{{ .Annotations }}
{{ .StartsAt }}
{{ .EndsAt }}
{{ .GeneratorURL }}
{{ .Fingerprint }}
{{/* Only available for Grafana-managed alerts */}}
{{ .DashboardURL }}
{{ .PanelURL }}
{{ .SilenceURL }}
{{ .Values }}
{{ .ValueString }}
{{ end }}
{{ end }}
Вы можете запустить этот шаблон, передав dot (.):
{{ template "custom_template" . }}
KV
KV — это набор пар ключ-значение, где каждый ключ и значение — строка.
Подобно доступу к свойствам переменных, вы можете использовать . для получения значения. Например:
{{ define "custom_template" }}
{{ .CommonLabels.grafana_folder }}
{{ end }}
Если KV содержит числа или булевы значения, то это строковые представления числового или булева значения.
Кроме того, KV предоставляет методы для сортировки пар, удаления ключей и итерации только по ключам или значениям:
Вот пример использования этих методов:
{{ define "custom_template" }}
{{ .CommonLabels.SortedPairs }}
{{ .CommonLabels.Names }}
{{ .CommonLabels.Values }}
{{ .CommonLabels.Remove (stringSlice "grafana_folder") }}
{{ end }}
Time
Некоторые функции шаблонов и свойства возвращают объект Time, который относится к типу Time в пакете time языка Go.
При доступе к объекту Time вы можете использовать различные функции Time в ваших шаблонах следующим образом.
{{ define "custom_template" }}
{{ range .Alerts }}
{{ .StartsAt }}
{{ .StartsAt.Add 6000000000000 }}
{{ .StartsAt.Add -6000000000000 }}
{{ .StartsAt.AddDate 1 0 0 }}
{{ .StartsAt.Year }}/{{ .StartsAt.Month }}/{{ .StartsAt.Day }}
{{ .StartsAt.Hour }}:{{ .StartsAt.Minute }}:{{ .StartsAt.Second }}
{{ .StartsAt.YearDay }}-{{ .StartsAt.Weekday }}
{{ .StartsAt.Unix }} {{ .StartsAt.UnixMilli }}
{{ end}}
{{ end }}
Функции
Функции могут выполнять в шаблонах такие действия, как преобразование или форматирование данных.
Обратите внимание, что доступны
функции, предоставляемые языком шаблонов Go, такие как index, and, printf и len, а также многие другие.
Кроме того, для шаблонизации уведомлений также доступны следующие функции:
Вот пример использования некоторых функций для форматирования текста:
{{ define "custom_template" }}
{{ title "hello, world!" }}
{{ toUpper "Hello, world!" }}
{{ toLower "Hello, world!" }}
{{ trimSpace "Hello, world!" }}
{{ match "a.*" "abc" }}
{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }}
{{ join "-" (stringSlice "a" "b" "c") }}
{{ safeHtml "<b>Text</b>"}}
{{ stringSlice "a" "b" "c" }}
{{ end }}
date и tz могут форматировать время. Например, чтобы вывести время срабатывания оповещения в формате 15:04:05 MST:
{{ define "custom_template" }}
{{ range .Alerts }}
{{ .StartsAt | date "15:04:05 MST" }}
{{ end}}
{{ end }}
Затем вы можете использовать tz, чтобы изменить часовой пояс с UTC на местное время, такое как Europe/Paris.
{{ define "custom_template" }}
{{ range .Alerts }}
{{ .StartsAt | tz "Europe/Paris" }}
{{ .StartsAt | tz "Europe/Paris" | date "15:04:05 MST" }}
{{ end}}
{{ end }}
2024-10-30 21:01:45.227 +0100 CET
21:01:45 CET
Namespaced Functions
Note
Namespaced Functions пока не является общедоступной функцией в Grafana Cloud.
Помимо функций верхнего уровня, также доступны следующие namespaced functions:
Функции коллекций
Пример использования функций коллекций:
{{ define "collection.example" }}
{{- /* Create a dictionary of alert metadata */ -}}
{{- $metadata := coll.Dict
"severity" "critical"
"team" "infrastructure"
"environment" "production"
-}}
{{- /* Create a slice of affected services */ -}}
{{- $services := coll.Slice "database" "cache" "api" -}}
{{- /* Append a new service to the list */ -}}
{{- $services = coll.Append "web" $services -}}
{{- /* Use the collections in a template */ -}}
Affected Services: {{ range $services }}{{ . }},{{ end }}
Alert Metadata:
{{- range $k, $v := $metadata }}
{{ $k }}: {{ $v }}
{{- end }}
{{ end }}
Вывод:
Affected Services: database,cache,api,web,
Alert Metadata:
environment: production
severity: critical
team: infrastructure
Функции данных
Пример использования функций данных:
{{ define "data.example" }}
{{- /* First, let's create some alert data as a JSON string */ -}}
{{ $jsonString := `{
"service": {
"name": "payment-api",
"environment": "production",
"thresholds": {
"error_rate": 5,
"latency_ms": 100
}
}
}` }}
{{- /* Parse the JSON string into an object we can work with */ -}}
{{ $config := $jsonString | data.JSON }}
{{- /* Create a new alert payload */ -}}
{{ $payload := coll.Dict
"service" $config.service.name
"environment" $config.service.environment
"status" .Status
"errorThreshold" $config.service.thresholds.error_rate
}}
{{- /* Output the payload in different JSON formats */ -}}
Compact JSON: {{ $payload | data.ToJSON }}
Pretty JSON with 2-space indent:
{{ $payload | data.ToJSONPretty " " }}
{{ end }}
Вывод:
Compact JSON: {"environment":"production","errorThreshold":5,"service":"payment-api","status":"resolved"}
Pretty JSON with 2-space indent:
{
"environment": "production",
"errorThreshold": 5,
"service": "payment-api",
"status": "resolved"
}
Функции шаблонов
{{ define "template.example" -}}
{{ coll.Dict
"info" (tmpl.Exec `info` . | data.JSON)
"severity" (tmpl.Inline `{{ print "critical" | toUpper }}` . )
| data.ToJSONPretty " "}}
{{- end }}
{{- /* Define a sub-template */ -}}
{{ define "info" -}}
{{coll.Dict
"team" "infrastructure"
"environment" "production" | data.ToJSON }}
{{- end }}
Вывод:
{
"info": {
"environment": "production",
"team": "infrastructure"
},
"severity": "CRITICAL"
}
Функции времени
Пример использования функций времени:
{{ define "time.example" }}
{{- /* Get current time in different formats */ -}}
Current Time (UTC): {{ (time.Now).UTC.Format "2006-01-02 15:04:05 MST" }}
Current Time (Local): {{ (time.Now).Format "Monday, January 2, 2006 at 15:04:05" }}
{{- /* Compare alert time with current time */ -}}
{{ $timeAgo := (time.Now).Sub .StartsAt }}
Alert fired: {{ $timeAgo }} ago
{{ end }}
Вывод:
Current Time (UTC): 2025-03-08 18:14:27 UTC
Current Time (Local): Saturday, March 8, 2025 at 14:14:27
Alert fired: 25h49m32.78574723s ago
Отличия от шаблонов аннотаций и меток
В правиле оповещения вы также можете шаблонизировать аннотации и метки, чтобы включать дополнительную информацию. Например, вы можете добавить аннотацию summary, отображающую значение запроса, вызывающее срабатывание оповещения.
Шаблоны аннотаций и меток добавляют релевантную информацию к отдельным экземплярам оповещений, тогда как шаблоны уведомлений информируют о группе экземпляров оповещений.
Поскольку оба типа шаблонов работают в разных контекстах, функции и переменные, доступные в шаблонах аннотаций и меток, отличаются от используемых в шаблонах уведомлений.