Server Monitoring · SSH-pull

server_checker
контроль ресурсов серверов

Насколько загружен каждый сервер, хватает ли ему памяти и диска, случались ли сбои — и главный вердикт: нужно ли добавить мощностей. Без агентов на серверах: коллектор опрашивает их по SSH каждые ~15 минут, складывает метрики в базу на вашем сервере (без облака), а раздел «Серверы» кабинета и Claude-скил показывают готовые ответы.

без агентов · только SSH PostgreSQL · ваш сервер кабинет wexus_admin · /servers светофор + рекомендации
▼ как это устроено
01

Простыми словами

server_checker — это «медкарта» каждого сервера компании. Раз в ~15 минут машина координатора подключается к серверам по SSH, снимает показатели (процессор, память, диск, контейнеры) и записывает их в базу на вашем сервере (не в облако). Поверх этих записей считаются сбои (перезагрузки, падения контейнеров, недоступность, выход за пороги) и вердикты — светофор 🟢/🟡/🔴 с человеческими рекомендациями вида «включить swap» или «диск заполнится через ~40 дней».

Смотреть результаты можно двумя способами: раздел «Серверы» в кабинете wexus_admin (список со светофором, карточка с графиками за день/неделю/месяц, журнал инцидентов) и Claude-скил /server_check — та же сводка прямо в чат.

  • На серверы ничего не устанавливается — только читающие команды по SSH.
  • Новый сервер добавляется формой в кабинете; коллектор подхватывает его сам на ближайшем цикле.
  • Секреты не покидают машину координатора: SSH-ключи лежат в её ~/.ssh, в кабинет вводится только имя ключа.
02

Архитектура и поток данных

data-flow · ssh-pull → PostgreSQL (self-host) → кабинет/скилкаждые ~15 мин
wexus Ubuntu · 1 vCPU · 1 GB amo-devbox Hetzner · devbox + новый сервер добавляется из кабинета коллектор collect.mjs машина координатора · Node 22 Task Scheduler · каждые 15 мин PostgreSQL схема server_checker snapshots · incidents verdicts · views v_* кабинет /servers · графики /server_check отчёт в чат ssh · read-only insert · роль collector select select форма «добавить сервер» → таблица server → коллектор подхватит
Коллектор — единственный, кто ходит на серверы (одна SSH-сессия на сервер, только читающие команды: /proc, free, df, docker, systemctl, journalctl) и единственный, кто пишет метрики (отдельная роль БД). Кабинет и скил — только читатели; кабинет пишет лишь в реестр серверов при регистрации нового.
03

Что собирается

слойчто именнокак считаетсячастота
Метрики load average · CPU % · RAM/swap (занято/доступно) · диски по разделам · статусы docker-контейнеров CPU — reboot-safe дельта /proc/stat между съёмами каждые ~15 мин
Инвентарь ОС и ядро · модель CPU и ядра · RAM/swap всего · диски · версия docker · открытые порты · аптайм карточка «Параметры» сервера раз в сутки
Агрегаты средние и пики CPU/RAM/диска · % доступности · счётчики сбоев SQL-views: день / неделя / месяц + ряды для графиков на лету

Дыра в данных ≠ сбой сервера. Если машина координатора была выключена, строк за этот период просто нет: доступность считается только по выполненным съёмам, инциденты из-за пропусков не создаются.

04

Сбои: шесть детекторов

детекторкак ловитсяжизненный циклсерьёзность
Перезагрузка btime в /proc/stat изменился против прошлого съёма мгновенный (фиксируется фактом) warning
OOM-killer journalctl ядра с момента прошлого съёма мгновенный critical
Падение контейнера running → exited или вырос RestartCount (docker ps -a) мгновенный warning
Сбой systemd-юнита systemctl --failed не пуст открыт, пока список не опустеет warning
Недоступность 3 неудачных SSH-съёма подряд открыт → закрывается при успешном съёме critical
Пороги RAM > 90 % · диск > 85 % · load > числа ядер 30+ мин открыт → закрывается с гистерезисом (RAM < 85 %, диск < 80 %) warning / critical

Открытый инцидент одного типа на сервер — всегда один (дедуп на уровне БД); повторные съёмы не плодят дубли. Мгновенные события (перезагрузка, OOM, падение контейнера) создаются сразу закрытыми — это «отметка в журнале», а не «горящее состояние».

05

Вердикты: нужно ли добавить мощностей

verdict-engine · светофор + рекомендациипосле каждого съёма
свежий снапшот + история 7–14 дней swap-правило swap=0 при RAM ≤ 2 GB → включить RAM-правило среднее 7 дней > 85 % → добавить RAM диск-прогноз линейный тренд 14 дней → «через ~N дней» светофор 🟢 ok · 🟡 warning · 🔴 critical + открытые инциденты verdict история в БД
Вердикт — это готовый ответ управленцу, а не сырые цифры. Живой пример: у wexus 1 GB RAM и swap = 0 — система сама вынесла рекомендацию «включить swap» в первый же день работы. Вердикты пишутся в историю при изменении (и минимум раз в сутки) — видно, когда сервер «пожелтел».
06

Добавление сервера и безопасность

Новый сервер — два шага
  • Ключ — на машину координатора: приватный SSH-ключ кладётся в ~/.ssh, алиас прописывается в ~/.ssh/config. В кабинет и БД ключ не попадает никогда.
  • Форма в кабинете — «Серверы → Добавить сервер»: название, host (лучше алиас — тогда даже IP не хранится в облаке), порт, пользователь, период съёма. Коллектор подхватит сервер на ближайшем цикле — «проверка подключения» видна как статус первого съёма.
Границы доступа
  • Роль server_checker_collector — пишет метрики/инциденты/вердикты, не может менять реестр серверов и чужие схемы.
  • Роль кабинета wexus_admin_app — читает всё в схеме, пишет только в реестр серверов; в метрики писать не может.
  • Раздел «Серверы» виден только ролям Owner / Admin; проверка прав — и в UI, и внутри server actions.
  • Репозиторий публичный: серверы в нём — только алиасами, секреты — в локальных конфигах координатора.
Если что-то сломалось
  • Логи коллектора: ~/.wgp/logs/server_checker-*.log; планировщик: schtasks /Query /TN server-checker-collect.
  • Полный мануал восстановления — OPERATIONS.md в репозитории.
07

Легенда

Узлы схем

коллектор (по расписанию)
хранилище (PostgreSQL · self-host)
кабинет wexus_admin
правила / Claude-скил

Потоки

живой поток данных (бегущий пунктир)
связь / зависимость
по расписанию (Task Scheduler)

Светофор

ok — ресурсов хватает
warning — есть рекомендации
critical — недоступен / ресурс на пределе
server_checker · SSH-pull мониторинг без агентов · Источники правды: README.md и OPERATIONS.md репозитория gram2Claude/server_checker · Кабинет: wexus_admin → «Серверы» · Скил: /server_check
← Все кейсы