Kervax

Open source · AGPL-3.0 · self-hosted

Мониторинг и аудит безопасности инфраструктуры

Сайты, серверы, Docker, Kubernetes, базы, очереди, GPU и бэкапы в одной панели. Одна команда на установку, одна на каждую ноду. Агент сам находит сервисы, дашборды и алерты работают с первой минуты.

Docker Compose PostgreSQL агент на Go, amd64 и arm64 Telegram и webhook RU / EN
80видов алертов с выдержкой и гистерезисом
0входящих портов на нодах: агент только подключается наружу
1команда на панель и одна на ноду, без экспортеров и конфигов
2 ГБпамяти достаточно панели, данные в вашем PostgreSQL
kervax.example.comувеличить
Главная: что сломано и что требует действий

Безопасность

Аудит безопасности на каждом сервере

Без отдельного сканера и агента безопасности: те же ноды, та же панель, те же алерты.

порты снаружиалерт на новый порт

Что открыто в интернет

  • Скан снаружи каждой ноды, сверка с тем, что слушает внутри: процесс и контейнер у каждого порта.
  • Белый список учитывается: порт, открытый только своим адресам, открытым не считается.
  • Только Cloudflare: проверяется, что origin не отвечает никому, кроме него.
  • Новый порт в интернете - алерт. Порт, открытый намеренно, отмечается один раз.
  • Порты сервисов LoadBalancer в Kubernetes проверяются так же.
/servers/web-02 · портыувеличить
Порты, открытые в интернет
SSHучеткиsudo

SSH и доступы

  • SSH: вход по паролю и под root, идущий перебор паролей, защита fail2ban или sshguard, версия в баннере.
  • Учетки и ключи: кто может войти, с какими ключами, у кого sudo и NOPASSWD, слабые ключи, учетки, в которые давно не входят.
  • Изменения: новый ключ, пользователь, правило sudo, вход по паролю с нового адреса - алерт с кнопкой "это мы".
  • Хронология за 90 дней: порты, контейнеры, пользователи, sudoers, кроны.
/servers/web-02 · доступыувеличить
SSH, учетки и ключи
CISA KEVUbuntu OVALendoflife.date

Уязвимости и версии без поддержки

  • Пакеты сверяются с базой OVAL от Canonical: только критичные и уже эксплуатируемые в атаках (CISA KEV).
  • Ядро - по запущенной версии, а не по установленной: видно, кому нужна перезагрузка.
  • Версии без поддержки: ОС, PostgreSQL, MySQL, Redis, nginx, PHP, Node.js, Python и другие, снимок endoflife.date внутри панели.
  • Обновления ОС: невыкаченные обновления безопасности, выключенные автообновления, перезагрузка, которую откладывают.
  • Контейнеры с привилегиями, ключами хоста или сокетом Docker внутри, порты в обход фаервола.
уязвимостиувеличить
Уязвимости по всем серверам
/servers/web-02увеличить
Карточка сервера: замечания по разделам
Карточка сервера: замечания разложены по разделам, изменения за сутки сверху.
/servers/web-01 · вебувеличить
Ошибки 5xx и их причина
Веб: 5xx по сайтам и путям, для 502/504 - какой upstream не ответил и почему.

Диски и железо

Поломка видна до того, как случилась

Прогнозы по истории, а не пороги по текущему значению.

SMARTRAIDNVMe

Износ и здоровье дисков

  • Прогноз износа SSD: скорость по замерам, дата 90% и 100% при текущей записи, алерт за 60 дней.
  • Кто пишет на диск: юниты, контейнеры и поды, за час, сутки и неделю.
  • Здоровье: деградировавший RAID, отказ по SMART, растущие переназначенные и нечитаемые сектора, пропавшие диски, ошибки в журнале ядра.
  • Диски виртуальных машин: RAID и ошибки ввода-вывода видны и без SMART.
/servers/db-01 · здоровье дисковувеличить
Износ SSD и кто пишет на диск
прогнозinodeочистка

Заполнение и место

  • Прогноз заполнения по суточным минимумам, а не по всплескам; inode отдельно.
  • На что ушло место: дерево крупнейших каталогов, журнал, образы и кэш сборки Docker, большие логи, забытые дампы.
  • Безопасное чистится кнопкой, для остального готовая команда. Автоочистка по порогу - по желанию.
/servers/db-01 · дискувеличить
Прогноз заполнения и на что ушло место
cgroupsPSINVIDIA

CPU, память, сеть, GPU

  • CPU и память по контейнерам и подам, утечки по устойчивому росту, OOM, давление (PSI).
  • Службы: упавшие юниты с концом журнала, циклы перезапусков, юниты, которые не запустятся после перезагрузки.
  • Сеть: TCP-проверки между серверами, трафик по контейнерам, лимит тарифа, DNS-резолверы, сдвиг часов.
  • GPU: загрузка, память, температура, питание, процессы по картам, Xid с требованием сброса, застывшие показания.
/servers/gpu-01 · GPUувеличить
GPU: загрузка, память, процессы
/services/gpu-01 · LLMувеличить
LLM-сервисы
LLM: vLLM, SGLang, TEI, LiteLLM - очередь, KV-кэш, TTFT и TPOT по перцентилям.
/sitesувеличить
Мониторы сайтов
Сайты: HTTP, TCP, DNS, push, проверка из нескольких сетей, сроки TLS и доменов.

Сервисы

Находит сам, разбирает до причины

Агент определяет, что работает на машине. Настраивать каждый сервис не нужно.

PostgreSQLMySQLClickHouseRedis

Базы

  • Инвентарь: базы и размеры, логины, подключения, репликация и отставание.
  • Что грузит базу: топ запросов по доле времени, временные файлы, WAL, чтение мимо буферов.
  • Проблемы: долгие транзакции, блокировки, таблицы без VACUUM, Redis у предела maxmemory.
  • Советы по настройкам с цифрами этого сервера и пометкой, нужен ли перезапуск.
/services/db-01 · базыувеличить
PostgreSQL: нагрузка и советы
RabbitMQsupervisorpm2cron

Очереди, воркеры, кроны

  • Очереди: RabbitMQ, Redis, таблицы задач. Алерт, когда очередь растет, а разбирать некому.
  • Воркеры supervisor и pm2: падения отдельно от плановых перезапусков.
  • Кроны, которые наслаиваются, висят или выбрасывают вывод. PHP-FPM, упертый в pm.max_children.
  • Логи: всплеск ошибок в логах контейнеров и подов против обычного часа.
/services/app-01увеличить
Очереди, воркеры и кроны
подыCronJobFlux

Kubernetes

  • Поды: перезапуски, CrashLoopBackOff, причина от планировщика, поды без лимитов и проб.
  • Упавший Job приходит в алерте сразу с концом лога.
  • Сроки: сертификаты control plane и kubelet, kubeconfig, TLS-секреты, доступы Flux к Git.
  • Доставка Flux, которая встала, хотя все работающее продолжает работать.
  • Сроки считаются на ноде: ключи и токены в панель не уходят.
/kube · срокиувеличить
Kubernetes: сроки сертификатов и токенов

Бэкапы и алерты

Будит только то, на что надо реагировать

Telegramwebhookэскалация

Алерты

  • Одна беда - одно сообщение, один сбой на нескольких серверах - тоже одно.
  • Плановая нагрузка в одно и то же время каждый день распознается и не алертит.
  • Кнопки в Telegram: заглушить, взял, "это мы". Эскалация, если никто не взял.
  • Чаты по группам, окна обслуживания со сверкой, карта зависимостей.
  • История с рейтингом шума и отчет за период.
история алертовувеличить
История алертов и шум
resticrest-server

Бэкапы

  • restic на каждой ноде: последний снимок, результат, ночное окно, прирост за прогон.
  • Пробное восстановление, висячие локи, тихо вставшая ротация.
  • Разворачивается из панели: сервер бэкапов, клиенты, дампы баз.
  • Сейф доступов шифруется в браузере: панель хранит только шифротекст.
/backupsувеличить
Бэкапы

Из коробки

Вместо стека из десяти компонентов

ЗадачаKervaxОбычный стек
Метрики нового сервера одна команда на ноде node_exporter, scrape-цель, перезагрузка конфига, дашборд
Сайт снаружи адрес, остальное определяется само blackbox_exporter, relabeling, правило, панель
Сроки TLS и домена сами, за 14 / 7 / 1 день проба и PromQL, для домена свой экспортер
Порты в интернет проверка снаружи, алерт на новый отдельный сканер
CVE и ПО без поддержки по каждой ноде отдельные инструменты
Износ SSD, SMART, RAID с прогнозом smartctl_exporter и правила
Контейнеры, поды, базы, очереди находит агент cAdvisor, kube-state-metrics, экспортер на каждую СУБД
Бэкапы статус restic и пробное восстановление не покрыто
Инциденты и маршруты встроены конфигурация Alertmanager
Права доступа роли и группы, проверка в API организации Grafana и доступ к Prometheus

Prometheus остается инструментом для прикладных метрик и PromQL и работает рядом. Kervax закрывает инфраструктуру: хост, сайт, сертификат, контейнер, базу, бэкап и их безопасность.

Архитектура

Модель безопасности

Установка

Одна команда

На чистом Linux-сервере: ставит Docker, поднимает Caddy с сертификатом Let's Encrypt, генерирует секреты, выводит адрес панели и пароль администратора.

$ curl -fsSL https://raw.githubusercontent.com/mihsergeev/Kervax/main/ops/quickstart.sh | sudo sh
Домен не обязателен

Без своего домена панель работает на <IP-сервера>.sslip.io с сертификатом Let's Encrypt.

Сервер

"Добавить сервер" выдает команду для ноды. Метрики появляются через несколько секунд.

Сайт

Адрес монитора. Схема, сертификат, домен и история заполняются с первой проверки.

Свой домен, белый список, работа за существующим nginx, обновление: инструкция по установке.