Skip to content

Monitoring v2.0.0

Choose a tag to compare

@krionefishy krionefishy released this 01 Oct 21:50
9347a0e

Monitoring v2

Новая self-hosted версия мониторинга: отдельный экземпляр на сервере каждого приложения, веб-интерфейс на собственном поддомене и локальные аккаунты. Источник HTTP-статистики — JSON access log nginx; обязательного SDK нет.

Что изменилось

  • Dashboards: количество запросов, RPM, точные коды HTTP на общем графике ручки, доли ответов, приближённые p50/p95/p99. Фильтры по сервису, группе маршрутов и ручке; явные правила нормализации динамических URL.
  • Incidents: накопление всех наблюдаемых 4xx/5xx по ручке и HTTP-коду, время первого/последнего случая и request_id для поиска в логах. Управление жизненным статусом убрано из интерфейса.
  • Services status: активные health-проверки каждые 30 секунд, проверка кода и опционального JSON, общий deadline 3 секунды, независимое сохранение результатов.
  • DB monitoring: раздел обозначен как будущая возможность; сбор метрик БД ещё не реализован.
  • Автообновление интерфейса всегда включено. Telegram-уведомления из нового runtime удалены.
  • Login-only модель: пользователи создаются CLI, пароли Argon2, локальные сессии, Secure/HttpOnly cookies, CSRF и ограничение попыток входа.
  • Durable collector с курсором и SQLite spool, идемпотентная запись в PostgreSQL, outbox, отдельная логическая read-модель с публикацией каждые 5 минут и Redis-кешем на 30 секунд. Это не физическая репликация PostgreSQL.
  • Догоняющее чтение накопленного лога и отображение backlog, восстановление read-модели, Docker Compose для direct nginx и API Gateway, CI для backend/frontend и полного запуска Compose.

Несовместимые изменения и установка

  • Это новая поставка с PostgreSQL primary/read-db и Redis. История старой SQLite и Telegram-настройки автоматически не мигрируют. Сохраните старую установку и данные до приёмки v2.
  • Старый SDK endpoint /api/errors возвращает 410 Gone. Новый runtime не требует SDK и не знает traceback из nginx-лога.
  • Используйте конфигурацию в monitor-service/deploy: docker-compose.yaml, .env.example, профили application.direct.json / application.gateway.json и nginx snippets.
  • Задайте уникальные project/instance ID и секреты, JSON log с совпадающими application/environment, права на лог, health URLs, HTTPS origin и поддомен. Аккаунт создаётся через python -m app.v2.cli create-user <username> в контейнере api.
  • MONITOR_TRUSTED_PROXIES обязателен: это IP/CIDR nginx перед веб-интерфейсом, каким его видит API-контейнер, а не IP приложения или устройств пользователя. Не включайте доверие всем адресам. Bootstrap и подсказка определения gateway приведены в .env.example.
  • Корневые README/RELEASE пока описывают прежнюю SDK/Telegram-поставку. Актуальная подробная инструкция интеграции передана владельцу отдельно; в репозиторий планы и отчёты не добавлялись.
  • Готовый Docker image в registry этим релизом не публикуется; образ собирается из исходников данного тега.

Проверки и ограничения

Локально прошли 20 backend-тестов, 2 frontend-теста, Ruff, TypeScript/Vite production build и smoke-тест чистого Compose с реальными PostgreSQL и Redis. Проверены сбор → запись → публикация, точные коды и инциденты, изоляция аккаунтов установок, восстановление, доверенные proxy, backlog и health deadline.

Nginx на входе показывает итоговые HTTP-ответы; внутренние вызовы микросервисов и причины исключений требуют отдельного анализа логов. Полноценный длительный нагрузочный тест на сервере конкретного приложения и проверка восстановления его production backup остаются задачами приёмки. Лимит входа составляет 10 попыток за 5 минут по логину и IP; устройства за одним NAT делят IP-лимит.

Все три задания GitHub Actions прошли также на итоговом merge-коммите 9347a0eea83eebde0c43507fcdb172d1bfcd7a1c: CI. Изменения слиты через PR #1.