Мониторинг хостов

Лёгкий агент cronbox-agent ставится на сервер одной командой и раз в 30 секунд отправляет в CronBox состояние хоста: нагрузку, память, диски и Docker-контейнеры. Вы видите все серверы на одной странице и получаете уведомления, когда хост пропадает, контейнер падает или диск заполняется.

Как это работает

  1. 1

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

    На странице «Хосты» нажмите «Добавить хост». Вы получите токен и команду установки, токен показывается один раз.

  2. 2

    Выполните команду на сервере

    Установщик скачает агент, проверит контрольную сумму и запустит его как systemd-сервис от отдельного пользователя.

  3. 3

    Смотрите метрики и получайте алерты

    Через минуту хост появится на странице со статусом, CPU, памятью, дисками и списком контейнеров.

Установка

curl -fsSL https://cronbox.ru/install.sh | sudo sh -s -- --token wk_xxxxxxxx

# Логи и проверка
journalctl -u cronbox-agent -f
cronbox-agent check          # собрать снимок и вывести JSON

# Обновление: повторите команду установки. Удаление:
curl -fsSL https://cronbox.ru/install.sh | sudo sh -s -- --uninstall

Поддерживается Linux с systemd на amd64, arm64 и armv7 (Raspberry Pi). Агент делает только исходящие соединения, поэтому работает за NAT и не требует открытых портов. Docker опрашивается через /var/run/docker.sock в режиме чтения; без Docker агент отправляет только системные метрики.

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

  • Система - hostname, ОС, ядро, аптайм, load average, загрузка CPU, память и swap.
  • Диски - заполненность реальных файловых систем (tmpfs, overlay и прочие псевдо-ФС исключены).
  • Docker - все контейнеры, включая остановленные: состояние, статус и результат healthcheck.
  • systemd - сервисы хоста через systemctl: состояние, автозапуск, описание. Так мониторятся службы, которые работают не в Docker: nginx, PostgreSQL, свои демоны.

Уведомления

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

  • Хост недоступен - от агента нет отчётов 3 минуты; при возврате приходит уведомление о восстановлении.
  • Контейнер упал - остановился с ненулевым кодом, перезапускается по кругу или стал unhealthy; и снова работает. Завершение с кодом 0 (одноразовые init-контейнеры) проблемой не считается.
  • Сервис не работает - systemd-юнит перешёл в failed или остановлен, хотя включён в автозапуск; и снова работает. Отключённые и static-юниты (цели таймеров, разовые помощники) в покое считаются нормой.
  • Исключения - в подробностях хоста любой контейнер или сервис можно исключить из уведомлений (поля ignored_containers и ignored_services в API), например заведомо разовые задания.
  • Диск заполнен - диск превысил порог: общий для хоста (по умолчанию 90%) или свой для конкретной точки монтирования (поле disk_thresholds, 0 отключает алерт для диска, например для маленького /boot).

Конфигурация агента

Файл /etc/cronbox/agent.conf:

CRONBOX_TOKEN=wk_xxxxxxxx              # токен хоста из панели
CRONBOX_API_URL=https://api.cronbox.ru  # по умолчанию
CRONBOX_INTERVAL=30s                    # от 10s до 10m
CRONBOX_DOCKER_SOCKET=/var/run/docker.sock  # пустое значение отключает Docker
CRONBOX_SYSTEMD=true                    # false отключает опрос systemd

Эндпоинты

GET
/hosts

Список хостов с последним снимком

POST
/hosts

Регистрация хоста, возвращает токен и команду установки

GET
/hosts/{id}

Получение хоста

PATCH
/hosts/{id}

Название, активность и настройки алертов

DELETE
/hosts/{id}

Удаление хоста

POST
/hosts/{id}/regenerate-key

Новый токен, старый перестаёт работать

Агент отправляет снимок в поле host обычного heartbeat воркера (POST /worker/heartbeat), поэтому хост - это внешний воркер с включённым мониторингом. Ограничение на число хостов задаётся тарифом.