Files
ProxmoxDash/README.md

24 KiB
Raw Permalink Blame History

Proxmox CPU Dashboard

Локальная веб-панель CPU для Proxmox. Данные читаются напрямую из /proc и /sys, без Proxmox API. Интерфейс обновляется каждые две секунды.

Установка для новичка — скопируйте команды целиком

Что потребуется

  • сервер Proxmox VE с доступом в интернет или к git.myown.center;
  • вход в консоль Proxmox под пользователем root;
  • IP-адрес Proxmox в локальной сети;
  • свободный TCP-порт 9105 между вашим компьютером и Proxmox.

Go, Node.js, Docker и отдельную базу данных устанавливать не нужно. Панель поставляется готовым Linux-бинарником, а SQLite встроен внутрь.

1. Подключитесь к Proxmox

На своём компьютере откройте Terminal и выполните команду, заменив IP на адрес своего Proxmox:

ssh root@192.168.0.10

Введите пароль root. Следующие команды выполняйте уже внутри Proxmox.

2. Установите панель

Скопируйте весь блок и вставьте его в консоль Proxmox:

apt-get update
apt-get install -y curl ca-certificates tar smartmontools iproute2 iputils-ping

cd /tmp
curl -fL \
  https://git.myown.center/maxim/ProxmoxDash/releases/download/latest/proxmox-dashboard-install-amd64.tar.gz \
  -o proxmox-dashboard-install-amd64.tar.gz

tar -xzf proxmox-dashboard-install-amd64.tar.gz
cd proxmox-dashboard-install
UPDATE_MODE=notify ./scripts/install.sh

Готово. Установщик сам:

  • положит бинарник в /usr/local/bin;
  • создаст локальную базу настроек и истории;
  • установит systemd-службу;
  • запустит панель;
  • настроит ежедневную проверку новых версий;
  • сохранит предыдущий бинарник при будущем обновлении.

3. Откройте панель

В браузере на своём компьютере откройте:

http://192.168.0.10:9105

Замените 192.168.0.10 на IP своего Proxmox. Узнать адрес можно командой:

hostname -I

4. Проверьте, что всё работает

systemctl --no-pager --full status proxmox-cpu-dashboard.service
curl -I http://127.0.0.1:9105

В статусе службы должно быть active (running), а локальная проверка должна вернуть HTTP-ответ 200 OK.

Как обновлять

В режиме notify, установленном командами выше, откройте в панели Настройки → Обновления и нажмите Проверить и установить обновление.

Если нужны полностью автоматические обновления, повторно запустите установщик:

cd /tmp/proxmox-dashboard-install
UPDATE_MODE=auto ./scripts/install.sh

Если репозиторий станет приватным

Создайте в Gitea токен только для чтения репозитория и передайте его установщику. Вместо текста ВАШ_ТОКЕН вставьте настоящий токен:

cd /tmp/proxmox-dashboard-install
GITEA_TOKEN='ВАШ_ТОКЕН' UPDATE_MODE=notify ./scripts/install.sh

Токен сохраняется на Proxmox с правами 0600 и не показывается в браузере.

Если страница не открывается

Выполните на Proxmox:

systemctl restart proxmox-cpu-dashboard.service
systemctl --no-pager --full status proxmox-cpu-dashboard.service
journalctl -u proxmox-cpu-dashboard.service -n 100 --no-pager
ss -lntp | grep 9105

Проверьте, что используете правильный IP, порт 9105 доступен из локальной сети, а firewall Proxmox не блокирует подключение. Панель пока не имеет авторизации — не публикуйте порт 9105 напрямую в интернет.


Панель показывает:

  • изменение критичных SMART-счётчиков, результаты self-test и исчезновение дисков;

  • realtime read/write IOPS, MB/s, latency, utilization и глубину очереди каждого диска;

  • недельную историю IOPS/utilization и алерты при устойчивом I/O-давлении;

  • вероятный источник I/O: VM/LXC, процесс хоста или активная backup/snapshot/migration-задача;

  • отдельные пороги HDD, SATA SSD и NVMe с исключениями по имени или серийному номеру;

  • недельные baseline-аномалии IOPS, latency, температуры, RAM, ZFS и длительности backup;

  • корреляцию связанных событий в одну причинно-следственную цепочку;

  • время первого появления и последнего наблюдения каждого уведомления;

  • автоматический короткий SMART self-test раз в неделю для дисков без свежего теста;

  • datasets, vdev-классы, ошибки read/write/checksum, scrub и ARC ZFS;

  • доступность шлюза, DNS и интернета, packet loss, latency и внешний IP;

  • тип, состояние, скорость, duplex и master сетевых интерфейсов;

  • состояние связи с NUT/apcupsd, возраст батареи и расчётную автономность UPS;

  • настраиваемый сценарий корректного выключения VM/LXC и Proxmox с безопасным dry-run;

  • самоконтроль сборщика, записи истории, свободного места базы и systemd watchdog;

  • модель и текущую загрузку CPU;

  • количество сокетов, физических ядер и логических потоков;

  • среднюю текущую частоту;

  • load average за 1, 5 и 15 минут;

  • uptime;

  • доступные аппаратные температуры.

  • использование RAM, доступную память, кэш, буферы и swap.

  • заполнение системного диска /;

  • список физических дисков, модель, серийный номер, SMART, температуру, наработку и доступные данные об износе;

  • текущую скорость и суммарные счётчики сетевого трафика.

  • состояние, заполнение, фрагментацию и scrub/resilver ZFS-пулов;

  • состояние UPS через NUT или apcupsd, заряд, автономность, нагрузку и напряжение.

  • состояние VM и LXC, CPU, память, выделенные ядра и uptime.

  • IP-адреса VM через QEMU Guest Agent, автозапуск, storage, заполнение диска и суммарный сетевой трафик гостей;

  • последнюю найденную резервную копию каждой VM/LXC, storage, размер и возраст.

  • версию Proxmox, запущенное и последнее установленное ядро, доступные обновления, необходимость перезагрузки, последнее обновление системы, ближайшие backup и ZFS scrub.

  • управляемый мониторинг HTTP/HTTPS, TCP и ping для homelab-сервисов: отклик, ожидаемый код и текст, TLS-сертификат, uptime за сутки и неделю;

  • ошибки systemd и ядра за 24 часа, упавшие службы, ошибки и drops каждого сетевого интерфейса.

  • snapshots VM/LXC с возрастом, описанием и доступным размером;

  • последние задачи Proxmox: backup, start/stop, snapshot, migration, пользователь, длительность и результат;

  • сравнение размера backup с предыдущей копией и ручную безопасную проверку читаемости локального архива или конфигурации PBS snapshot;

  • карту homelab: Proxmox, VM/LXC, сервисы и используемые storage.

Через кнопку настроек можно скрывать неиспользуемые карточки и переключать светлую или тёмную тему. Карточки можно переставлять перетаскиванием или стрелками в настройках. Видимость, порядок и тема сохраняются локально в браузере.

Центр уведомлений объединяет критические события, предупреждения и информационные сообщения по CPU, памяти, storage, SMART, ZFS, UPS, VM/LXC и резервным копиям. Критические события всегда отображаются первыми.

Во вкладке Настройки → Почта настраиваются SMTP-сервер, получатель и интервал агрегированной сводки. Можно отдельно выбрать уровни важности и источники событий — например, полностью исключить уведомления о резервных копиях. Там же доступна отправка тестового письма. Поддерживаются STARTTLS (обычно порт 587) и SMTP поверх TLS (порт 465).

Тема письма кодируется по MIME и корректно отображает кириллицу. Сам дайджест оформлен как HTML-письмо и содержит только новые неподтверждённые события — уже отправленные или принятые события повторно не рассылаются. В центре уведомлений есть вкладки активных событий и 30-дневной истории. Кнопка Принято скрывает событие из активных, не удаляя его из журнала; повторное возникновение проблемы создаёт новое событие.

Критические события отправляются сразу, не ожидая очередной сводки. К ним относятся недоступность сервиса, отказ SMART/ZFS/systemd, критический перегрев и низкий заряд UPS. Переход UPS на батарею также отправляется немедленно. После устранения уже отправленной проблемы приходит отдельное уведомление о восстановлении.

Пороги уведомлений сохраняются в SQLite и настраиваются через вкладку Настройки → Уведомления. Панель раз в минуту сохраняет историю CPU, температуры, памяти, swap, сети, storage, ZFS, UPS и гостей. Данные старше семи дней удаляются автоматически. В подробных окнах карточек текущие показатели и история разделены на вкладки. Для графиков можно выбрать последний час, 24 часа или 7 дней, а точные значения и время отображаются при наведении.

База данных по умолчанию находится здесь:

/var/lib/proxmox-dashboard/dashboard.db

Готовые версии для Linux публикуются в разделе Releases репозитория. Бинарник не требует установки Go или системной библиотеки SQLite.

Проверка обновлений выполняется отдельным systemd-таймером раз в сутки. Статус виден во вкладке Настройки → Обновления и в центре уведомлений. Доступны два режима: notify только сообщает о новой версии, auto скачивает её, сохраняет предыдущий бинарник как резервный и перезапускает панель. В режиме notify обновление можно запустить кнопкой Проверить и установить обновление в настройках. Запрос выполняет отдельная системная служба.

На главном экране находятся компактные карточки CPU, памяти, диска и сети. Нажатие на карточку открывает подробные показатели.

Быстрый запуск

Скопируйте dist/proxmox-cpu-dashboard-linux-amd64 на Proxmox, затем:

chmod +x proxmox-cpu-dashboard-linux-amd64
./proxmox-cpu-dashboard-linux-amd64

Установка на сервер и обновления

Скачайте из Releases архив proxmox-dashboard-install-amd64.tar.gz, распакуйте его на Proxmox и запустите от root:

tar -xzf proxmox-dashboard-install-amd64.tar.gz
cd proxmox-dashboard-install
UPDATE_MODE=notify ./scripts/install.sh

Для полностью автоматических обновлений используйте UPDATE_MODE=auto. Приватному репозиторию нужен read-only API-токен Gitea:

GITEA_TOKEN='read-only-token' UPDATE_MODE=auto ./scripts/install.sh

Токен сохраняется с правами 0600 в /etc/proxmox-dashboard/update.env. Проверить обновления вручную можно командой:

systemctl start proxmox-dashboard-update.service
systemctl status proxmox-dashboard-update.service

Откройте:

http://192.168.0.10:9105

Установка как службы

install -m 0755 proxmox-cpu-dashboard-linux-amd64 /usr/local/bin/proxmox-cpu-dashboard
install -m 0644 proxmox-cpu-dashboard.service /etc/systemd/system/proxmox-cpu-dashboard.service
systemctl daemon-reload
systemctl enable --now proxmox-cpu-dashboard
systemctl status proxmox-cpu-dashboard

По умолчанию панель слушает порт 9105 на всех интерфейсах. Другой адрес можно задать переменной DASHBOARD_ADDR, например 127.0.0.1:9105.

На веб-сервере пока нет авторизации. Не открывайте порт 9105 в интернет.

Для SMART-метрик на Proxmox должен быть установлен пакет smartmontools:

apt update
apt install -y smartmontools

Без него список дисков и их паспортные данные продолжат отображаться, а SMART будет отмечен как недоступный.

Проверить исходные SMART-данные вручную:

smartctl -x /dev/sda
smartctl -x -j /dev/sda
smartctl -x /dev/nvme0n1

У HDD обычно нет показателя износа в процентах. Для NVMe используется Percentage Used, а для SATA SSD — поддерживаемые накопителем атрибуты ресурса. Если производитель не публикует такой атрибут, панель корректно показывает .

UPS

Панель автоматически пробует получить данные через NUT (upsc), затем через apcaccess. Для проверки NUT:

upsc -l
upsc ИМЯ_UPS

Для проверки apcupsd:

apcaccess status

API

  • GET /api/cpu — один JSON-снимок.
  • GET /api/system — единый JSON-снимок CPU и памяти.
  • GET /api/events — поток метрик SSE с интервалом две секунды.
  • GET/POST/PUT/DELETE /api/services — управление проверками сервисов.
  • GET /api/services/history — семидневная история доступности и отклика.
  • GET/PUT/DELETE /api/settings/maintenance — состояние, запуск и досрочное завершение плановых работ.
  • GET/DELETE /api/agents — подключённые гостевые агенты.
  • POST /api/agents/enrollment-token — одноразовый токен регистрации на 15 минут.

Maintenance-режим

Во вкладке Настройки → Maintenance можно на заданное время отключить все алерты либо выбрать конкретные сервисы и VM/LXC. Подавленные события не отправляются по почте и не отображаются как активные, но сохраняются в истории с причиной плановых работ. После окончания окна обычный мониторинг включается автоматически.

Агенты VM и LXC

Read-only агент показывает состояние Linux внутри VM/LXC: CPU, load average, память, корневой раздел, uptime, ОС, ядро, IP-адреса, systemd-службы, доступные APT-обновления и необходимость перезагрузки. Для Docker отображаются контейнеры, health-check, число перезапусков, CPU и память. Агент сам подключается к Dashboard каждые 10 секунд; открывать входящий порт внутри гостевой системы не нужно.

В подробностях агента systemd-службы разделяются на системные, установленные дополнительно и локальные unit-файлы. Для каждой службы показываются пакет и путь unit-файла, время запуска, число перезапусков, последний exit code, память и накопленное CPU-время, когда соответствующий accounting доступен в systemd.

Расширенная диагностика агента включает последние сообщения проблемных служб, Requires/After, PID, команду запуска и слушающие порты; выявляет частые рестарты, OOM-kill и процессы в D-state. Отдельно отображаются top процессов по CPU и RAM с накопленным I/O, swap, PSI pressure, все постоянные файловые системы, их заполнение и использование inode.

Панель «Диагностика homelab» и карта сопоставляют известные IP и порты с VM/LXC, агентом, systemd-службой или Docker-контейнером и настроенной HTTP/TCP-проверкой. Связи по PID и порту считаются подтверждёнными; совпадения только по названию помечаются как предположение.

Для сложных reverse proxy и Docker-сетей в управлении сервисами можно сохранить ручную связь сервис → агент/VMID → systemd/Docker/процесс → порт. Она имеет приоритет над автоматическим определением и используется для группировки связанных уведомлений по первопричине.

Dashboard хранит семь дней истории CPU, RAM, swap, PSI и файловых систем каждого агента. Из подробностей агента доступны только заранее разрешённые действия: перезапуск известной systemd-службы или Docker-контейнера, reset-failed и обновление списка пакетов. Агент не принимает произвольные shell-команды; каждое действие требует подтверждения в браузере и сохраняется в журнале управления.

Откройте Настройки → Агенты, укажите адрес Dashboard, доступный из VM/LXC, и VMID. Кнопка создаст готовую команду установки. Одноразовый токен действует 15 минут и после регистрации заменяется индивидуальным секретом агента.

После однократной установки агент обновляется автоматически вслед за Dashboard. Центральный сервер отдаёт агенту собственный бинарник и SHA-256; агент проверяет контрольную сумму, атомарно заменяет файл и перезапускается через systemd. Если агент был удалён из Dashboard, повторная команда с новым токеном автоматически выполнит новую регистрацию.

В первой версии агент не выполняет команды и не перезапускает службы или контейнеры. Для чтения Docker ему требуется доступ к /var/run/docker.sock, поэтому служба устанавливается от root. Сам Dashboard пока не имеет авторизации: используйте локальную сеть или HTTPS через доверенный reverse proxy и не публикуйте агентские API напрямую в интернет.

Полностью удалить агент из VM/LXC:

curl -fsSL https://git.myown.center/maxim/ProxmoxDash/raw/branch/main/scripts/uninstall-agent.sh | sh

Оформление, пороги, почта и обновления Dashboard находятся в обычных настройках. Рабочие инструменты — сервисы, агенты, плановые работы и UPS-сценарий — вынесены в отдельный раздел Управление в шапке Dashboard.

Сборка

go test ./...
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o proxmox-cpu-dashboard .