Initial commit: SES Monitor
Watchdog-демон для непрерывного мониторинга SES. - Liveness-проверки API, лицензии, списка роботов - Диалоговые сценарии из YAML с агрегацией в 6 фиксированных Zabbix-метрик - Доставка: zabbix_sender (push) или UserParameter (poll) - Hot-reload сценариев без перезапуска
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
# =============================================================================
|
||||
# Резервный вариант: UserParameter для Zabbix Agent (пассивный режим).
|
||||
# =============================================================================
|
||||
# Используется если zabbix_sender недоступен.
|
||||
# Поместить в /etc/zabbix/zabbix_agentd.d/ses_monitor.conf
|
||||
# и перезапустить zabbix-agent: systemctl restart zabbix-agent
|
||||
#
|
||||
# Скрипт ses_monitor_zabbix_agent.py должен быть установлен в
|
||||
# /opt/ses-monitor/scripts/ses_monitor_zabbix_agent.py
|
||||
# =============================================================================
|
||||
@@ -0,0 +1,465 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,212 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<zabbix_export>
|
||||
<version>5.0</version>
|
||||
<date>2026-06-19T12:00:00Z</date>
|
||||
<groups>
|
||||
<group>
|
||||
<name>Templates</name>
|
||||
</group>
|
||||
</groups>
|
||||
<templates>
|
||||
<template>
|
||||
<template>SES Monitor</template>
|
||||
<name>SES Monitor — Service Engine Server</name>
|
||||
<description>Шаблон для мониторинга диалоговой сценарной машины SES.
|
||||
Метрики отправляются watchdog-демоном ses-monitor через zabbix_sender (trapper).
|
||||
|
||||
Проверяет: доступность API, лицензию, выполнение сценариев.
|
||||
|
||||
Сценарии задаются в YAML-файлах (config/scenarios/). Все сценарии
|
||||
агрегируются в фиксированные метрики — шаблон универсален и не зависит
|
||||
от количества или состава сценариев.</description>
|
||||
|
||||
<groups>
|
||||
<group>
|
||||
<name>Templates</name>
|
||||
</group>
|
||||
</groups>
|
||||
|
||||
<macros>
|
||||
<macro>
|
||||
<macro>{$SES_API_TIMEOUT_MS}</macro>
|
||||
<value>5000</value>
|
||||
<description>Порог медленного ответа API (миллисекунды)</description>
|
||||
</macro>
|
||||
</macros>
|
||||
|
||||
<items>
|
||||
|
||||
<!-- Liveness -->
|
||||
|
||||
<item>
|
||||
<name>SES: API доступность</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.api.liveness</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<description>0 — API недоступен, 1 — работает. Проверяется GET /ses/hostname.</description>
|
||||
<triggers>
|
||||
<trigger>
|
||||
<expression>{SES Monitor:ses.api.liveness.last()}=0</expression>
|
||||
<name>SES API недоступен на {HOST.NAME}</name>
|
||||
<priority>HIGH</priority>
|
||||
<manual_close>YES</manual_close>
|
||||
</trigger>
|
||||
</triggers>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: время ответа API</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.api.response_time</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>ms</units>
|
||||
<description>Время ответа GET /ses/hostname в миллисекундах.</description>
|
||||
<triggers>
|
||||
<trigger>
|
||||
<expression>{SES Monitor:ses.api.response_time.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>
|
||||
<name>SES: дней до окончания лицензии</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.license.days_remaining</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>d</units>
|
||||
<description>Количество дней до окончания лицензии SES. -1 = бессрочная.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: статус лицензии</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.license.ok</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<description>0 — проблема с лицензией, 1 — в порядке.</description>
|
||||
<triggers>
|
||||
<trigger>
|
||||
<expression>{SES Monitor:ses.license.ok.last()}=0</expression>
|
||||
<name>SES: проблема с лицензией на {HOST.NAME}</name>
|
||||
<priority>HIGH</priority>
|
||||
<manual_close>YES</manual_close>
|
||||
</trigger>
|
||||
</triggers>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: количество сценариев (роботов)</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.robots.count</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<description>Общее количество зарегистрированных сценариев (роботов).
|
||||
Изменение значения может сигнализировать о проблемах конфигурации.</description>
|
||||
</item>
|
||||
|
||||
<!-- Сценарии -->
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — все успешны</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.scenario.ok</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<description>1 — все сценарии прошли, 0 — есть упавшие.</description>
|
||||
<triggers>
|
||||
<trigger>
|
||||
<expression>{SES Monitor:ses.scenario.ok.last()}=0</expression>
|
||||
<name>SES: сценарии мониторинга падают на {HOST.NAME}</name>
|
||||
<priority>AVERAGE</priority>
|
||||
<manual_close>YES</manual_close>
|
||||
</trigger>
|
||||
</triggers>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — всего</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.scenario.total</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<description>Количество активных сценариев мониторинга.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — упало</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.scenario.failed</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<description>Количество упавших сценариев за последний цикл.</description>
|
||||
<triggers>
|
||||
<trigger>
|
||||
<expression>{SES Monitor:ses.scenario.failed.last()}>0</expression>
|
||||
<name>SES: сценарии мониторинга падают на {HOST.NAME}</name>
|
||||
<priority>WARNING</priority>
|
||||
<manual_close>YES</manual_close>
|
||||
</trigger>
|
||||
</triggers>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — среднее время</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.scenario.avg_time</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>ms</units>
|
||||
<description>Среднее время выполнения сценария (миллисекунды).</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — макс. время</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.scenario.max_time</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>ms</units>
|
||||
<description>Максимальное время выполнения сценария (миллисекунды).</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — ошибка</name>
|
||||
<type>TRAP</type>
|
||||
<key>ses.scenario.error</key>
|
||||
<delay>0</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>TEXT</value_type>
|
||||
<description>Текст ошибки: "N сценариев упали". Пустая строка если всё хорошо.</description>
|
||||
</item>
|
||||
|
||||
</items>
|
||||
</template>
|
||||
</templates>
|
||||
</zabbix_export>
|
||||
@@ -0,0 +1,261 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<zabbix_export>
|
||||
<version>5.0</version>
|
||||
<date>2026-06-19T12:00:00Z</date>
|
||||
<groups>
|
||||
<group>
|
||||
<name>Templates</name>
|
||||
</group>
|
||||
</groups>
|
||||
<templates>
|
||||
<template>
|
||||
<template>SES Monitor</template>
|
||||
<name>SES Monitor — Service Engine Server</name>
|
||||
<description>Шаблон для мониторинга диалоговой сценарной машины SES.
|
||||
Метрики передаются watchdog-демоном ses-monitor через UserParameter (Zabbix агент).
|
||||
JSON с метриками пишется в /var/tmp/ses_monitor/metrics.json и читается
|
||||
скриптом scripts/zbx_get.py. Master-элемент: ses.metrics.
|
||||
|
||||
Проверяет: доступность API, лицензию, выполнение сценариев.
|
||||
|
||||
Сценарии задаются в YAML-файлах (config/scenarios/). Все сценарии
|
||||
агрегируются в фиксированные метрики — шаблон универсален и не зависит
|
||||
от количества или состава сценариев.</description>
|
||||
|
||||
<groups>
|
||||
<group>
|
||||
<name>Templates</name>
|
||||
</group>
|
||||
</groups>
|
||||
|
||||
<macros>
|
||||
<macro>
|
||||
<macro>{$SES_API_TIMEOUT_MS}</macro>
|
||||
<value>5000</value>
|
||||
<description>Порог медленного ответа API (миллисекунды)</description>
|
||||
</macro>
|
||||
</macros>
|
||||
|
||||
<items>
|
||||
|
||||
<item>
|
||||
<name>SES: все метрики (JSON)</name>
|
||||
<type>ZABBIX_PASSIVE</type>
|
||||
<key>ses.metrics</key>
|
||||
<delay>30s</delay>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>TEXT</value_type>
|
||||
<description>Полный JSON со всеми метриками ses-monitor. Используется как master item для dependent items с JSONPath.</description>
|
||||
</item>
|
||||
|
||||
<!-- Liveness -->
|
||||
|
||||
<item>
|
||||
<name>SES: API доступность</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.api.liveness"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<key>ses.api.liveness</key>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: время ответа API</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.api.response_time"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>ms</units>
|
||||
<key>ses.api.response_time</key>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: статус лицензии</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.license.ok"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<key>ses.license.ok</key>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: дней до окончания лицензии</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.license.days_remaining"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>d</units>
|
||||
<key>ses.license.days_remaining</key>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: количество сценариев (роботов)</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.robots.count"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<key>ses.robots.count</key>
|
||||
</item>
|
||||
|
||||
<!-- Сценарии -->
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — все успешны</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.scenario.ok"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<key>ses.scenario.ok</key>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — всего</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.scenario.total"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<key>ses.scenario.total</key>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — упало</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.scenario.failed"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>UNSIGNED</value_type>
|
||||
<key>ses.scenario.failed</key>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — среднее время</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.scenario.avg_time"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>ms</units>
|
||||
<key>ses.scenario.avg_time</key>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — макс. время</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.scenario.max_time"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>ms</units>
|
||||
<key>ses.scenario.max_time</key>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<name>SES: сценарии — ошибка</name>
|
||||
<type>DEPENDENT</type>
|
||||
<master_item>
|
||||
<key>ses.metrics</key>
|
||||
</master_item>
|
||||
<preprocessing>
|
||||
<step>
|
||||
<type>JSONPATH</type>
|
||||
<params>$["ses.scenario.error"]</params>
|
||||
</step>
|
||||
</preprocessing>
|
||||
<history>7d</history>
|
||||
<trends>31536000</trends>
|
||||
<value_type>TEXT</value_type>
|
||||
<key>ses.scenario.error</key>
|
||||
</item>
|
||||
|
||||
</items>
|
||||
</template>
|
||||
</templates>
|
||||
</zabbix_export>
|
||||
Reference in New Issue
Block a user