Beszel: легкий та сучасний моніторинг серверів і Docker без монструозного Grafana
🇬🇧 Read this article in English
Якщо ви адмініструєте кілька VPS або тримаєте домашній сервер (Homelab) з десятками Docker-контейнерів, ви точно стикалися з дилемою моніторингу:
- Prometheus + Grafana + Node Exporter: індустріальний стандарт, але для пет-проєктів і скромних VPS це справжній оверхед. Сам стек забирає 500–800 МБ оперативної пам’яті, вимагає вивчення мови запитів PromQL і купу часу на налаштування панелей.
- Netdata: крута деталізація в реальному часі, але перевантажений інтерфейс із тисячами графіків і помітне навантаження на диск та процесор.
- Uptime Kuma: ідеальний сервіс, про який ми вже писали раніше, проте він відповідає лише на запитання «чи живий сайт/порт?», але не показує, який саме контейнер щойно з’їв 95% пам’яті сервера.
Саме тому в спільнотах r/selfhosted та r/devops справжнім хітом став Beszel — мінімалістичний, надзвичайно швидкий і візуально приємний моніторинг із відкритим вихідним кодом.
Мал. 1. Головний дашборд Beszel: статус хостів у реальному часі, графіки завантаження та деталізація ресурсів кожного Docker-контейнера
Чому саме Beszel? Головні переваги
Beszel розроблений мовою Go на базі PocketBase (для хаба) та нативних системних викликів. Він вирішує завдання моніторингу елегантно:
- Агент важить сльози: фоновий процес агента споживає всього ~10–15 МБ RAM і практично 0% CPU.
- Автентифікація через SSH Ed25519: зв’язок між центральним хабом і серверами захищений криптографічними ключами без потреби налаштовувати складні TLS-сертифікати чи паролі.
- Глибока інтеграція з Docker: з коробки показує використання CPU, RAM і пам’яті для кожного контейнера окремо.
- Історія та графіки: дані зберігаються в компактній вбудованій базі SQLite, дозволяючи переглядати історію за години, дні, тижні чи місяці.
- Вбудовані алерти: сповіщення в Telegram, Discord, Ntfy, Pushover чи на електронну пошту, якщо пам’ять або процесор зашкалюють.
Порівняльна таблиця
| Критерій | Beszel | Grafana + Prometheus | Netdata | Uptime Kuma |
|---|---|---|---|---|
| Споживання RAM агента | ~12 МБ | 100–300 МБ | 80–150 МБ | Немає агента |
| Складність розгортання | 2 хвилини | Висока (PromQL/конфіги) | Низька | 2 хвилини |
| Моніторинг контейнерів Docker | Так (з коробки) | Потрібен cAdvisor | Так | Ні |
| Історичні графіки | Так | Так | Так | Тільки Uptime |
| Ідеальне призначення | VPS, Homelab, мікросервіси | Enterprise, великі кластери | Дебаг у реальному часі | Перевірка доступності URL |
Архітектура: як працює зв’язка Hub та Agent
Система складається з двох компонентів:
- Beszel Hub: центральний веб-інтерфейс і база даних. Зазвичай встановлюється на один головний сервер (наприклад, ваш основний VPS або домашній сервер).
- Beszel Agent: мініатюрний клієнт, що запускається на кожному сервері, який потрібно моніторити (включно із самим сервером, де стоїть Hub).
Зв’язок побудовано геніально просто: Hub генерує публічний ключ Ed25519. Ви передаєте цей ключ агенту через змінну середовища. Коли Hub опитує агент через вказаний порт, агент перевіряє криптографічний підпис. Чужий не зможе отримати доступ до ваших метрик!
Крок 1. Розгортання Beszel Hub (Серверна частина)
Створимо каталог для центральної панелі на основному сервері:
1
2
mkdir -p /opt/beszel-hub
cd /opt/beszel-hub
Створюємо файл docker-compose.yml:
1
2
3
4
5
6
7
8
9
10
11
services:
beszel:
image: henrygd/beszel:latest
container_name: beszel-hub
restart: unless-stopped
ports:
- "8090:8090"
volumes:
- ./beszel_data:/beszel_data
environment:
- PORT=8090
Запускаємо контейнер:
1
docker compose up -d
Перевіряємо працездатність:
1
docker compose ps
Відкриваємо веб-браузер за адресою http://IP_ВАШОГО_СЕРВЕРА:8090. При першому переході Beszel запропонує створити обліковий запис адміністратора (Email та пароль).
Крок 2. Отримання публічного ключа в інтерфейсі
- Увійдіть у щойно створений кабінет.
- Натисніть кнопку Add System (або значок
+у верхньому кутку). - У діалоговому вікні ви побачите згенерований Public Key вигляду:
1
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...
- Скопіюйте цей ключ — він знадобиться для запуску агентів на всіх ваших машинах.
Крок 3. Встановлення Beszel Agent на хости
Агент можна встановити як через Docker (найзручніше), так і як системний бінарник через systemd (якщо на якомусь із серверів немає Docker).
Варіант А: Через Docker Compose (Рекомендовано)
На кожному сервері, за яким хочете стежити (включно з тим, де стоїть Hub), створіть docker-compose.yml:
1
2
3
4
5
6
7
8
9
10
11
12
13
services:
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
# Для коректного обліку використання дискового простору:
- /:/extra-filesystems/root:ro
environment:
PORT: 45679
KEY: "ВСТАВТЕ_ВАШ_ПУБЛІЧНИЙ_КЛЮЧ_З_КРОКУ_2"
Важливо:
- Директива
network_mode: hostнеобхідна для того, щоб агент бачив реальний мережевий трафік мережевих інтерфейсів хоста (eth0,wg0,tailscale0) і не потребував прокидання портів через Docker NAT.- Монтування
/var/run/docker.sockнадає агенту доступ у режимі read-only до статистики запущених контейнерів.
Запустіть агент:
1
docker compose up -d
Варіант Б: Автоматичний скрипт без Docker (через systemd)
Якщо у вас є чиста віртуальна машина без Docker:
1
2
3
curl -sL https://raw.githubusercontent.com/henrygd/beszel/main/supplemental/scripts/install-agent.sh -o install-agent.sh
chmod +x install-agent.sh
sudo ./install-agent.sh -p 45679 -k "ВСТАВТЕ_ВАШ_ПУБЛІЧНИЙ_КЛЮЧ"
Скрипт завантажить офіційний бінарник для вашої архітектури (amd64 / arm64) і створить службу beszel-agent.service.
Крок 4. Додавання системи в панель Beszel
Поверніться у веб-інтерфейс Beszel Hub і заповніть форму:
- Name: Зрозуміла назва сервера (наприклад,
vps-production,homelab-truenas,backup-node). - Host / IP: IP-адреса або доменне ім’я сервера, де встановлено агент (якщо агент стоїть на тому ж сервері, де й Hub, можна вказати локальний IP або
172.17.0.1). - Port:
45679(або порт, який ви вказали).
Натисніть Save. Буквально за 3–5 секунд статус зміниться на зелений ONLINE, і на екрані з’являться перші графіки:
- Завантаження ядер процесора (CPU usage).
- Оперативна пам’ять та Swap.
- Дискові операції I/O та вільне місце.
- Вхідний та вихідний мережевий трафік.
- Таблиця Docker-контейнерів з детальним розбиттям по кожному сервісу!
Крок 5. Налаштування сповіщень (Alerts)
Ніхто не хоче дивитися на графіки цілодобово — моніторинг має сповіщати сам, коли виникає аномалія.
У Beszel налаштування алертів інтегроване безпосередньо у веб-панель:
- Перейдіть у вкладку Alerts або натисніть на іконку дзвіночка біля конкретного сервера.
- Оберіть провайдер доставки:
- Telegram: вкажіть
Bot TokenтаChat ID. - Discord: вставте
Webhook URL. - Ntfy / Pushover / Email: стандартні параметри вашого улюбленого сервера сповіщень.
- Telegram: вкажіть
- Встановіть пороги спрацьовування:
- Status: сповіщення, якщо сервер перестав відповідати понад 1 хвилину.
- CPU Usage: понад 85% протягом 10 хвилин.
- Memory Usage: понад 90%.
- Disk Usage: заповнення розділу понад 85%.
Крок 6. Безпечний доступ через HTTPS та домен
Відкривати порт 8090 у публічний інтернет без SSL не варто. Найпростіший спосіб захистити панель — пустити її через Reverse Proxy або Tailscale:
Варіант з Caddy:
beszel.yourdomain.com {
reverse_proxy 127.0.0.1:8090
}
Варіант з Nginx Proxy Manager:
Створіть Proxy Host:
- Domain Names:
beszel.yourdomain.com - Forward Hostname/IP:
172.17.0.1(або внутрішній IP сервера) - Forward Port:
8090 - Увімкніть Websockets Support і випустіть безкоштовний сертифікат Let’s Encrypt у вкладці SSL.
Підсумки та власні враження
Після кількох тижнів використання Beszel на основних VPS-нодах та домашньому сервері повертатися до складних стеків моніторингу взагалі не виникає бажання.
Головні враження:
- Швидкість: веб-інтерфейс відкривається миттєво, без очікування рендерингу важких дашбордів Grafana.
- Чесність щодо ресурсів: 12 МБ пам’яті на агенті дозволяють без докорів сумління ставити його навіть на найдешевші віртуальні машини з 512 МБ або 1 ГБ RAM.
- Docker-статистика: можливість в один клік побачити, який саме контейнер під час нічного бекапу навантажив процесор або пам’ять — безцінна.
Якщо ви шукали моніторинг, який налаштовується за 5 хвилин, не навантажує залізо і просто робить свою роботу — Beszel сьогодні є безальтернативно найкращим вибором.
Спробуйте розгорнути його на своїх серверах, а питання та власний досвід пишіть у коментарях нижче!
