Мониторинг и метрики

Мониторинг сервера RuDesktop — набор встроенных средств для проверки доступности служб, наблюдения за нагрузкой на базу данных и сбора диагностической информации. Раздел описывает, какие точки контроля доступны «из коробки» и как использовать их во внешних системах мониторинга

Подсказка

Встроенного экспортёра метрик в формате Prometheus в сервере RuDesktop нет. Для интеграции с системами мониторинга (Zabbix, Prometheus, Grafana) используются эндпоинт /api/healthcheck/, команды rude status / rude prof и стандартные средства systemd и PostgreSQL

Что контролировать

Минимальный набор точек, которые имеет смысл наблюдать в продуктивной среде:

Точка контроля

Чем проверять

Доступность веб-API

HTTP-запрос к /api/healthcheck/

Состояние служб сервера

rude status или systemctl is-active rudesktop-*

Нагрузка на базу данных

rude prof (активные SQL-запросы и их длительность)

Свободное место под логи и БД

df -h /var/log /var/lib/postgresql

Доступность Redis

redis-cli -h <addr> -p <port> PING

Доступность узла кластера

rude ping <ip> (по протоколу RuDesktop)

Healthcheck-эндпоинт

Сервер предоставляет открытый эндпоинт для внешних балансировщиков и систем мониторинга:

GET https://<адрес_сервера>/api/healthcheck/

Эндпоинт не требует аутентификации и возвращает JSON-ответ:

{"health_check": "passed successfully"}

Важно

Эндпоинт подтверждает, что веб-служба rudesktop-web принимает HTTP-запросы и Django успешно отрабатывает маршрут. Он не проверяет доступность базы данных, Redis и нативных компонентов relay / executor — для них используйте отдельные проверки (см. раздел ниже)

Пример проверки из скрипта мониторинга:

curl -fsS https://server.example.com/api/healthcheck/ \
    | grep -q '"passed successfully"' \
    && echo OK || echo FAIL

Пример блока для HAProxy перед сервером:

backend rudesktop_web
    option httpchk GET /api/healthcheck/
    http-check expect string passed successfully
    server web1 10.0.0.11:443 check ssl verify none
    server web2 10.0.0.12:443 check ssl verify none

Состояние служб

Команда status выводит статусы всех служб сервера в зависимости от режима установки (INSTALL_MODE):

rude status

Активные службы выводятся зелёным, неактивные — красным. Для интеграции со скриптом удобнее использовать systemctl:

systemctl is-active rudesktop-web rudesktop-relay rudesktop-executor

Подсказка

В режиме full контролируйте: rudesktop-web, rudesktop-relay, rudesktop-executor, rudesktop-redis, nginx и текущую службу PostgreSQL. В режимах relay и executor состав служб отличается — см. описание команды status

Нагрузка на базу данных

Команда prof показывает активные SQL-запросы пользователя rudesktop с PID и временем работы. Применяется для поиска долгих запросов и анализа нагрузки:

rude prof
rude prof --explain

Важно

Перед первым использованием выполните однократно rude prof init — команда увеличивает track_activity_query_size в PostgreSQL и перезапускает службу, иначе тексты длинных запросов будут обрезаны

Дополнительно используйте стандартные средства PostgreSQL:

  • Системное представление pg_stat_activity — все активные сессии и их состояние

  • Расширение pg_stat_statements — статистика по выполненным запросам (включается в postgresql.conf)

Логи и диагностика

Для локального анализа используются логи в /var/log/rudesktop/ (см. Логи сервера). Для передачи в техническую поддержку используйте команду diag — она собирает логи, конфиги, версии и информацию об ОС в один архив:

rude diag
rude diag -P <пароль>     # с шифрованием GPG

Подсказка

Команда diag автоматически вырезает пароли и секреты из конфигов перед упаковкой архива

Дублирование событий аудита во внешний Syslog-приёмник настраивается отдельно — см. Публикация событий в Syslog. Этот канал удобно использовать для интеграции с SIEM (например, RuSIEM) и для долговременного хранения событий безопасности

Интеграция с внешними системами

Поскольку встроенного экспортёра метрик нет, типичные сценарии интеграции выглядят так:

Система

Способ интеграции

Zabbix

HTTP-агент на /api/healthcheck/ для веб-службы; UserParameter со скриптами-обёртками над rude status и systemctl is-active для остальных служб; стандартные шаблоны для PostgreSQL и хост-метрик

Prometheus

blackbox_exporter для проверки /api/healthcheck/; node_exporter для CPU/RAM/диска; postgres_exporter для базы данных; redis_exporter для Redis

Grafana

Дашборды на основе данных Prometheus или прямого подключения к PostgreSQL

SIEM (RuSIEM и др.)

Публикация событий аудита через Syslog — см. Публикация событий в Syslog

Важно

При размещении сервера за обратным прокси убедитесь, что эндпоинт /api/healthcheck/ не закрыт авторизацией на уровне прокси, иначе проверки балансировщика будут возвращать 401/403

Связанные команды

  • status — статусы служб сервера

  • prof — активные SQL-запросы и план выполнения

  • diag — сбор диагностического архива для техподдержки

  • ping — проверка доступности удалённого сервера по протоколу RuDesktop

  • constance — чтение и изменение параметров конфигурации сервера