Initial commit: SES Monitor

Watchdog-демон для непрерывного мониторинга SES.
- Liveness-проверки API, лицензии, списка роботов
- Диалоговые сценарии из YAML с агрегацией в 6 фиксированных Zabbix-метрик
- Доставка: zabbix_sender (push) или UserParameter (poll)
- Hot-reload сценариев без перезапуска
This commit is contained in:
Maksim Totmin
2026-06-19 21:04:05 +07:00
commit 8dca7eb46b
25 changed files with 4267 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
# =============================================================================
# Основная конфигурация системы мониторинга SES (шаблон)
# =============================================================================
# Скопируйте в config.yaml и заполните свои значения.
# cp config.yaml.example config.yaml
# Формат: YAML 1.2
# ---------------------------------------------------------------------------
# Настройки подключения к SES серверу
# ---------------------------------------------------------------------------
ses:
# Базовый URL SES API
base_url: "http://YOUR_SES_HOST:6190"
# Эндпоинт для получения списка роботов:
# /ses/robot/list — только опубликованные
# /ses/robot/listall — все (включая черновики)
robot_list_endpoint: "/ses/robot/listall"
# Канал для мониторинговых запросов (не влияет на реальных пользователей)
channel: "monitoring"
# Таймаут HTTP-запросов в секундах
request_timeout: 30
# ---------------------------------------------------------------------------
# Настройки интеграции с Zabbix
# ---------------------------------------------------------------------------
zabbix:
# Включить отправку метрик в Zabbix
enabled: true
# Режим доставки: "sender" (zabbix_sender) или "userparameter" (Zabbix агент)
# sender — активный push через zabbix_sender (trapper)
# userparameter — пассивный опрос Zabbix агентом (через JSON-файл)
mode: "userparameter"
# Имя хоста в Zabbix (техническое имя узла сети).
host: "YOUR_ZABBIX_HOST"
# ---- Настройки режима "sender" (zabbix_sender) ----
server: "YOUR_ZABBIX_SERVER_IP"
port: 10051
sender_path: "/usr/bin/zabbix_sender"
# ---- Настройки режима "userparameter" (Zabbix агент) ----
metrics_file: "/var/tmp/ses_monitor/metrics.json"
agentd_config_dir: "/opt/ses-monitor/config"
# ---------------------------------------------------------------------------
# Настройки мониторинга
# ---------------------------------------------------------------------------
monitoring:
# Интервал liveness-проверок (секунды)
liveness_interval: 30
# Интервал проверки архива диалогов (секунды)
archive_check_interval: 600
# Включить чтение логов через POST /ses/log (ресурсоёмко)
log_enabled: false
# Каталог с YAML-файлами сценариев
scenarios_dir: "/opt/ses-monitor/config/scenarios"
# Таймаут выполнения сценария по умолчанию (секунды)
scenario_default_timeout: 30
# Мониторинг времени обработки шага диалога из архива
step_time_monitoring: false
# ---------------------------------------------------------------------------
# Мониторинг внутренних моделей SES (SEE, SMC, TTS, QAS, SPR)
# ---------------------------------------------------------------------------
models_monitoring:
enabled: true
see_confidence_threshold: 0.5
smc_confidence_threshold: 0.5
tts_enabled: true
qas_enabled: true
spr_enabled: true
# ---------------------------------------------------------------------------
# Настройки логирования
# ---------------------------------------------------------------------------
logging:
level: "INFO"
file: "/var/log/ses-monitor/monitor.log"
format: "%(asctime)s [%(levelname)s] %(name)s: %(message)s"
+43
View File
@@ -0,0 +1,43 @@
# =============================================================================
# Пример сценария: диалог с несколькими шагами
# =============================================================================
# Имитирует полноценный диалог пользователя с роботом SES.
# Каждый шаг проверяет конкретные поля ответа.
#
# ИНСТРУКЦИЯ: скопируйте, переименуйте и опишите ваш диалог.
# cp example_dialog.yaml my_project_dialog.yaml
# # замените шаги и ожидания под логику вашего сценария
name: "example: диалог"
description: >
Пример многошагового диалога с проверкой промежуточных ответов.
Адаптируйте под логику вашего робота.
enabled: false # Пример выключен по умолчанию
interval: 600
timeout: 45
# robot_id: "uuid-вашего-робота" # ОБЯЗАТЕЛЬНО: ID робота из /ses/robot/listall
restart_closed: false # Не переоткрывать закрытые сессии
steps:
# Шаг 1: инициируем диалог
- send: "Привет"
expect:
- path: "error"
equals: 0
- path: "answer[0].messages[0]"
not_empty: true
# Шаг 2: продолжаем диалог
- send: "Как дела?"
expect:
- path: "error"
equals: 0
- path: "answer[0].messages[0]"
not_empty: true
# Шаг 3: завершаем
- send: "Спасибо"
expect:
- path: "error"
equals: 0
+28
View File
@@ -0,0 +1,28 @@
# =============================================================================
# Пример сценария: базовая проверка liveness робота
# =============================================================================
# Проверяет что робот отвечает на приветствие и не возвращает ошибок API.
# robot_id указывается в этом же файле (не наследуется из глобального конфига).
#
# ИНСТРУКЦИЯ: скопируйте этот файл, переименуйте и адаптируйте под ваш проект.
# cp example_liveness.yaml my_project_liveness.yaml
# # отредактируйте: name, robot_id, steps, expect
name: "example: liveness"
description: >
Базовая проверка: отправляем приветствие роботу
и убеждаемся что API отвечает без ошибок.
Не зависит от конкретного сценария SES.
enabled: false # Пример выключен по умолчанию
interval: 60
timeout: 15
# robot_id: "uuid-вашего-робота" # ОБЯЗАТЕЛЬНО: ID робота из /ses/robot/listall
steps:
- send: "Здравствуйте"
expect:
- path: "error"
equals: 0
- path: "answer"
not_empty: true
+13
View File
@@ -0,0 +1,13 @@
# UserParameter для ses-monitor.
#
# Подключение: добавьте в /etc/zabbix/zabbix_agentd.conf строку:
# Include=/opt/ses-monitor/config/zbx_agentd_ses.conf
#
# После этого перезапустите агента:
# sudo systemctl restart zabbix-agent
#
# Шаблон для Zabbix 5.0: zabbix/zbx_ses_template_5.0_up.xml
# Master-элемент: ses.metrics (JSON)
# Dependent-элементы: ses.* с JSONPath препроцессингом
UserParameter=ses.metrics,/opt/ses-monitor/scripts/zbx_get.py