Мониторы

Динамические шаблоны инцидентов и алертов

Тот же синтаксис плейсхолдеров {{variable}}, что и в JavaScript Expressions для критериев мониторинга, можно использовать для автоматического заполнения Title, Description и Remediation Notes инцидентов и алертов при срабатывании критериев монитора.

Поддерживаемые типы мониторов и переменные

Динамические шаблоны поддерживаются для перечисленных ниже типов с соответствующими переменными:

  • Website и API: ответ, заголовки, коды, время
  • Incoming Request: тело и заголовки запроса, метод, время
  • Ping: доступность, время отклика, причины сбоя
  • Port: доступность порта, время, таймаут
  • IP: доступность IP, ping, ошибки
  • SSL Certificate: данные сертификата, валидация, срок действия
  • Server/VM: метрики (CPU, память, диск), процессы, hostname
  • Synthetic: результат скрипта, скриншоты, браузер
  • Custom JavaScript Code: результат, время, ошибки
  • SNMP: устройство, время ответа, значения OID

Примечание: мониторы Logs, Traces и Metrics пока не поддерживают такие шаблоны — у них другой механизм триггеров.

Website и API monitors

ПеременнаяОписаниеТип
responseBodyТело ответа. HTML/XML — строка; JSON — объектstring или JSON
responseHeadersЗаголовки (ключи в нижнем регистре)Dictionary<string>
responseStatusCodeHTTP status codenumber
responseTimeInMsВремя отклика, мсnumber
isOnlineМонитор считается onlineboolean

Incoming Request monitors

ПеременнаяОписаниеТип
requestBodyТело запросаstring или JSON
requestHeadersЗаголовки (ключи в нижнем регистре)Dictionary<string>
requestMethodHTTP-метод (GET, POST и т.д.)string
incomingRequestReceivedAtВремя получения запросаDate

Ping monitors

ПеременнаяОписаниеТип
isOnlineЦель ping onlineboolean
responseTimeInMsВремя ping, мсnumber
failureCauseПричина сбояstring
isTimeoutТаймаут pingboolean

Port monitors

ПеременнаяОписаниеТип
isOnlineПорт доступенboolean
responseTimeInMsВремя установки соединения, мсnumber
failureCauseПричина сбояstring
isTimeoutТаймаутboolean

IP monitors

ПеременнаяОписаниеТип
isOnlineIP доступенboolean
responseTimeInMsВремя ping, мсnumber
failureCauseПричина сбояstring
isTimeoutТаймаутboolean

SSL Certificate monitors

ПеременнаяОписаниеТип
isOnlineПроверка сертификата успешнаboolean
isSelfSignedSelf-signedboolean
createdAtДата выдачиDate
expiresAtДата окончанияDate
commonNameCNstring
organizationalUnitOUstring
organizationOstring
localityLstring
stateSTstring
countryCstring
serialNumberСерийный номерstring
fingerprintSHA-1 fingerprintstring
fingerprint256SHA-256 fingerprintstring
failureCauseПричина сбоя проверкиstring

Server/VM monitors

ПеременнаяОписаниеТип
hostnameHostname сервераstring
requestReceivedAtВремя запроса монитораDate
cpuUsagePercentЗагрузка CPU, %number
cpuCoresЧисло ядерnumber
memoryUsagePercentИспользование памяти, %number
memoryFreePercentСвободная память, %number
memoryTotalBytesОбъём памяти, байтnumber
diskMetricsМетрики по дискамArray<Object>
diskMetrics[].diskPathТочка монтированияstring
diskMetrics[].usagePercentЗаполнение диска, %number
diskMetrics[].freePercentСвободно, %number
diskMetrics[].totalBytesРазмер, байтnumber
processesСписок процессовArray<Object>
processes[].pidPIDnumber
processes[].nameИмя процессаstring
processes[].commandКоманда запускаstring
failureCauseПричина сбояstring

Synthetic monitors

ПеременнаяОписаниеТип
executionTimeInMsВремя выполнения скрипта, мсnumber
resultВозвращённое значениеstring, number, boolean или JSON
scriptErrorОшибка выполненияstring
logMessagesСообщения из console.logArray<string>
screenshotsСкриншоты в Base64Object
browserTypeТип браузераstring
screenSizeTypeРазмер экранаstring

Custom JavaScript Code monitors

ПеременнаяОписаниеТип
executionTimeInMsВремя выполнения, мсnumber
resultРезультат returnstring, number, boolean или JSON
scriptErrorОшибкаstring
logMessagesЛогиArray<string>

SNMP monitors

ПеременнаяОписаниеТип
isOnlineУстройство отвечаетboolean
responseTimeInMsВремя SNMP-запроса, мсnumber
failureCauseПричина сбояstring
isTimeoutТаймаутboolean
oidResponsesМассив ответов: oid, name, value, typeArray<Object>
oidResponses[].oidOIDstring
oidResponses[].nameИмя OIDstring
oidResponses[].valueЗначениеstring или number
oidResponses[].typeSNMP-тип значенияstring
{{OID_NAME}}Значение по имени OID (например, {{sysUpTime}})string или number

Базовое использование

В форме Incident / Alert внутри экземпляра критерия монитора:

API вернул {{responseStatusCode}} за {{responseTimeInMs}} мс

При коде 502 и времени 842 заголовок сохранится как:

API вернул 502 за 842 мс

Вложенный JSON — как в JavaScript Expressions:

ID проблемы: {{responseBody.error.id}}
Сообщение: {{responseBody.error.message}}

Индексация массивов:

Первый пользователь: {{responseBody.users[0].name}}

Несуществующий путь по умолчанию даёт пустую строку.

Продвинутое использование

Элементы массива

Загрузка первого диска: {{diskMetrics[0].usagePercent}}%
Последний процесс: {{processes[-1].name}}

Вложенные объекты

Текст ошибки: {{responseBody.error.details.message}}
Локация: {{sslCertificate.locality}} {{sslCertificate.country}}

Циклы {{#each}}

Итерация по массиву: {{#each path}}...{{/each}} — удобно для списков в описании инцидента или алерта.

Синтаксис:

{{#each arrayPath}}
  ...тело с {{property}} из элемента...
{{/each}}

Внутри цикла:

  • {{propertyName}} — относительно текущего элемента
  • {{nested.property}} — dot notation для элемента
  • {{@index}} — индекс с 0
  • {{this}} — значение элемента (для массивов примитивов)
  • отсутствующие поля элемента — fallback к родительской карте

Пример — Incoming Request с массивом алертов (webhook Grafana):

Тело запроса:

{
  "status": "firing",
  "alerts": [
    { "status": "firing", "labels": { "label": "Coralpay" } },
    { "status": "firing", "labels": { "label": "capitecpay" } },
    { "status": "resolved", "labels": { "label": "capricorn" } }
  ]
}

Шаблон:

Метки алертов:
{{#each requestBody.alerts}}
- {{labels.label}} ({{status}})
{{/each}}

Результат:

Метки алертов:
- Coralpay (firing)
- capitecpay (firing)
- capricorn (resolved)

Диски сервера:

Диски:
{{#each diskMetrics}}
- {{diskPath}}: занято {{usagePercent}}%
{{/each}}

С {{@index}}:

Процессы:
{{#each processes}}
{{@index}}. {{name}} (PID: {{pid}})
{{/each}}

Массив примитивов и {{this}}:

Логи:
{{#each logMessages}}
- {{this}}
{{/each}}

Вложенные циклы:

{{#each requestBody.groups}}
Группа: {{name}}
{{#each members}}
  - {{id}}: {{role}}
{{/each}}
{{/each}}

Примечание: если путь не массив — блок {{#each}}...{{/each}} удаляется из вывода. Пустой массив не даёт содержимого блока.

Примеры

Заголовок инцидента (Website/API)

Высокая задержка: {{responseTimeInMs}} мс (выше порога)

Описание инцидента (Website/API)

### Ошибка API
Статус: **{{responseStatusCode}}**  
Задержка: **{{responseTimeInMs}} мс**  
Фрагмент тела: `{{responseBody.error.message}}`

Заголовок алерта (Incoming Request)

Проблемный входящий запрос: method={{requestMethod}} auth={{requestHeaders.authorization}}

Заголовок алерта (SSL)

Истекает SSL: {{commonName}}, до {{expiresAt}}

Описание алерта (Server)

### Сервер: {{hostname}}
CPU: **{{cpuUsagePercent}}%**  
Память: **{{memoryUsagePercent}}%**  
Первый диск: **{{diskMetrics[0].usagePercent}}%**  
Последняя проверка: {{requestReceivedAt}}

Заголовок алерта (Ping)

Ping не прошёл: {{failureCause}} ({{responseTimeInMs}} мс)

Описание алерта (Port)

Проблема с портом
Доступность: {{isOnline}}
Время отклика: {{responseTimeInMs}} мс
Причина: {{failureCause}}

Алерт (Synthetic)

Скрипт завершён за {{executionTimeInMs}} мс
Результат: {{result}}
Браузер: {{browserType}} ({{screenSizeType}})

Алерт (Custom Code)

Выполнение кода: {{executionTimeInMs}} мс
Первая строка лога: {{logMessages[0]}}

Заголовок алерта (SNMP)

SNMP offline: {{failureCause}} ({{responseTimeInMs}} мс)

Описание алерта (SNMP)

### SNMP
Онлайн: **{{isOnline}}**
Время ответа: **{{responseTimeInMs}} мс**
Uptime: {{sysUpTime}}
Имя: {{sysName}}
Первое значение OID: {{oidResponses[0].value}}

Incoming Request + цикл (Grafana)

Заголовок:

[{{requestBody.status}}] {{requestBody.receiver}}

Описание:

### Алерты от {{requestBody.receiver}}

{{#each requestBody.alerts}}
**Алерт {{@index}}**: {{labels.alertname}}
- Метка: {{labels.label}}
- Статус: {{status}}
- Значения: {{valueString}}
- Источник: {{generatorURL}}
{{/each}}

Сервер + диски и процессы

### Сервер: {{hostname}}
CPU: **{{cpuUsagePercent}}%**
Память: **{{memoryUsagePercent}}%**

**Диски:**
{{#each diskMetrics}}
- {{diskPath}}: занято {{usagePercent}}% (свободно {{freePercent}}%)
{{/each}}

**Процессы:**
{{#each processes}}
- [{{pid}}] {{name}}: {{command}}
{{/each}}

SNMP + цикл по OID

### SNMP
Онлайн: {{isOnline}}
Ответ: {{responseTimeInMs}} мс

**Значения OID:**
{{#each oidResponses}}
- {{name}} ({{oid}}): {{value}}
{{/each}}