↓ До тексту
  1. Статті/

Beszel - легкий моніторинг серверів без Grafana

·4 хвилини
cat /etc/passwd
Автор
cat /etc/passwd
Технічний блог про Linux, DevOps та Open Source технології.
Зміст

Коли серверів у тебе два-три, піднімати заради них Prometheus із Grafana - як забивати цвях мікроскопом: потужно, але довго й з купою конфігів. Beszel закриває 90% потреб домашнього моніторингу значно простіше: легкий hub (веб-інтерфейс + вбудована база) і маленький agent на кожному хості. CPU, памʼять, диск, мережа, температура, статус docker-контейнерів - усе з усіх машин на одній сторінці, з історичними графіками й алертами. Ставиться за кілька хвилин у Docker.

Що потрібно зробити?
#

Підняти hub у Docker на одній машині, поставити agent на кожному хості, який хочемо моніторити, і звʼязати їх. Далі - дивитись метрики в браузері. Цього разу я записав два відео: як це ставиться в терміналі і як цим користуватися в браузері.

З чим працюю?
#

Два хости зі свіжим Debian/Ubuntu і вже встановленим Docker (нема - це на одну команду):

  • hub - 10.10.60.102, тут крутиться веб-інтерфейс (порт 8090).
  • agent - 10.10.60.103, машина, яку моніторимо (агент слухає порт 45876).

Версію Beszel фіксую - 0.21.0, щоб усе збігалося з текстом.

Піднімаємо hub
#

На хабі створюємо проєкт і кладемо compose.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
services:
  beszel:
    image: henrygd/beszel:0.21.0
    container_name: beszel
    restart: unless-stopped
    ports:
      - "8090:8090"
    volumes:
      - ./beszel_data:/beszel_data       # база + налаштування (тут і бекапи)
      - ./beszel_socket:/beszel_socket
    environment:
      APP_URL: http://10.10.60.102:8090  # публічна адреса хаба

Запускаємо docker compose up -d - і веб-інтерфейс піднімається на http://10.10.60.102:8090. Агент поки не чіпаємо: щоб його налаштувати, спершу треба зайти в хаб і зареєструвати систему - звідти ми отримаємо ключ і токен для агента.

Перший вхід і реєстрація системи
#

Відкриваємо хаб у браузері. На першому запуску Beszel просить створити адмін-акаунт:

Перший запуск Beszel - створення адмін-акаунта

Далі тиснемо Add System, вказуємо імʼя (web-01), адресу агента (10.10.60.103) і порт (45876). Beszel одразу показує Public Key і Token - саме їх треба віддати агентові (а ще поряд - готовий docker-compose.yml для нього):

Діалог Add System - звідси беремо Public Key і Token для агента

Токен - це секрет. На скриншоті вище я його замалював. У свій compose.yml для агента підставляй реальні значення з цього діалогу, але в git чи кудись назовні їх не публікуй.

Ставимо agent
#

Тепер на хості 10.10.60.103 створюємо проєкт агента з тим ключем і токеном:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
services:
  beszel-agent:
    image: henrygd/beszel-agent:0.21.0
    container_name: beszel-agent
    restart: unless-stopped
    network_mode: host                 # для мережевих метрик; порт відкривається сам
    volumes:
      - ./beszel_agent_data:/var/lib/beszel-agent
      - /var/run/docker.sock:/var/run/docker.sock:ro   # статус контейнерів
    environment:
      LISTEN: 45876
      HUB_URL: "http://10.10.60.102:8090"
      KEY: "ssh-ed25519 AAAA...<Public Key з діалогу>"
      TOKEN: "<Token з діалогу>"        # секрет, не комітити

Ось як виглядають обидва підняття в терміналі - спершу hub, потім agent (видно, як агент підключається до хаба по WebSocket):

Щойно агент стартував - у хабі система зеленіє і починає віддавати живі метрики.

Агент без Docker - один бінар і systemd
#

Тягнути Docker на кожну машину лише заради крихітного агента - надмірно. Beszel це передбачає: агента можна поставити як звичайний systemd-сервіс, без контейнерів. У діалозі Add System для цього є окрема вкладка Binary - там той самий ключ і токен, тільки у вигляді готової команди встановлення.

Офіційний скрипт створює користувача beszel, кладе бінар і піднімає systemd-юніт з автозапуском:

1
2
3
4
5
curl -sL https://get.beszel.dev -o /tmp/install-agent.sh && chmod +x /tmp/install-agent.sh
sudo /tmp/install-agent.sh \
  -k "ssh-ed25519 AAAA...<Public Key з діалогу>" \
  -t "<Token з діалогу>" \
  -url "http://10.10.60.102:8090"

Прапори прості: -k - публічний ключ, -t - токен, -url - адреса хаба, -p - порт (типово 45876), -u - деінсталяція. Перевіряємо, що сервіс живий:

1
systemctl status beszel-agent

Коли що брати? Docker-агент - якщо на хості вже крутиться Docker і хочеться однаковості (compose up - і забув). Бінар - для машин, де Docker не потрібен: не тягнемо цілий runtime заради одного агента, менше оверхеду, звичайний systemd-сервіс. Хаб і метрики виглядають однаково - яким способом поставлений агент, йому байдуже.

Дивимось метрики
#

А тепер найцікавіше - як цим користуватися. На головній сторінці всі системи списком із живими CPU/RAM/диском, а клік по будь-якій відкриває деталі з історичними графіками: CPU, памʼять, диск (і його I/O), мережа, температура, статистика docker-контейнерів. Зверху - перемикач діапазону часу.

Жодного PromQL, жодних дашборд-конфігів - усе вже намальовано, лишається дивитись.

Куди далі
#

Beszel уміє більше: алерти (поріг по CPU/RAM/диску/температурі - лист або пуш, коли щось не так), моніторинг доступності сервісів, універсальний токен для масового додавання агентів, перегляд із телефона. Але база готова: ти бачиш стан усіх своїх машин на одній сторінці.

Дві звички наостанок, ті самі, що й завжди. Фіксуй версію образу (:0.21.0, не :latest) - моніторинг не те місце, де хочеться сюрпризів після автооновлення. І токен агента - це секрет: тримай його поза git, а якщо світив десь публічно - перевипусти.

Related

Homepage - один дашборд на всі домашні сервіси

·5 хвилин
Десяток вкладок із сервісами замінюємо однією акуратною стартовою сторінкою. Homepage - легкий YAML-дашборд, що піднімається за хвилину в Docker: групи сервісів, іконки, статус контейнерів, погода, пошук. З живим записом і скриншотами.