Kaspersky Unified Monitoring and Analysis Platform

Синтаксис шаблонов уведомлений

В шаблонах уведомлений используется синтаксис Go templates. С помощью этого синтаксиса можно динамически наполнять содержимым уведомления: загружать данные из полей соответствующих объектов, вставлять ссылки или преобразовывать даты в нужный формат. Синтаксис шаблонов можно использовать как в теме письма, так и в теле сообщения. В этой статье дается краткая информация о синтаксисе, а также перечислены поля, которые можно использовать для тех или иных типов событий, и дополнительные функции, применяемые к этим полям. Подробнее про синтаксис вы можете прочитать в официальной документации языка Go.

В шаблоне можно обращаться к полям объектов в зависимости от выбранного типа событий. Поля соответствующих объектов могут содержать простые значения, такие как строка или число:

{{ .CorrelationRuleName }}

В письме будет отображаться название алерта, то есть содержимое поля CorrelationRuleName модели данных алерта.

Некоторые поля могут содержать содержат массивы данных, например поля алерта с относящимися к нему событиями, активами, учетными записями. К таким вложенным объектам можно обращаться с помощью функции range, которая последовательно обращается к полям 50 первых вложенных объектов. При обращении с помощью функции range к полю, в котором нет массива данных, возвращается ошибка. Пример:

{{ range .Assets }}

Устройство: {{ .DisplayName }}, дата создания: {{ .CreatedAt }}

{{ end }}

В письме будут отображаться значения полей 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 }}

Поля объектов, поддерживаемые в шаблонах

В таблице ниже перечислены поля, к которым можно обращаться из шаблонов в зависимости от типа события.

Поддерживаемые поля объектов

Тип

Доступные поля

Созданный алерт

 

Поддерживается обращение ко всем полям модели данных алерта, включая вложенные массивы и структуры.

Завершение генерации отчета

{{ .Tenants }} – тенанты, по которым построен отчет.

{{ .Name }} – название отчета.

{{ .StartTime }} – начало периода, за который строится отчет, в формате 2006-01-02 15:04:05 MSK.

{{ .FinishTime }} – окончание периода, за который строится отчет, в формате 2006-01-02 15:04:05 MSK.

{{ .PreviewLink }} – ссылка для просмотра отчета.

{{ .DownloadLink }} – ссылка для скачивания отчета.

Пример добавления ссылок в шаблон уведомления о генерации отчета:

Вы можете <a href="{{ .PreviewLink }}" target="_blank">просмотреть</a> или <a href="{{ .DownloadLink }}" target="_blank">скачать</a> отчет.

Завершение асинхронной задачи

{{ .Tenants }} – тенант, в котором запущена задача.

{{ .TaskKind }} – название задачи.

{{ .TaskCreator }} – имя пользователя, который создал задачу (логин).

{{ .StartTime }} – время начала выполнения задачи в формате 2006-01-02 15:04:05 MSK.

{{ .FinishTime }} – время окончания выполнения задачи в формате 2006-01-02 15:04:05 MSK.

{{ .TaskStatus}} – статус выполнения задачи.

 

Нарушение политики мониторинга

{{ .SourceTenantName }} – тенант источника событий.

{{ .SourceDisplayName }} – имя источника.

{{ .Value }} – значение, вышедшее за границы политики мониторинга на момент создания алерта.

{{ .WebLink }} – ссылка на веб-интерфейс KUMA.

{{ .AlertActiveAt }} – время, в которое был активен алерт.

{{ .PolicyName }} – название политики мониторинга.

{{ .PolicyTenantName }} – тенант политики мониторинга.

{{ .PolicyLowerEventBound }} – нижний порог.

{{ .PolicyUpperEventBound }} – верхний порог.

{{ .PolicyKind }} – тип политики.

{{ .PolicyInterval }} – интервал периода подсчета.

{{ .DeviceProduct }} – устройство источника.

{{ .DeviceHostName }} – имя хоста источника.

{{ .DeviceAddress }} – адрес источника.

{{ .DeviceProcessName }} – название процесса источника.

 

Перемещение пользователя в другую группу KASAP

{{ .UserEmail }} – отображаемое имя пользователя из Active Directory.

{{ .PreviousGroup}} – группа обучения KASAP, в которой пользователь состоял на момент открытия его карточки из инцидента или алерта.

{{ .CurrentGroup}} – группа обучения KASAP, в которую пользователь был перемещен из карточки пользователя.

{{ .WebLink }} – ссылка на веб-интерфейс KUMA.

Функции в шаблонах уведомлений

В шаблонах доступны функции, перечисленные в таблице ниже.

Функции в шаблонах

Функция

Описание

date

Принимает первым параметром время в миллисекундах (unix time), вторым параметром можно передать формат времени по стандартам RFC. Часовой пояс изменить невозможно.

Пример вызова: {{ date .FirstSeen "02 Jan 06 15:04" }}

Результат вызова: 18 Nov 2022 13:46

Примеры форматов дат, поддерживаемые функцией:

  • "02 Jan 06 15:04 MST"
  • "02 Jan 06 15:04 -0700"
  • "Monday, 02-Jan-06 15:04:05 MST"
  • "Mon, 02 Jan 2006 15:04:05 MST"
  • "Mon, 02 Jan 2006 15:04:05 -0700"
  • "2006-01-02T15:04:05Z07:00"

range

Позволяет перебирать массивы или наборы пар "ключ – значение", последовательно обращаясь к полям 50 первых элементов.

limit

Функция вызывается внутри функции range для ограничения списка данных. Обрабатывает списки, которые не имеют ключей, принимает любой список данных первым параметром и обрезает список по второму значению. Например, в функцию можно передавать поля алерта .Events, .Assets, .Accounts, .Actions.

Пример вызова:

{{ range (limit .Assets 5) }}

<strong>Устройство</strong>: {{ .DisplayName }},

<strong>Дата создания</strong>: {{ .CreatedAt }}

{{ end }}

link_alert

Формирует ссылку на алерт с URL, указанным в параметрах подключения к SMTP-серверу в качестве псевдонима сервера Ядра KUMA или с реальным URL сервиса Ядра KUMA, если псевдоним не задан.

Пример вызова:

Подробнее об алерте можно узнать в веб-интерфейсе KUMA: {{link_alert}}.

link_task

Формирует ссылку на задачу в KUMA.

Пример вызова:

Задача "{{ .TaskKind }}" создана {{ .TaskCreator }} в {{ .StartTime }} и завершена в {{ .FinishTime }} со статусом "{{ .TaskStatus }}".

Подробнее о задачах можно узнать в веб-интерфейсе KUMA: {{ link_task }}.

link

Принимает вид ссылки, доступной для перехода.

Пример вызова:

{{ link "https://support.kaspersky.com/KUMA/2.1/ru-RU/233508.htm" }}