Initial commit: ses-monitor watchdog for SES

Универсальный watchdog-мониторинг Service Engine Server (SES):
- Liveness-проверки (API, лицензия, роботы)
- Диалоговые сценарии из YAML с агрегацией в 6 фиксированных Zabbix-метрик
- Доставка: zabbix_sender (active push) или UserParameter (пассивный опрос)
- Поддержка Python 3.7+, Zabbix 5.0
This commit is contained in:
Maksim Totmin
2026-06-19 20:26:26 +07:00
commit 7394b14b52
27 changed files with 5175 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
# =============================================================================
# Основная конфигурация системы мониторинга SES (шаблон)
# =============================================================================
# Скопируйте в config.yaml и заполните свои значения.
# cp config.yaml.example config.yaml
# Формат: YAML 1.2
# ---------------------------------------------------------------------------
# Настройки подключения к SES серверу
# ---------------------------------------------------------------------------
ses:
# Базовый URL SES API
base_url: "http://YOUR_SES_HOST:6190"
# ID робота (сценария) для проверок.
# Узнать ID: GET /ses/robot/list или /ses/robot/listall
# Каждый сценарий может переопределить robot_id в своём YAML-файле
robot_id: "YOUR_ROBOT_ID"
# Эндпоинт для получения списка роботов:
# /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"
+42
View File
@@ -0,0 +1,42 @@
# =============================================================================
# Пример сценария: диалог с несколькими шагами
# =============================================================================
# Имитирует полноценный диалог пользователя с роботом SES.
# Каждый шаг проверяет конкретные поля ответа.
#
# ИНСТРУКЦИЯ: скопируйте, переименуйте и опишите ваш диалог.
# cp example_dialog.yaml my_project_dialog.yaml
# # замените шаги и ожидания под логику вашего сценария
name: "example: диалог"
description: >
Пример многошагового диалога с проверкой промежуточных ответов.
Адаптируйте под логику вашего робота.
enabled: false # Пример выключен по умолчанию
interval: 600
timeout: 45
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
+27
View File
@@ -0,0 +1,27 @@
# =============================================================================
# Пример сценария: базовая проверка liveness робота
# =============================================================================
# Проверяет что робот отвечает на приветствие и не возвращает ошибок API.
# Подходит для любого сценария SES — достаточно заменить robot_id в config.yaml.
#
# ИНСТРУКЦИЯ: скопируйте этот файл, переименуйте и адаптируйте под ваш проект.
# cp example_liveness.yaml my_project_liveness.yaml
# # отредактируйте: name, steps, expect
name: "example: liveness"
description: >
Базовая проверка: отправляем приветствие роботу
и убеждаемся что API отвечает без ошибок.
Не зависит от конкретного сценария SES.
enabled: false # Пример выключен по умолчанию
interval: 60
timeout: 15
steps:
- send: "Здравствуйте"
expect:
- path: "error"
equals: 0
- path: "answer"
not_empty: true
+23
View File
@@ -0,0 +1,23 @@
# =============================================================================
# Сценарий: диалог с роботом МФЦ (production)
# =============================================================================
# Проверяет что робот отвечает на приветствие и возвращает меню действий.
# Выполняется каждые 60 секунд, создаёт сессию в SES.
# Результат агрегируется в ses.scenario.ok/total/failed/avg_time/max_time/error.
name: "mfc_dialog"
description: >
Проверка диалога с МФЦ: отправка приветствия,
ожидание меню действий (error=0, answer не пуст).
enabled: true
interval: 60
timeout: 15
steps:
- send: "Здравствуйте"
expect:
- path: "error"
equals: 0
- path: "answer[0].messages[0]"
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