Справочник по шаблонам аннотаций и меток
Аннотации и метки в правилах оповещений можно определять с помощью обычного текста. Однако вы также можете определять шаблоны, чтобы настраивать их значения с помощью динамических данных из запросов правил оповещений.
Например, вы можете шаблонизировать аннотацию summary, чтобы включить информацию из значений запроса, предоставляя дежурным релевантный контекст оповещения. Различные сценарии использования см. в разделе
Шаблонизация аннотаций и меток.
В шаблонах переменные представляют динамические значения из запросов, а функции выполняют действия по преобразованию или форматированию этих данных.
Переменные
Переменные представляют динамические значения из запросов правил оповещений, которые можно отображать или использовать в ваших шаблонах.
Символы $ и . используются для ссылки на переменные и их свойства. Вы можете ссылаться на переменные напрямую в определениях правил оповещений с помощью символа $, за которым следует имя переменной. Аналогично вы можете обращаться к свойствам переменных через нотацию dot (.) в шаблонах правил оповещений.
{{ $values.A.Value }}
Шаблоны основаны на системе шаблонизации Go. Дополнительные сведения см. в разделе Язык шаблонов.
Следующие переменные доступны при шаблонизации аннотаций и меток:
$labels
Переменная $labels содержит все метки из запроса. Она исключает
пользовательские и зарезервированные метки, содержая только метки запроса.
Например, предположим, у вас есть запрос, возвращающий использование CPU для всех ваших серверов, и правило оповещения, которое срабатывает, когда использование CPU на любом из ваших серверов превысило 80% за последние 5 минут. Вы хотите добавить аннотацию summary к оповещению, которая сообщает, какой сервер испытывает высокую нагрузку CPU. С переменной $labels вы можете написать шаблон, выводящий читаемое предложение, например:
CPU usage for {{ $labels.instance }} has exceeded 80% for the last 5 minutes
Результат этого шаблона будет таким:
CPU usage for server1 has exceeded 80% for the last 5 minutes
Если вы используете classic condition, то
$labelsне будет содержать никаких меток из запроса. Classic conditions отбрасывают эти метки, чтобы обеспечить одномерное поведение (не более одного оповещения на правило оповещения). Если вы хотите использовать метки из запроса в вашем шаблоне, используйте пример здесь.
$values
Переменная $values — это таблица, содержащая метки и значения с плавающей точкой всех instant-запросов и выражений, индексированные по их Ref ID (например, A, B, C и т. д.). Она не содержит результаты range-запросов, так как они могут возвращать сотни или тысячи строк.
Каждый Ref ID, такой как $values.A, имеет следующие свойства
Вот предыдущий пример, теперь выводящий значение instant-запроса с Ref ID A:
{{ $values.A.Value }} CPU usage for {{ $labels.instance }} over the last 5 minutes.
Если у оповещения есть метка instance=server1 и запрос возвращает 81.2345, шаблон выведет:
81.2345 CPU usage for instance1 over the last 5 minutes.
Если запрос в Ref ID A — это range-запрос, а не instant-запрос, то добавьте выражение reduce с Ref ID B и замените $values.A.Value на $values.B.Value:
{{ $values.B.Value }} CPU usage for {{ $labels.instance }} over the last 5 minutes.
В качестве альтернативы вы можете использовать функцию index() для получения значения запроса:
{{ index $values "B" }} CPU usage for {{ index $labels "instance" }} over the last 5 minutes.
Note
Имена переменных, начинающиеся с цифры (например,
1B), не являются допустимыми идентификаторами в шаблонах Go.Чтобы получить доступ к значению или метке, ключ которой начинается с цифры, используйте функцию
index:{{ index $values "1B" }} CPU usage for {{ index $labels "1instance" }} over the last 5 minutes.Использование
{{ $values.1B.Value }}недопустимо и приводит к тому, что код шаблона отображается как обычный текст.
$value
Переменная $value — это строка, содержащая метки и значения всех instant-запросов; выражений threshold, reduce и math; и classic conditions в правиле оповещения.
Когда в правиле оповещения используется один источник данных, $value возвращает значение запроса напрямую.
Этот пример выводит переменную $value:
{{ $value }}: CPU usage has exceeded 80% for the last 5 minutes.
При использовании нескольких источников данных он отобразит что-то вроде этого:
[ var='A' labels={instance=instance1} value=81.234, , [ var='B' labels={instance=instance2} value=1 ] ]: CPU usage has exceeded 80% for the last 5 minutes.
Но с одним источником данных он отобразит только значение запроса:
81.234: CPU usage has exceeded 80% for the last 5 minutes.
Вместо этого мы рекомендуем использовать $values, которая содержит ту же информацию, что и $value, но структурирована в более удобном для использования табличном формате.
Функции
Функции могут выполнять в шаблонах такие действия, как преобразование или форматирование данных.
Обратите внимание, что доступны
функции, предоставляемые языком шаблонов Go, такие как index, and, printf и len, а также многие другие.
Кроме того, для шаблонизации аннотаций и меток также доступны следующие функции:
Числа
Строки
Прочее
Для дополнительного контекста об этих функциях: шаблонизация в Grafana основана на реализации шаблонов Prometheus, что позволяет использовать эти функции и шаблоны, похожие на Prometheus, для форматирования сообщений оповещений в Grafana.
humanize
Функция humanize гуманизирует десятичные числа:
{{ humanize 1000.0 }}
1k
humanize1024
Функция humanize1024 работает подобно humanize, но использует 1024 в качестве основания вместо 1000:
{{ humanize1024 1024.0 }}
1ki
humanizeDuration
Функция humanizeDuration гуманизирует длительность в секундах:
{{ humanizeDuration 60.0 }}
1m 0s
humanizePercentage
Функция humanizePercentage гуманизирует значение отношения от 0 до 1 в проценты:
{{ humanizePercentage 0.2 }}
20%
humanizeTimestamp
Функция humanizeTimestamp гуманизирует Unix-метку времени:
{{ humanizeTimestamp 1577836800.0 }}
2020-01-01 00:00:00 +0000 UTC
toTime
Функция toTime преобразует Unix-метку времени в секундах во время:
{{ toTime 1727802106 }}
2024-10-01 17:01:46 +0000 UTC
title
Функция title делает первую букву каждого слова заглавной:
{{ title "hello, world!" }}
Hello, World!
toUpper
Функция toUpper возвращает весь текст в верхнем регистре:
{{ toUpper "Hello, world!" }}
HELLO, WORLD!
toLower
Функция toLower возвращает весь текст в нижнем регистре:
{{ toLower "Hello, world!" }}
hello, world!
stripPort
Функция stripPort разделяет строку на хост и порт, затем возвращает только хост:
{{ stripPort "example.com:8080" }}
example.com
match
Функция match сопоставляет текст с шаблоном регулярного выражения:
{{ match "a.*" "abc" }}
true
reReplaceAll
Функция reReplaceAll заменяет текст, соответствующий регулярному выражению:
{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }}
example.com:8080
graphLink
Функция graphLink возвращает путь к графическому представлению в
Explore для заданного выражения и источника данных:
{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}]
parseDuration
Функция parseDuration разбирает строку длительности, например “1h”, в количество секунд, которое она представляет.
{{ parseDuration "1h" }}
3600
stripDomain
Функция stripDomain удаляет часть домена из FQDN, оставляя порт нетронутым:
{{ stripDomain "example.com:8080" }}
example:8080
tableLink
Функция tableLink возвращает путь к табличному представлению в
Explore для заданного выражения и источника данных:
{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}]
args
Функция args преобразует список объектов в карту с ключами arg0, arg1 и т. д. Это предназначено для передачи нескольких аргументов в шаблоны:
{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}}
1 2
safeHtml
Функция safeHtml помечает строку как HTML, не требующий автоэкранирования:
{{ safeHtml "<b>Text</b>"}}
<b>Text</b>
externalURL
Функция externalURL возвращает внешний URL сервера Grafana, как настроено в ini-файле(ах):
{{ externalURL }}
https://example.com/grafana
pathPrefix
Функция pathPrefix возвращает путь сервера Grafana, как настроено в ini-файле(ах):
{{ pathPrefix }}
/grafana
Отличия от шаблонов уведомлений
И шаблоны уведомлений, и шаблоны правил оповещений используют систему шаблонизации Go. Однако функции и переменные, доступные в шаблонах уведомлений, отличаются от используемых в шаблонах аннотаций и меток, которые описаны в этой документации.
Шаблоны аннотаций и меток работают в контексте отдельного экземпляра оповещения, тогда как шаблоны уведомлений применяются к уведомлению, включающему группу оповещений.
Например, шаблоны уведомлений предоставляют переменную .Alerts, которая включает список всех сработавших и разрешившихся оповещений в уведомлении. Эта переменная недоступна в шаблонах правил оповещений, которые работают в контексте одного экземпляра оповещения.
Кроме того, вы не можете переиспользовать шаблоны для меток и аннотаций так, как это возможно с шаблонами уведомлений. Вместо этого вам нужно писать каждый шаблон встроенно в поля метки или аннотации и вручную копировать их туда, где вы хотите переиспользовать шаблоны.