Приветствую всех. Меня зовут Владимир Мостовой, я младший DevOps-инженер в компании «Флант». Имея в домашнем парке сервер на базе Proxmox, на котором работает несколько виртуальных машин, а также отдельный мини-ПК под файловое хранилище и пару VDS для личных нужд, давно стал задумываться о необходимости мониторинга состояния устройств, включая сеть, диск, CPU и температуру.
Мне хотелось найти инструмент с базовым мониторингом без сложной настройки и необходимости разбираться в том, какие метрики собирать или как рисовать дашборды. Мне важно было получить готовое решение «из коробки», которое быстро развёртывается и отвечает моим требованиям. А ещё я хотел получать уведомления о возникающих проблемах, чтобы оперативно их решать.

В сети я находил много мощных «комбайнов» по мониторингу, но они часто сложны в настройке и избыточны для небольших проектов. В очередной раз копаясь на GitHub, я наткнулся на заинтересовавшую меня утилиту Beszel, которая в теории может решить мою задачу.
В этой статье расскажу про свой опыт установки и использования этого инструмента, а также поделюсь небольшим бонусом. Я постарался описать процесс максимально доступно, чтобы любой желающий мог попробовать это на своих устройствах.
О Beszel
Разработчики позиционируют Beszel как платформу для мониторинга серверов, которая включает статистику Docker, исторические данные и функции оповещения. У неё удобный веб-интерфейс, простая настройка и она готова к использованию «из коробки». Beszel поддерживает автоматическое резервное копирование и позволяет визуально оценивать состояние компонентов сервера с помощью красивой инфографики в режиме реального времени.

Немного про характеристики Beszel:
Легковесный. В моём случае в рабочем состоянии агент занимает около 16,5 МБ оперативной памяти, а контейнер — менее 3 МБ на диске.
SQLite-хранилище, написано на Go.
Основан на Pocketbase — Open Source-решении с удобной админ-панелью, realtime-базой данных, файловым хранилищем, различными вариантами аутентификации и возможностью кастомизации под свои нужды.
Встроенная поддержка резервного копирования как в локальные архивы, так и в S3-хранилище.
Наличие интеграции Shoutrrr, то есть интегрирует его с популярными системами уведомлений и мессенджерами.
Возможность интеграции собственных cron-заданий.
Возможность установить на платформы amd64, arm64, armv7.
Мониторинг «из коробки» таких важных параметров, как нагрузка на CPU, использование оперативной памяти (RAM), место в хранилище (HDD) и температура (CPU\GPU), а также мониторинг нагрузки отдельных контейнеров Docker.
Установка Beszel
Утилиту можно использовать в двух вариантах: развернуть через docker-compose или собрать свой исполняемый файл. Я остановился на первом.
Инструкция сделана для версии 0.9.1 и может отличаться от новых версий. Последнюю версию можно посмотреть в DockerHub проекта.
Для начала необходимо установить Docker, если он не был установлен ранее.
Нажмите, чтобы увидеть инструкцию по установке.
Для своего дистрибутива вы можете найти информацию на сайте Docker.
Пример установки для Ubuntu:
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
После установки проверяем:
docker -v
Получаем вывод:
Docker version 27.5.1, build 9f9e405
Приступим к развёртыванию Beszel. Создаём директорию beszel
, переходим в неё и там создаём файл docker-compose.yml
со следующим содержанием:
services:
beszel:
image: henrygd/beszel:0.9.1
container_name: beszel
restart: unless-stopped
extra_hosts:
- host.docker.internal:host-gateway
ports:
- 8090:8090
volumes:
- ./beszel_data:/beszel_data
Выполняем команду docker compose up -d
. Она скачает необходимый Docker-образ с Bazel и запустит его. Вывод в консоли:
[+] Running 2/2
✔ Network beszel_default Created
✔ Container beszel Started
Контейнеры успешно запустились. Если обратить внимание на файл docker-compose.yml
, там открывается порт 8090. На нём и находится административная панель нашей утилиты. Переходим в неё по адресу http://<ip_server>:8090.
Настройка Beszel
Нас встречает окно создания пользователя на русском языке, что не может не радовать:

Здесь мы создаём учётную запись, после чего оказываемся в панели, где нет ни одной машины на мониторинге. Давайте исправим это.
Нажимаем на кнопку «Добавить Систему»:

Для начала мы будем мониторить тот сервер, где и запущен сам агент. Копируем целиком поле «Ключ» ssh-ed************ и нажимаем кнопку «Добавить систему»:

Переходим к файлу docker-compose.yml
и редактируем, добавляя агента мониторинга:
beszel-agent:
image: henrygd/beszel-agent:0.9.1
container_name: beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
PORT: 45876
# Do not remove quotes around the key
KEY: 'UPDATE WITH YOUR PUBLIC KEY (copy from "Add system" dialog)'
Не забываем также добавить в данной строке ключ в кавычках, который мы скопировали ранее в административной панели:
KEY: 'UPDATE WITH YOUR PUBLIC KEY (copy from "Add system" dialog)'
Теперь нам нужно перезапустить Beszel, но уже с агентом мониторинга, чтобы мы могли мониторить и тот сервер, где запущен сам Beszel. Для этого в папке с Beszel достаточно будет выполнить:
docker compose down
docker compose up -d
Получаем вывод в консоли, который говорит об успешном запуске Beszel и агента мониторинга:
[+] Running 3/3
✔ Network beszel_default Created
✔ Container beszel Started
✔ Container beszel-agent Started
Теперь попробуем добавить новые устройства для мониторинга, ведь нам надо смотреть показатели не только там, где запущен веб-интерфейс инструмента Beszel. Предлагается два варианта: агент в Docker-контейнере и агент как бинарник в системе, который сам запускается, обновляется и работает. Звучит отлично, выбираем вкладку «Двоичный», даём имя устройству, указываем IP-адрес, нажимаем кнопку «Копировать команду Linux» и выполняем её уже на устройстве, которое собрались мониторить:

Получаем приблизительно такой вывод в консоли:
Creating a dedicated user for the Beszel Agent service...
Creating the directory for the Beszel Agent...
Downloading and installing the agent...
Downloading and installing agent version 0.9.1 from https://github.com ...
################################################################################################################################# 100.0% Creating the systemd service for the agent...
Loading and starting the agent service...
Created symlink /etc/systemd/system/multi-user.target.wants/beszel-agent.service → /etc/systemd/system/beszel-agent.service.
Would you like to enable automatic daily updates for beszel-agent? (y/n): y
Setting up daily automatic updates for beszel-agent...
Created symlink /etc/systemd/system/timers.target.wants/beszel-agent-update.timer → /etc/systemd/system/beszel-agent-update.timer.
Automatic daily updates have been enabled.
Beszel Agent has been installed successfully! It is now running on port 45876.
И новое устройство, которое мы поставили на мониторинг:

По аналогии добавляем все устройства, которые планируем мониторить. На этом этап установки и настройки утилиты заканчиваются.
Подключение уведомлений в Telegram из Beszel
А теперь бонус. Необходимый и полезный функционал, который мы добавим в нашу систему мониторинга, — алерты в Telegram. Ведь получать уведомления о проблемах в реальном времени полезнее, чем обнаруживать их позже на графиках. Это позволяет быстрее реагировать.
Создадим бот и подключим его к Beszel. Кстати, утилита уже поддерживает интеграцию с Shoutrrr, что упрощает подключение к популярным системам уведомлений и мессенджерам, включая Telegram.
Пишем в @BotFather для создания и управления своими ботами:
/newbot
Нам пишут, что нужно придумать имя бота. Пусть будет Beszel:
Beszel
Далее нужно выбрать имя пользователя для бота. Оно должно быть уникальным и заканчиваться на bot
. Например, TetrisBot
или tetris_bot
:
Beszel_valdemorte24_bot
Получаем необходимый токен, который нам потребуется для корректной работы уведомлений.
Done! Congratulations on your new bot. You will find it at t.me/Beszel_valdemorte24_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
7296956272:AAHSfJ_6oKBcrS5luUAGdzHw4USDGDGwe
Keep your token secure and store it safely, it can be used by anyone to control your bot.
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
Отлично! Мы создали бота, а теперь подключим его к Beszel и протестируем. Переходим в Настройки → Уведомления → Добавить URL. В ссылке потребуется также ваш ID (если не знаете его, то можно просто написать боту @userinfobot):

Вставляем ссылку вида telegram://<tg_bot_token>@telegram?chats=<your_tg_id>
и нажимаем «Тест URL». Сохраняем.

Отлично! Нам пришло уведомление в Telegram от бота:

Нам остаётся лишь настроить «порог срабатывания» уведомлений в Beszel. Делается это через колокольчик в списке хостов:

В дальнейшем мы будем получать от бота в канале алерты вида:

Примечание
Если вы планируете использовать Beszel с публичным IP-адресом и хотите быстро получать доступ к графикам по ссылке, отправляемой ботом, поменяйте IP-адрес своего сервера по адресу:
http://<your_ip>:8090/_/#/settings
.
Вывод
Мне понравилась реализация этой утилиты. Основная концепция «лёгкий мониторинг “из коробки”» здесь полностью раскрыта. Beszel справился с моими задачами по мониторингу устройств как в локальной сети, так и на виртуальных выделенных серверах (VDS) за её пределами. Теперь, когда возникают проблемы, я быстро получаю уведомления и оперативно решаю вопросы.
Этот инструмент отлично подходит для небольших инфраструктур или пет-проектов, где требуется базовый мониторинг и при этом не нужно глубоко разбираться в настройке метрик и создании дашбордов. Если вам хочется готовое решение для быстрого старта, Beszel станет хорошим выбором.
Если вы всё же работаете с большим количеством серверов или нужно расширять инфраструктуру, Beszel может столкнуться с проблемами масштабирования.
Судя по исходному коду, использование SQLite в качестве хранилища метрик становится «узким горлышком». Это приводит к трудностям с записью большого количества метрик одновременно из-за отсутствия параллельности, снижению скорости чтения и записи, а также к блокировке таблицы во время записи.
А ещё Beszel не поддерживает кастомные метрики. Если нужно отслеживать что-то, что не включено в стандартный набор, придётся дописывать код на Go, что может вызвать проблемы при обновлении. Хотя разработчик активно поддерживает проект, новые функции и метрики появляются довольно редко.
Ну и утилиты нет мощного языка запросов, подобного PromQL, что ограничивает возможности глубокого анализа метрик.
Для более крупных инфраструктур или в том случае, если требуется более глубокий анализ метрик, советую рассмотреть альтернативные решения. Конечно, первым на ум приходит Prometheus. Скажу кратко, как он может закрыть перечисленные выше минусы Beszel.
Prometheus использует оптимизированную базу данных временных рядов (TSDB), что позволяет ему масштабироваться за счёт федерации и хранить долгосрочные данные отдельно. Он предлагает широкий набор метрик для серверов и контейнеров, включая кастомные метрики. А ещё поддерживает глубокий анализ данных с помощью PromQL и позволяет, в отличие от Beszel, создавать кастомные алерты.
Кстати, мои коллеги из «Фланта» запустили свою систему мониторинга на базе Prometheus — Prom++. По сути, они взяли Prometheus и частично переписали его на C++, оптимизировав хранение данных так, что система потребляет до 9 раз меньше памяти, чем её предшественник.
Подробнее о Prom++ можно почитать в нашей статье. В ней мы рассказываем о том, как появилась идея инструмента, что уже получилось оптимизировать, какие результаты показывает наше решение по сравнению с Prometheus и VictoriaMetrics, а также о ближайших планах.
А попробовать Prom++ можно уже сейчас!
P. S.
Читайте также в нашем блоге: