13 октября 2026
ID 295255
Синтаксис шаблонов уведомлений
В шаблонах уведомлений используется синтаксис Go templates. С помощью этого синтаксиса можно динамически наполнять содержимым уведомления: загружать данные из полей соответствующих объектов, вставлять ссылки или преобразовывать даты в нужный формат. Синтаксис шаблонов можно использовать как в теме письма, так и в теле сообщения. В этой статье приводится краткая информация о синтаксисе, а также перечислены поля, которые можно использовать для тех или иных типов событий, и дополнительные функции, применяемые к этим полям. Подробнее про синтаксис вы можете прочитать в официальной документации языка Go.
В шаблоне можно обращаться к полям объектов в зависимости от выбранного типа событий. Поля соответствующих объектов могут содержать простые значения, такие как строка или число:
{{ .CorrelationRuleName }}
В письме будет отображаться название алерта, то есть содержимое поля CorrelationRuleName модели данных алерта.
Некоторые поля содержат массивы данных. Например поля алерта содержат относящиеся к нему события, активы, учетные записи. К таким вложенным объектам можно обращаться с помощью функции range, которая последовательно обращается к полям 50 первых вложенных объектов:
{{ range .Assets }}
Устройство: {{ .DisplayName }}, дата создания: {{ .CreatedAt }}
{{ end }}
При обращении с помощью функции range к полю, в котором нет массива данных, возвращается ошибка.
В письме будут отображаться значения полей DeviceHostName и CreatedAt из 50 связанных с алертом активов:
Устройство: <значение поля DisplayName из актива 1>, дата создания: <значение поля CreatedAt из актива 1>
Устройство: <значение поля DisplayName из актива 2>, дата создания: <значение поля CreatedAt из актива 2>
...
// Всего 50 строк
С помощью функции limit можно ограничить количество объектов, возвращаемых функцией range:
{{ range (limit .Assets 5) }}
<strong>Устройство</strong>: {{ .DisplayName }},
<strong>Дата создания</strong>: {{ .CreatedAt }}
{{ end }}
В письме будут отображаться значения полей DisplayName и CreatedAt из 5 связанных с алертом активов, слова "Устройства" и "Дата создания" выделены HTML-тегами <strong>:
<strong>Устройство</strong>: <значение поля DeviceHostName из актива 1>,
<strong>Дата создания</strong>: <значение поля CreatedAt из актива 1>
<strong>Устройство</strong>: <значение поля DeviceHostName из актива N>,
<strong>Дата создания</strong>: <значение поля CreatedAt из актива N>
...
// Всего 10 строк
Вложенные объекты могут иметь свои вложенные объекты. К ним можно обратиться с помощью вложенных функций range:
{{ range (limit .Events 5) }}
{{ range (limit .Event.BaseEvents 10) }}
Идентификатор сервиса: {{ .ServiceID }}
{{ end }}
{{ end }}
В письме будет отображаться по десять идентификаторов сервисов (поле ServiceID) из базовых событий, относящихся к пяти корреляционным событиям алерта (всего 50 строк). Обратите внимание, что обращение к событиям происходит через вложенную структуру EventWrapper, которая находится в алерте в поле Events. События доступны в поле Event этой структуры, что отражено в примере выше. Таким образом, если поле A содержит вложенную структуру [B] и в структуре [B] есть поле C, которое является строкой или числом, то чтобы обратиться к полю C, необходимо указать путь {{ A.C }}.
Некоторые поля объектов содержат вложенные словари в формате "ключ – значение" (например, поле событий Extra). К ним можно обратиться с помощью функции range с переданными ей переменными: range $placeholder1, $placeholder2 := .FieldName. Значения переменных затем можно вызывать, указывая из названия, например:
{{ range (limit .Events 3) }}
{{ range (limit .Event.BaseEvents 5) }}
Список полей в поле события Extra: {{ range $name, $value := .Extra }} {{ $name }} - {{ $value }} <br> {{ end }}
{{ end }}
{{ end }}
В письме через HTML-тег <br> будут отображаться пары "ключ – значение" из полей Extra базовых событий, принадлежащих корреляционным событиям. Вызываются данные из пяти базовых событий из каждого из трех корреляционных событий.
В шаблонах уведомлений можно использовать HTML-теги, выстраивая их в сложные структуры. Пример таблицы для полей корреляционного события:
<style type="text/css">
TD, TH {
padding: 3px;
border: 1px solid black;
}
</style>
<table>
<thead>
<tr>
<th>Название сервиса</th>
<th>Название корреляционного правила</th>
<th>Версия устройства</th>
</tr>
</thead>
<tbody>
{{ range .Events }}
<tr>
<td>{{ .Event.ServiceName }}</td>
<td>{{ .Event.CorrelationRuleName }}</td>
<td>{{ .Event.DeviceVersion }}</td>
</tr>
{{ end }}
</tbody>
</table>
С помощью функции link_alert в письмо с уведомлением можно вставить HTML-ссылку на алерт:
{{link_alert}}
В письме будет отображаться ссылка на окно алерта.
Шаблоны также поддерживают более сложные конструкции, такие как объявление локальных переменных, использование операторов сравнения и управляющих структур. Ниже приведен пример, как можно из связанных с алертом данных извлечь сведения о наивысшей категории активов и поместить ее в уведомления:
{{ $criticalCategoryName := "" }}
{{ $maxCategoryWeight := 0 }}
{{ range .Assets }}
{{ range .CategoryModels }}
{{ if gt .Weight $maxCategoryWeight }}
{{ $maxCategoryWeight = .Weight }}
{{ $criticalCategoryName = .Name }}
{{ end }}
{{ end }}
{{ end }}
{{ if gt $maxCategoryWeight 1 }}
Наивысшая категория активов: {{ $criticalCategoryName }}
{{ end }}
Поля объектов, поддерживаемые в шаблонах
В таблице ниже перечислены поля, к которым можно обращаться из шаблонов в зависимости от типа события.
Поддерживаемые поля объектов
Тип | Доступные поля |
|---|---|
Созданный алерт
| Поддерживается обращение ко всем полям модели данных алерта, включая вложенные массивы и структуры. |
Завершение генерации отчета |
Пример добавления ссылок в шаблон уведомления о генерации отчета: Вы можете |
Завершение асинхронной задачи |
|
Нарушение политики мониторинга |
|
Перемещение пользователя в другую группу KASAP |
|
Функции в шаблонах уведомлений
В шаблонах доступны функции, перечисленные в таблице ниже.
Функции в шаблонах
Функция | Описание |
|---|---|
| Принимает первым параметром время в миллисекундах (unix time), вторым параметром можно передать формат времени по стандартам RFC. Часовой пояс изменить невозможно. Пример вызова: Результат вызова: 18 Nov 2022 13:46 Примеры форматов дат, поддерживаемые функцией:
|
| Позволяет перебирать массивы или наборы пар "ключ – значение", последовательно обращаясь к полям 50 первых элементов. |
| Функция вызывается внутри функции Пример вызова:
|
| Формирует ссылку на алерт с URL, указанным в параметрах подключения к SMTP-серверу в качестве псевдонима сервера Ядра KUMA или с реальным URL сервиса Ядра KUMA, если псевдоним не задан. Пример вызова:
|
| Формирует ссылку на задачу в KUMA. Пример вызова:
|
| Принимает вид ссылки, доступной для перехода. Пример вызова:
|