Watchdog-демон для непрерывного мониторинга SES. - Liveness-проверки API, лицензии, списка роботов - Диалоговые сценарии из YAML с агрегацией в 6 фиксированных Zabbix-метрик - Доставка: zabbix_sender (push) или UserParameter (poll) - Hot-reload сценариев без перезапуска
466 lines
24 KiB
XML
466 lines
24 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<zabbix_export>
|
||
<version>6.0</version>
|
||
<date>2026-06-19T12:00:00Z</date>
|
||
<groups>
|
||
<group>
|
||
<name>Templates</name>
|
||
</group>
|
||
</groups>
|
||
<templates>
|
||
<template>
|
||
<uuid>a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6</uuid>
|
||
<template>SES Monitor</template>
|
||
<name>SES Monitor — Service Engine Server</name>
|
||
<description>Шаблон для мониторинга диалоговой сценарной машины SES.
|
||
Метрики отправляются watchdog-демоном ses-monitor через zabbix_sender (trapper).
|
||
|
||
Проверяет: доступность API, лицензию, выполнение сценариев, архив диалогов.
|
||
|
||
Сценарии задаются в YAML-файлах (config/scenarios/). Ключи метрик
|
||
формируются из поля zabbix_key в файле сценария. Примеры метрик:
|
||
- ses.scenario.{имя_сценария}.ok
|
||
- ses.scenario.{имя_сценария}.time
|
||
- ses.scenario.{имя_сценария}.error
|
||
|
||
Для каждого сценария вручную добавьте соответствующий item в этот шаблон.</description>
|
||
|
||
<groups>
|
||
<group>
|
||
<name>Templates</name>
|
||
</group>
|
||
</groups>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- Макросы (переопределяются на уровне хоста) -->
|
||
<!-- ============================================================ -->
|
||
<macros>
|
||
<macro>
|
||
<macro>{$SES_API_TIMEOUT_MS}</macro>
|
||
<value>5000</value>
|
||
<description>Порог медленного ответа API (миллисекунды)</description>
|
||
</macro>
|
||
<macro>
|
||
<macro>{$SES_UNKNOWN_THRESHOLD}</macro>
|
||
<value>10</value>
|
||
<description>Порог unknown-запросов за 5 минут</description>
|
||
</macro>
|
||
<macro>
|
||
<macro>{$SES_STEP_TIME_WARNING_MS}</macro>
|
||
<value>5000</value>
|
||
<description>Порог предупреждения: среднее время шага диалога (мс)</description>
|
||
</macro>
|
||
<macro>
|
||
<macro>{$SES_STEP_TIME_ERROR_MS}</macro>
|
||
<value>15000</value>
|
||
<description>Порог ошибки: среднее время шага диалога (мс)</description>
|
||
</macro>
|
||
</macros>
|
||
|
||
<items>
|
||
<!-- ======================================================== -->
|
||
<!-- Liveness-проверки -->
|
||
<!-- ======================================================== -->
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000001</uuid>
|
||
<name>SES: API доступность</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.api.liveness</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>0</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>0 — API недоступен, 1 — работает. Проверяется GET /ses/hostname.</description>
|
||
<triggers>
|
||
<trigger>
|
||
<uuid>tr00000000000000000000000000000001</uuid>
|
||
<expression>{last()}=0</expression>
|
||
<name>SES API недоступен на {HOST.NAME}</name>
|
||
<priority>HIGH</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
</triggers>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000002</uuid>
|
||
<name>SES: время ответа API</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.api.response_time</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>FLOAT</value_type>
|
||
<units>ms</units>
|
||
<description>Время ответа GET /ses/hostname в миллисекундах.</description>
|
||
<triggers>
|
||
<trigger>
|
||
<uuid>tr00000000000000000000000000000002</uuid>
|
||
<expression>{last()}>{$SES_API_TIMEOUT_MS}</expression>
|
||
<name>SES: медленный ответ API (>{$SES_API_TIMEOUT_MS} мс)</name>
|
||
<priority>WARNING</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
</triggers>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000003</uuid>
|
||
<name>SES: статус лицензии</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.license.ok</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>0</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>0 — проблема с лицензией, 1 — в порядке.</description>
|
||
<triggers>
|
||
<trigger>
|
||
<uuid>tr00000000000000000000000000000003</uuid>
|
||
<expression>{last()}=0</expression>
|
||
<name>SES: проблема с лицензией на {HOST.NAME}</name>
|
||
<priority>HIGH</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
</triggers>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000004</uuid>
|
||
<name>SES: количество сценариев (роботов)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.robots.count</key>
|
||
<delay>0</delay>
|
||
<history>30d</history>
|
||
<trends>365d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Общее количество зарегистрированных сценариев (роботов).
|
||
Изменение значения может сигнализировать о проблемах конфигурации.</description>
|
||
</item>
|
||
|
||
<!-- ======================================================== -->
|
||
<!-- Сценарии (добавляйте items по мере создания YAML-файлов) -->
|
||
<!-- ======================================================== -->
|
||
<!--
|
||
Формат ключа: ses.scenario.{zabbix_key}.ok
|
||
Где {zabbix_key} — значение поля zabbix_key из YAML-файла сценария.
|
||
|
||
Пример для сценария с zabbix_key: "ses.scenario.my_bot":
|
||
<item>
|
||
<name>SES: сценарий my_bot</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.scenario.my_bot.ok</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<value_type>UINT64</value_type>
|
||
<triggers>
|
||
<trigger>
|
||
<expression>{last()}=0</expression>
|
||
<name>SES: сценарий my_bot провален</name>
|
||
<priority>AVERAGE</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
</triggers>
|
||
</item>
|
||
<item>
|
||
<name>SES: сценарий my_bot — время</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.scenario.my_bot.time</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>FLOAT</value_type>
|
||
<units>ms</units>
|
||
</item>
|
||
<item>
|
||
<name>SES: сценарий my_bot — ошибка</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.scenario.my_bot.error</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<value_type>TEXT</value_type>
|
||
</item>
|
||
-->
|
||
|
||
<!-- ======================================================== -->
|
||
<!-- Архив диалогов -->
|
||
<!-- ======================================================== -->
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000030</uuid>
|
||
<name>SES: архив — всего диалогов (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.archive.total_5m</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Количество диалогов за последние 5 минут. 0 может означать отсутствие трафика или проблемы с коннекторами.</description>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000031</uuid>
|
||
<name>SES: архив — unknown запросы (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.archive.unknown_5m</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Количество нераспознанных (unknown) запросов. Рост может указывать на проблемы с моделями SEE/SMC.</description>
|
||
<triggers>
|
||
<trigger>
|
||
<uuid>tr0000000000000000000000000000031</uuid>
|
||
<expression>{last()}>{$SES_UNKNOWN_THRESHOLD}</expression>
|
||
<name>SES: много unknown запросов (>{$SES_UNKNOWN_THRESHOLD} за 5 мин)</name>
|
||
<priority>WARNING</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
</triggers>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000032</uuid>
|
||
<name>SES: архив — not_found ошибки (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.archive.not_found_5m</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
</item>
|
||
|
||
<!-- ======================================================== -->
|
||
<!-- Мониторинг внутренних моделей SES -->
|
||
<!-- ======================================================== -->
|
||
|
||
<!-- SEE (распознавание намерений/сущностей) -->
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000040</uuid>
|
||
<name>SES: SEE — всего детекций (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.see.total</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Общее количество SEE-детекций (распознавание намерений и сущностей) за 5 минут.</description>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000041</uuid>
|
||
<name>SES: SEE — низкая уверенность (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.see.low_confidence</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Количество SEE-детекций с уверенностью ниже порога (по умолчанию 0.5). Рост означает проблемы с распознаванием.</description>
|
||
<triggers>
|
||
<trigger>
|
||
<uuid>tr0000000000000000000000000000041</uuid>
|
||
<expression>{last()}>0</expression>
|
||
<name>SES: низкая уверенность SEE-моделей</name>
|
||
<priority>WARNING</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
</triggers>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000042</uuid>
|
||
<name>SES: SEE — средняя уверенность (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.see.avg_confidence</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>FLOAT</value_type>
|
||
<description>Средняя уверенность (confidence) всех SEE-детекций за 5 минут (0.0 — 1.0).</description>
|
||
</item>
|
||
|
||
<!-- SMC (классификация запросов) -->
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000050</uuid>
|
||
<name>SES: SMC — всего классификаций (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.smc.total</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Общее количество SMC-классификаций за 5 минут.</description>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000051</uuid>
|
||
<name>SES: SMC — низкая уверенность (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.smc.low_confidence</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Количество SMC-классификаций с уверенностью ниже порога. Рост означает дрифт классификации.</description>
|
||
<triggers>
|
||
<trigger>
|
||
<uuid>tr0000000000000000000000000000051</uuid>
|
||
<expression>{last()}>0</expression>
|
||
<name>SES: низкая уверенность SMC-классификации</name>
|
||
<priority>WARNING</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
</triggers>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000052</uuid>
|
||
<name>SES: SMC — средняя уверенность (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.smc.avg_confidence</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>FLOAT</value_type>
|
||
<description>Средняя уверенность всех SMC-классификаций за 5 минут (0.0 — 1.0).</description>
|
||
</item>
|
||
|
||
<!-- TTS (синтез речи) -->
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000060</uuid>
|
||
<name>SES: TTS — голосовых ответов (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.tts.voice_present</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Количество ответов с синтезированным голосом за 5 минут.</description>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000061</uuid>
|
||
<name>SES: TTS — ответов без голоса (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.tts.voice_missing</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Количество ответов без голоса за 5 минут. Рост при наличии трафика — проблема TTS.</description>
|
||
</item>
|
||
|
||
<!-- QAS (вопросно-ответная система) -->
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000070</uuid>
|
||
<name>SES: QAS — всего диалогов с QAS (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.qas.total</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000071</uuid>
|
||
<name>SES: QAS — пустых ответов (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.qas.empty</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Количество диалогов с пустым QAS за 5 минут. Высокое значение — QAS не отвечает.</description>
|
||
<triggers>
|
||
<trigger>
|
||
<uuid>tr0000000000000000000000000000071</uuid>
|
||
<expression>{last()}>0 and {ses.models.qas.total.last()}>0</expression>
|
||
<name>SES: QAS возвращает пустые ответы</name>
|
||
<priority>WARNING</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
</triggers>
|
||
</item>
|
||
|
||
<!-- SPR (распознавание речи: аудио→текст) -->
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000080</uuid>
|
||
<name>SES: SPR — всего диалогов с reports (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.spr.total</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000081</uuid>
|
||
<name>SES: SPR — успешных расшифровок (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.models.spr.filled</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>UINT64</value_type>
|
||
<description>Количество диалогов с успешной расшифровкой речи (непустые reports) за 5 минут.</description>
|
||
</item>
|
||
|
||
<!-- ======================================================== -->
|
||
<!-- Время шага диалога (из request.datetime / reply.datetime) -->
|
||
<!-- ======================================================== -->
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000090</uuid>
|
||
<name>SES: среднее время шага диалога (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.archive.avg_step_time_5m</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>FLOAT</value_type>
|
||
<units>ms</units>
|
||
<description>Среднее время обработки шага диалога (request.datetime -> reply.datetime) за 5 минут. Рост указывает на тормоза в пайплайне (SEE/SMC/TTS/QAS или внешние API).</description>
|
||
<triggers>
|
||
<trigger>
|
||
<uuid>tr0000000000000000000000000000090</uuid>
|
||
<expression>{last()}>{$SES_STEP_TIME_WARNING_MS}</expression>
|
||
<name>SES: медленная обработка шага диалога (>{$SES_STEP_TIME_WARNING_MS} мс) на {HOST.NAME}</name>
|
||
<priority>WARNING</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
<trigger>
|
||
<uuid>tr0000000000000000000000000000091</uuid>
|
||
<expression>{last()}>{$SES_STEP_TIME_ERROR_MS}</expression>
|
||
<name>SES: критическая задержка обработки шага (>{$SES_STEP_TIME_ERROR_MS} мс) на {HOST.NAME}</name>
|
||
<priority>AVERAGE</priority>
|
||
<manual_close>YES</manual_close>
|
||
</trigger>
|
||
</triggers>
|
||
</item>
|
||
|
||
<item>
|
||
<uuid>a1b2c3d4e5f6a7b8000000000000092</uuid>
|
||
<name>SES: макс. время шага диалога (5 мин)</name>
|
||
<type>ZABBIX_TRAPPER</type>
|
||
<key>ses.archive.max_step_time_5m</key>
|
||
<delay>0</delay>
|
||
<history>7d</history>
|
||
<trends>30d</trends>
|
||
<value_type>FLOAT</value_type>
|
||
<units>ms</units>
|
||
<description>Максимальное время обработки шага диалога за 5 минут. Показывает пиковые задержки.</description>
|
||
</item>
|
||
</items>
|
||
</template>
|
||
</templates>
|
||
</zabbix_export>
|