<p>Поднял кластер Proxmox. Три ноды, десяток VM, бэкапы на PBS. И ноль видимости — что происходит внутри, узнаёшь только когда пользователи пишут «у нас всё лежит». Знакомо? Мониторинг <a class="wpil_keyword_link" title="Виртуализация" href="https://it-apteka.com/category/virtualise/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3243">Proxmox</a> через Pulse закрывает эту дыру одной командой в терминале, без Zabbix, без агентов на каждой ноде, без недели настройки.</p>
<p>Эта статья написана как рабочий рецепт, а не как обзор функций с сайта разработчика. Разберём три способа установки, создание безопасного read-only токена, подключение алертов и реальные ошибки, с которыми сталкиваются при первом запуске — включая ту самую 401, из-за которой половина issue-трекера проекта на GitHub.</p>
"Быстрый
<br />
Pulse — это бесплатный self-hosted <a class="wpil_keyword_link" title="Мониторинг" href="https://it-apteka.com/category/monitoring/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3240">мониторинг</a> для Proxmox VE, PBS и PMG с веб-дашбордом в реальном времени. Разворачивается за один <a class="wpil_keyword_link" title="Docker" href="https://it-apteka.com/tag/docker/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3241">Docker</a>-контейнер или LXC-скрипт, не требует агентов на нодах Proxmox — работает через штатный API. Показывает CPU, RAM, диски, статус бэкапов, ZFS/Ceph и умеет слать алерты в <a class="wpil_keyword_link" title="Telegram" href="https://t.me/it_apteka_com/34" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3244">Telegram</a>, Discord, Slack и почту. Ставится за 10-15 минут, конфиг — три файла.<br />
<h2>1. Диагноз: почему штатных средств Proxmox не хватает</h2>
<p>Веб-интерфейс Proxmox показывает состояние ноды, на которой ты сейчас сидишь. Хочешь глянуть кластер целиком — открывай пять вкладок. Хочешь узнать, что бэкап на PBS не отработал третью ночь подряд — иди и смотри логи руками. Никаких алертов из коробки, никакой истории метрик дольше суток, никакого единого экрана на все ноды.</p>
<p>Штатный график RRD в Proxmox хранит точки с шагом в минуту только за последний час, дальше идёт усреднение, и разовый скачок нагрузки в 3 часа ночи ты просто не увидишь на графике за неделю. А именно ночные скачки и роняют продакшн — днём кто-то что-то поменял, ночью оно выстрелило, и виноватого искать по памяти.</p>
<p>Тут в игру входит поведенческий момент, который касается не только SEO, но и реальной эксплуатации: чем позже ты узнал о проблеме, тем дороже её решение. <a title="Relay Gunicorn для алертов через Telegram: настройка с нуля и подключение Zabbix, Grafana, CrowdSec, The Dude" href="https://it-apteka.com/relay-gunicorn-dlja-alertov-cherez-telegram-nastrojka-s-nulja-i-podkljuchenie-zabbix-grafana-crowdsec-the-dude/" target="_blank" rel="noopener" data-wpil-monitor-id="3253">Алерт в Telegram</a> за 20 минут до полного отказа диска — это плановая замена. Тот же диск, найденный постфактум по жалобам пользователей — это восстановление из бэкапа и разбор полётов с начальством.</p>
<p>Из практики: кластер на три ноды, ZFS-пул на одной из них незаметно уходил в DEGRADED почти неделю. Никто не смотрел — зачем, всё же работает. Работало ровно до момента, пока не отвалился второй диск в зеркале, и тогда работать перестало резко и полностью. Пять минут настройки алерта на статус пула сэкономили бы сутки восстановления из бэкапа. Такие истории и есть причина, почему мониторинг ставят не «когда будет время», а сразу после установки гипервизора.</p>
<p>Дальше в статье:</p>
<ul>
<li>что Pulse умеет и чем отличается от Zabbix и Checkmk</li>
<li>три способа установки — LXC-скрипт, Docker, ручной install.sh</li>
<li>настройка мониторинг-пользователя и API-токена в Proxmox без лишних прав</li>
<li>подключение алертов и push-режима для изолированного PBS</li>
<li><a title="Резервное копирование MikroTik RouterOS 7 в Telegram: рабочий скрипт и разбор ошибок" href="https://it-apteka.com/rezervnoe-kopirovanie-mikrotik-routeros-7-v-telegram-avtomatizacija-za-20-minut/" target="_blank" rel="noopener" data-wpil-monitor-id="3250">разбор реальных ошибок</a> 401/403 при подключении токена</li>
<li>чем закрыть мониторинг Docker и Kubernetes рядом с Proxmox</li>
</ul>
<p>Время на установку — 15 минут. Время на полную настройку с алертами и бэкапом конфига — час, если не отвлекаться на кофе. Хотя кофе всё равно налей, разговор долгий.</p>
<h2>2. Причины взяться за Pulse, а не городить Zabbix ради трёх нод</h2>
<table>
<tbody>
<tr>
<th>Причина</th>
<th>Почему это важно</th>
</tr>
<tr>
<td>Нет агентов на гипервизоре</td>
<td>Pulse ходит в штатный API Proxmox (порт 8006), ничего не ставится на сами ноды — меньше риска что-то сломать на проде</td>
</tr>
<tr>
<td>Установка за одну команду</td>
<td>Docker-контейнер или готовый LXC-скрипт из community-scripts — не нужен отдельный сервер под мониторинг-стек</td>
</tr>
<tr>
<td>Ресурсы почти не расходует</td>
<td>Опрос останавливается, когда нет открытых вкладок с дашбордом — в отличие от Zabbix, который крутится постоянно</td>
</tr>
<tr>
<td>Понимает специфику Proxmox</td>
<td>Видит кластерное членство, Ceph MON/MGR, статус бэкапов PBS, ZFS-пулы — общий SNMP-мониторинг это либо не покажет, либо покажет криво</td>
</tr>
<tr>
<td>Push-режим для изолированного PBS</td>
<td>Если PBS сидит за файрволом без входящих соединений, Pulse умеет получать метрики от него, а не только опрашивать</td>
</tr>
<tr>
<td>Живое сообщество и частые релизы</td>
<td>Проект активно развивается, баги вроде проблем с токенами закрываются за недели, а не годами как в мёртвых форках</td>
</tr>
</tbody>
</table>
<p>Есть нюанс. Pulse — это соло-проект одного разработчика (Richard Courtman), MIT-лицензия, бесплатный self-hosted тир полнофункционален для базового мониторинга. Платный Pulse Pro добавляет AI-патрули и авто-фиксы — для домашнего кластера или небольшого прода это не обязательно.</p>
<p>По цифрам из практики пользователей проекта: инстанс Pulse в LXC на 2 ядрах и полсотни отслеживаемых устройств держится в единицах процентов CPU в простое, рост нагрузки заметен только при большом количестве одновременно открытых вкладок дашборда у разных людей. Для сравнения, Zabbix-сервер с СУБД под капотом на том же количестве хостов обычно требует отдельную VM с 2+ ГБ RAM только под сам сервер, не считая агентов.</p>
<h3>Как это устроено изнутри</h3>
<p>Бэкенд написан на Go, фронтенд — на SolidJS. Это не праздное любопытство: связка даёт низкое потребление памяти и быстрый холодный старт контейнера — секунды, а не десятки секунд как у стека на Java. Каждая нода Proxmox опрашивается в своей горутине через штатный REST API, без блокировки друг друга: упала связь с одной нодой — остальные продолжают опрашиваться штатно.</p>
<p>Для Docker, Kubernetes и TrueNAS в версии 6 добавили отдельный механизм — лёгкие агенты сами отправляют метрики на Pulse POST-запросом, а не ждут, пока их опросят. Для Proxmox это не нужно: штатного API достаточно, агент на гипервизор ставить не придётся вообще.</p>
<h3>Сравнение с ближайшими конкурентами</h3>
<table>
<tbody>
<tr>
<th>Критерий</th>
<th>Pulse</th>
<th>Zabbix</th>
<th>Checkmk</th>
<th>Grafana+Prometheus</th>
</tr>
<tr>
<td>Время на первую установку</td>
<td>10-15 минут</td>
<td>1-2 часа</td>
<td>1-2 часа</td>
<td>2-4 часа</td>
</tr>
<tr>
<td>Агент на нодах Proxmox</td>
<td>Не нужен, API-only</td>
<td>Нужен или SNMP</td>
<td>Нужен или API-плагин</td>
<td>Нужен exporter</td>
</tr>
<tr>
<td>Понимание специфики Proxmox (Ceph, ZFS, PBS)</td>
<td>Из коробки</td>
<td>Через шаблоны сообщества</td>
<td>Через плагины</td>
<td>Через сторонний pve-exporter</td>
</tr>
<tr>
<td>Ресурсы под сам сервер мониторинга</td>
<td>~512 МБ RAM</td>
<td>2+ ГБ RAM, СУБД отдельно</td>
<td>2+ ГБ RAM</td>
<td>2+ ГБ RAM на три компонента</td>
</tr>
<tr>
<td>Мониторинг за пределами Proxmox (Docker, K8s)</td>
<td>Есть в v6</td>
<td>Есть, универсальный</td>
<td>Есть, универсальный</td>
<td>Есть, универсальный</td>
</tr>
<tr>
<td>Лицензия / стоимость</td>
<td>MIT, бесплатно, Pro — платно</td>
<td>Бесплатно (GPL)</td>
<td>Есть бесплатная и Enterprise</td>
<td>Бесплатно</td>
</tr>
</tbody>
</table>
<p>Ну и запросы у вас — сказала бы база данных Zabbix, если бы её пытались поднять ради мониторинга трёх нод в домашней лаборатории. Для этого масштаба — явный перебор.</p>
<p>Итог по выбору простой. Три-пятнадцать нод, только Proxmox-экосистема, хочется результат за вечер — Pulse. Смешанная инфраструктура с сетевым оборудованием, принтерами и серверами на других гипервизорах вперемешку — универсальный инструмент вроде Zabbix или Checkmk отработает свои деньги и время на внедрение.</p>
<h2>3. Рецепт: разворачиваем Pulse и подключаем Proxmox</h2>
<h3>3.1. Что нужно до старта</h3>
<table>
<tbody>
<tr>
<th>Компонент</th>
<th>Минимальная версия</th>
<th>Комментарий</th>
</tr>
<tr>
<td>Proxmox VE</td>
<td>7.0+</td>
<td>Для PBS — версия 2.0+</td>
</tr>
<tr>
<td>ОС для самого Pulse</td>
<td><a class="wpil_keyword_link" title="Debian" href="https://it-apteka.com/tag/debian/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3246">Debian</a> 11+ / Ubuntu 22.04+</td>
<td>Подходит отдельная LXC на 512 МБ RAM</td>
</tr>
<tr>
<td>Docker (если выбираешь этот способ)</td>
<td>20.10+</td>
<td>Docker Compose — опционально</td>
</tr>
<tr>
<td>Сеть</td>
<td>—</td>
<td>Доступ до портов 8006 (PVE API) и 8007 (PBS API)</td>
</tr>
</tbody>
</table>
<p>На момент публикации актуальна версия Pulse v6.1.2. Перед установкой проверь свежие релизы на <a href="https://github.com/rcourtman/Pulse/releases" target="_blank" rel="nofollow noopener">странице GitHub</a> — проект обновляется часто, и в v6 добавили унифицированный мониторинг Docker, Kubernetes и TrueNAS в одном окне.</p>
<h4>Таблица портов</h4>
<table>
<tbody>
<tr>
<th>Порт</th>
<th>Протокол</th>
<th>Назначение</th>
<th>Доступен снаружи?</th>
</tr>
<tr>
<td>7655</td>
<td>HTTP/HTTPS</td>
<td>Веб-интерфейс Pulse</td>
<td>Нет, только из локальной <a class="wpil_keyword_link" title="Сети" href="https://it-apteka.com/category/networks/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3242">сети</a> или через VPN</td>
</tr>
<tr>
<td>8006</td>
<td>HTTPS</td>
<td>API Proxmox VE, который опрашивает Pulse</td>
<td>Нет, только для хоста с Pulse</td>
</tr>
<tr>
<td>8007</td>
<td>HTTPS</td>
<td>API Proxmox <a class="wpil_keyword_link" title="Резервное копирование" href="https://it-apteka.com/category/rezervnoe-kopirovanie/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3245">Backup</a> Server</td>
<td>Нет, только для хоста с Pulse (или push-режим в обратную сторону)</td>
</tr>
</tbody>
</table>
<h3>3.2. Способ A — LXC-контейнер (самый быстрый)</h3>
<p>Если у тебя уже есть Proxmox-хост и не хочется поднимать отдельную VM — запускай прямо из консоли Proxmox. Скрипт из community-scripts создаст LXC, поставит Pulse и сразу подскажет следующий шаг.</p>
<pre><code class="language-bash">
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/pulse.sh)"
</code></pre>
<p>Результат: новая LXC-контейнер с работающим Pulse на порту 7655. Скрипт спросит про диск, RAM и CPU — для мониторинга 3-10 нод хватит 1 vCPU и 512 МБ RAM.</p>
<h3>3.3. Способ B — Docker (если уже есть Docker-хост)</h3>
<p>Не перепутай образ — официальный называется <code>rcourtman/pulse</code>, без кириллицы и лишних форков.</p>
<pre><code class="language-bash">
docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
--restart unless-stopped \
rcourtman/pulse:latest
</code></pre>
<p>Хочешь сразу задать логин и пароль без экрана первичной настройки — добавь переменные окружения:</p>
<pre><code class="language-bash">
docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
-e PULSE_AUTH_USER="admin" \
-e PULSE_AUTH_PASS="СложныйПароль123" \
--restart unless-stopped \
rcourtman/pulse:latest
</code></pre>
<p>Результат: контейнер поднят, <code>docker ps</code> показывает статус <code>Up</code>, порт 7655 слушает.</p>
<p>Если предпочитаешь <a title="Docker Compose — установка, команды и настройка контейнеров" href="https://it-apteka.com/docker-compose-ustanovka-komandy-i-nastrojka-kontejnerov/" target="_blank" rel="noopener" data-wpil-monitor-id="3249">Docker Compose — не переписывай команду</a> руками каждый раз при обновлении, держи конфиг в файле:</p>
<pre><code class="language-text">
services:
pulse:
image: rcourtman/pulse:latest
container_name: pulse
restart: unless-stopped
ports:
- "7655:7655"
volumes:
- pulse_data:/data
environment:
- PULSE_AUTH_USER=admin
- PULSE_AUTH_PASS=СложныйПароль123
volumes:
pulse_data:
</code></pre>
<pre><code class="language-bash">
docker compose up -d
</code></pre>
<p>Результат: та же одна строка в логах при старте, но обновление теперь — это <code>docker compose pull && docker compose up -d</code>, без переписывания флагов вручную.</p>
<h3>3.4. Способ C — ручная установка (для существующей VM/LXC)</h3>
<pre><code class="language-bash">
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | sudo bash
</code></pre>
<p>Скрипт сам определит систему, поставит systemd-юнит и запустит сервис. Дальше открывай <code>http://IP-сервера:7655</code> в браузере — увидишь мастер первичной настройки.</p>
<p>Этот способ выбирай, если у тебя уже есть выделенная VM или LXC под служебные сервисы и не хочется тащить туда <a title="Автоматическое обновление Docker контейнеров: полное руководство и примеры" href="https://it-apteka.com/avtomaticheskoe-obnovlenie-docker-kontejnerov-polnoe-rukovodstvo-i-primery/" target="_blank" rel="noopener" data-wpil-monitor-id="3248">Docker ради одного контейнера</a>. Из минусов — обновления придётся гонять тем же install.sh вручную, Docker в этом смысле немного удобнее для CI/CD-подхода к апдейтам.</p>
<p>Какой из трёх способов выбрать? Если Proxmox один и мониторинг нужен «здесь и сейчас» — LXC-скрипт из способа A. Если уже есть Docker-хост под другие сервисы — способ B, туда же в Compose. Способ C — для тех, кто принципиально не любит контейнеры и держит всё голыми systemd-юнитами.</p>
<h3>3.5. Создаём отдельного пользователя для мониторинга в Proxmox</h3>
<p>Вот тут важно не полениться. Root-токен с полным доступом — это удобно ровно до первого инцидента с утечкой конфига. Заводи отдельного read-only пользователя.</p>
<pre><code class="language-bash">
# Пользователь в realm pve (не pam - чтобы не плодить системных юзеров)
pveum user add pulse-monitor@pve --comment "Read-only monitoring for Pulse"
# Роль на основе PVEAuditor - Pulse хватает только чтения
pveum aclmod / -user pulse-monitor@pve -role PVEAuditor
# Токен БЕЗ privilege separation - иначе токен получит пустые права
pveum user token add pulse-monitor@pve pulse-token --privsep 0
</code></pre>
<p>Результат последней команды — вывод с полем <code>value</code>, это и есть секрет токена. Скопируй сразу, второй раз Proxmox его не покажет.</p>
"Не
<br />
Самая частая причина ошибки 401 при первом подключении — токен создан с privilege separation по умолчанию. У токена тогда свой пустой набор прав, независимый от прав пользователя. Флаг —privsep 0 обязателен, если не настраиваешь права на токен отдельно.<br />
<p>Почему именно PVEAuditor, а не что-то шире? Роль даёт доступ на чтение ко всему, что нужно мониторингу: статусы нод, VM, контейнеров, хранилищ, задач бэкапа. Прав на запуск, остановку или изменение конфигурации у неё нет физически — даже если токен утечёт, максимум что получит атакующий это список твоей инфраструктуры, а не рычаг для её поломки. Для мониторинга это ровно тот минимум привилегий, который нужен и не больше.</p>
<h3>3.6. Подключаем ноду Proxmox в веб-интерфейсе Pulse</h3>
<p>Открывай Pulse → Settings → Add Node → Proxmox VE и заполняй поля: адрес хоста с портом 8006, имя пользователя в формате <code>pulse-monitor@pve!pulse-token</code>, и значение токена. Отдельно — если ноды в кластере, Pulse обнаружит остальные автоматически после подключения первой.</p>
<pre class="mermaid">%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Proxmox VE нода"] --> B["API порт 8006"]
C["Proxmox Backup Server"] --> D["API порт 8007"]
B --> E["Pulse сервер"]
D --> E
E --> F["Веб-дашборд 7655"]
E --> G["Алерты Telegram Discord Email"]
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style C fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style E fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style G fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
</pre>
<p>Для изолированного PBS без входящих соединений есть push-режим: PBS сам присылает метрики на Pulse по расписанию, входящий доступ на 8007 не нужен вообще. Настраивается отдельным ключом в разделе PBS → Push Mode документации проекта.</p>
<p>Вот как выглядит цикл опроса на уровне протокола — полезно держать в голове, когда разбираешь логи и не понимаешь, откуда взялась задержка в дашборде:</p>
<pre class="mermaid">%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#f8fafc',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'noteBkgColor': '#fefce8',
'noteTextColor': '#713f12',
'noteBorderColor': '#fbbf24',
'actorBkg': '#f8fafc',
'actorBorder': '#94a3b8',
'actorTextColor': '#1e293b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'sequence': {
'mirrorActors': false,
'messageAlign': 'center',
'actorMargin': 120,
'width': 160,
'noteMargin': 12
}
}}%%
sequenceDiagram
participant U as Браузер
participant P as Pulse сервер
participant N as Proxmox нода
U->>P: Открыл дашборд
P->>N: Запрос по API токену
N->>P: JSON со статусом и метриками
P->>U: Обновление графиков
Note over P,N: Опрос останавливается без открытых вкладок
</pre>
<h3>Что появится на дашборде после подключения</h3>
<p>Сразу после первого успешного опроса на главном экране Pulse появляются карточки по каждой ноде: загрузка CPU, использование RAM, состояние дисков и уже смонтированных хранилищ. Отдельная вкладка сводит все VM и LXC-контейнеры кластера в один список с фильтром по статусу — running, stopped, paused — и по ноде, на которой они крутятся.</p>
<p>Вкладка Storage показывает не только процент заполнения, но и тип хранилища — ZFS, LVM-thin, директория — с отдельным индикатором для ZFS-пулов: ONLINE, DEGRADED, FAULTED. Именно этот индикатор и не даст повторить историю про неделю в DEGRADED из раздела диагноза выше.</p>
<p>Вкладка Backups подтягивает задачи из PBS или встроенного vzdump и показывает время последнего успешного запуска по каждой VM отдельно. Если бэкап конкретной машины не отрабатывал дольше заданного порога — карточка подсвечивается, и по ней же настраивается алерт из раздела про уведомления ниже.</p>
<table>
<tbody>
<tr>
<th>Вкладка дашборда</th>
<th>Что показывает</th>
<th>На что смотреть в первую очередь</th>
</tr>
<tr>
<td>Nodes</td>
<td>CPU, RAM, load average, температура (если доступна)</td>
<td>Устойчивый рост load average без соответствующего роста CPU — признак I/O-ожидания</td>
</tr>
<tr>
<td>Guests (VM/LXC)</td>
<td>Статус, потребление ресурсов, нода размещения</td>
<td>Гости в статусе paused дольше нескольких минут — обычно забытая миграция</td>
</tr>
<tr>
<td>Storage</td>
<td>Заполнение, тип, состояние ZFS/Ceph</td>
<td>Статус DEGRADED или заполнение выше 85%</td>
</tr>
<tr>
<td>Backups</td>
<td>Время последнего успешного/неуспешного job</td>
<td>Возраст последнего успешного бэкапа больше суток</td>
</tr>
</tbody>
</table>
<h3>3.7. HTTPS через reverse proxy</h3>
<p>Штатный веб-интерфейс Pulse отдаёт HTTP на 7655. Если планируешь заходить не только из локальной сети — повесь nginx с сертификатом впереди, не открывай 7655 напрямую наружу.</p>
<pre><code class="language-text">
server {
listen 443 ssl;
server_name pulse.example.local;
ssl_certificate /etc/letsencrypt/live/pulse.example.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pulse.example.local/privkey.pem;
location / {
proxy_pass http://127.0.0.1:7655;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
</code></pre>
<p>Заголовки Upgrade и Connection нужны обязательно — дашборд Pulse держит вебсокет для живого обновления метрик, без них графики будут замирать и обновляться только по F5.</p>
<h3>3.8. Тюнинг интервала опроса и хранения истории</h3>
<p>По умолчанию Pulse опрашивает ноды каждые несколько секунд, пока открыт хотя бы один клиент дашборда. Для трёх-пяти нод это ни на что не влияет. Для кластера в 20+ нод с сотнями VM разумно увеличить интервал и ограничить глубину хранения истории — иначе диск под /data начнёт расти быстрее, чем ты успеешь настроить ротацию.</p>
<pre><code class="language-text">
# Settings -> General -> Polling & Storage
polling_interval_seconds: 15
metrics_retention_days: 30
</code></pre>
<p>Результат: меньше нагрузка на API Proxmox от постоянных запросов, дашборд обновляется чуть реже, зато сервер под Pulse не упирается в диск через месяц эксплуатации. Баланс простой: чем крупнее кластер, тем длиннее интервал — секундная точность нужна на пяти нодах, а не на пятидесяти.</p>
<h3>3.9. Настройка алертов</h3>
<p>Settings → Notifications → добавляешь канал. Поддерживаются Telegram, Discord, Slack, email и вебхуки. Порог по CPU/RAM/диску задаётся в процентах, порог по бэкапам — в часах с момента последнего успешного job.</p>
<pre><code class="language-text">
# Пример настройки алерта в конфиге Pulse (Settings -> Alerts)
threshold_cpu_percent: 90
threshold_memory_percent: 85
threshold_disk_percent: 90
backup_stale_hours: 26
notify_channels: [telegram, email]
</code></pre>
<h2>4. Проверка: убеждаемся что мониторинг реально работает</h2>
<pre><code class="language-bash">
# Статус сервиса при ручной установке
systemctl status pulse
# Статус контейнера при установке через Docker
docker ps --filter name=pulse
# Логи, если что-то не так
docker logs -f pulse
# или
journalctl -u pulse -f
# Проверка что API Proxmox отвечает на токен
curl -k -H "Authorization: PVEAPIToken=pulse-monitor@pve!pulse-token=ТВОЙ-СЕКРЕТ" \
https://IP-ноды:8006/api2/json/nodes
</code></pre>
<p>Если последняя команда вернула JSON со списком нод, а не ошибку — токен рабочий, дальше проблема если что уже на стороне Pulse, не Proxmox. Открой дашборд, нода должна появиться в списке за 10-30 секунд после первого опроса.</p>
<h2>5. Осложнения: разбор реальных ошибок</h2>
<table>
<tbody>
<tr>
<th>Ошибка</th>
<th>Причина</th>
<th>Решение</th>
</tr>
<tr>
<td>401 Unauthorized при добавлении ноды</td>
<td>Токен создан с privilege separation, у него пустые права</td>
<td>Пересоздай токен с флагом —privsep 0, либо назначь права токену отдельно через ACL</td>
</tr>
<tr>
<td>403 Permission check failed на /nodes/…/status</td>
<td>Роль назначена не на корневой путь /, а на конкретный узел без propagate</td>
<td>Выполни pveum aclmod / -user pulse-monitor@pve -role PVEAuditor на корень дерева</td>
</tr>
<tr>
<td>Нода «unreachable» в логах Pulse</td>
<td>Файрвол блокирует порт 8006 между хостом Pulse и Proxmox</td>
<td>Проверь curl -k https://IP:8006 с хоста Pulse, открой порт в UFW/iptables</td>
</tr>
<tr>
<td>Самоподписанный сертификат рвёт соединение</td>
<td>Proxmox по умолчанию ставит self-signed сертификат</td>
<td>В <a title="DNS over TLS: настройка DoT на Android, Keenetic и в Nulls Proxy" href="https://it-apteka.com/dns-over-tls-nastrojka-dot-na-android-keenetic-i-v-nulls-proxy/" target="_blank" rel="noopener" data-wpil-monitor-id="3252">настройках ноды в Pulse включи «Skip TLS</a> verification» или подставь свой сертификат</td>
</tr>
<tr>
<td>Высокая нагрузка CPU от Pulse на слабом хосте</td>
<td>Открыто много вкладок дашборда, включён polling с коротким интервалом</td>
<td>Увеличь интервал опроса в Settings → Polling, закрывай неиспользуемые вкладки</td>
</tr>
<tr>
<td>Pulse спамит системный лог Proxmox</td>
<td>Известное поведение при частом опросе API — фиксируется в syslog каждой ноды</td>
<td>Обнови до последней стабильной версии, за последние релизы это заметно поправили</td>
</tr>
<tr>
<td>Токен для одного кластера не работает на другом</td>
<td>Каждая независимая установка Proxmox требует свой токен</td>
<td>Создавай отдельный токен под каждый кластер, для нод внутри одного кластера токен реплицируется сам</td>
</tr>
<tr>
<td>Графики в дашборде не двигаются без перезагрузки страницы</td>
<td>Reverse proxy не пробрасывает вебсокет-заголовки Upgrade/Connection</td>
<td>Добавь proxy_set_header Upgrade и Connection «upgrade» в конфиг nginx, как в примере выше</td>
</tr>
<tr>
<td>После обновления Pulse не стартует, в логах ошибка миграции данных</td>
<td>Обновление пропустило промежуточную мажорную версию</td>
<td>Ставь версии по порядку через —version в install.sh, не перепрыгивай через v5 сразу на v6, если долго не обновлялся</td>
</tr>
<tr>
<td>Автоустановочный <a class="wpil_keyword_link" title="Скрипты" href="https://it-apteka.com/category/scripts/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3239">скрипт</a> токена падает с «400 too many arguments</td>
<td>Известный баг мастера быстрой настройки в некоторых версиях при автогенерации токена</td>
<td>Создай пользователя и токен вручную через pveum, как показано в разделе 3.5, и вбей значения в форму Pulse руками</td>
</tr>
</tbody>
</table>
<h3>Восстановление после сбоя</h3>
<p>Если хост с Pulse умер целиком — подними новый <a title="Установка N8N в LXC контейнер Proxmox: полная инструкция от А до Я" href="https://it-apteka.com/ustanovka-n8n-v-lxc-kontejner-proxmox-polnaja-instrukcija-ot-a-do-ja/" target="_blank" rel="noopener" data-wpil-monitor-id="3251">контейнер или LXC</a> той же версии, разверни туда volume/каталог /data из бэкапа и запусти сервис. Настройки нод, токены и история алертов восстановятся, повторно вводить токены Proxmox не придётся.</p>
<pre><code class="language-bash">
# Восстановление volume из архива для Docker-инсталляции
docker volume create pulse_data
docker run --rm -v pulse_data:/data -v $(pwd):/backup alpine \
tar xzf /backup/pulse-backup-2026-07-30.tar.gz -C /data
docker compose up -d
</code></pre>
<p>Бэкап, который ни разу не восстанавливали — это не бэкап, это красивый файл на диске, в существование которого ты веришь на слово. Раз в квартал подними тестовый контейнер на отдельном порту и разверни в него архив — убедишься, что восстановление реально работает, а не просто складывается в архив годами без проверки.</p>
<p>Для домашней лаборатории есть отдельный вариант установки — аддон Home Assistant. Если у тебя уже крутится Home Assistant рядом с Proxmox, Pulse Server и Pulse Agent можно поднять как его аддоны, без отдельной VM или LXC под мониторинг. Для прод-окружения такой вариант не рекомендую — изоляция и обновления аддонов Home Assistant устроены не так строго, как у отдельного сервиса.</p>
<p>Всё не так плохо как кажется по этой таблице. На практике 90% проблем — это privsep у токена. Один флаг чинит почти всё.</p>
<h2>6. Альтернативы: когда Pulse — не твой вариант</h2>
<ul>
<li><strong>Zabbix</strong> — тяжелее в настройке, зато мониторит вообще всё в инфраструктуре, не только Proxmox. Бери, если у тебя уже есть Zabbix-сервер и нужно добавить пару нод, а не разворачивать отдельный стек.</li>
<li><strong>Checkmk</strong> — похожая история: избыточен для трёх нод, но силён если нужен единый мониторинг на сотни хостов вперемешку с сетевым оборудованием.</li>
<li><strong>Grafana + Prometheus + pve-exporter</strong> — гибче по визуализации и хранению истории, но собирать стек из трёх компонентов ради красивых графиков оправдано только если Grafana у тебя и так стоит под другие задачи.</li>
<li><strong>Proxmox Datacenter Manager (PDM)</strong> — официальный инструмент от самого Proxmox для управления несколькими кластерами. Хорош как замена веб-интерфейса и умеет удалённо управлять нодами разных кластеров из одной точки, но алертов и глубины метрик как в Pulse там пока меньше — это скорее панель управления, чем система наблюдения.</li>
<li><strong>Netdata</strong> — если хочется мониторить не только Proxmox, а метрики ОС на глубоком уровне на каждой ноде: контекст-свитчи, интерапты, детальную разбивку по процессам. Но это агент на каждый хост, а не read-only через API, и придётся ставить его на каждую ноду отдельно, включая гипервизор.</li>
</ul>
<p>Ничто не мешает совмещать инструменты: Pulse — как быстрый обзорный дашборд и источник алертов по инфраструктуре Proxmox, а Zabbix или Grafana — как единая точка мониторинга для всей компании, куда Pulse при желании прокидывает метрики через вебхук. Так делают, когда мониторинг уже был построен под другие системы, а Proxmox добавился в инфраструктуру позже.</p>
<p>Если кластер маленький, а API Proxmox — твой единственный источник данных, Pulse выигрывает по соотношению «сколько времени потратил — сколько пользы получил». Для энтерпрайза с сотней хостов разного типа — смотри в сторону Zabbix или Checkmk.</p>
<p>Отдельно скажу про встроенный Proxmox Backup Server. Он и сам умеет слать уведомления о неудачных задачах — но только про себя, и только по email. Если тебе нужен единый экран с состоянием нод, VM и бэкапов одновременно, штатных писем PBS недостаточно — придётся всё равно смотреть в отдельный дашборд.</p>
<h3>Free-тир Pulse против Pulse Pro</h3>
<table>
<tbody>
<tr>
<th>Функция</th>
<th>Self-hosted (бесплатно)</th>
<th>Pulse Pro</th>
</tr>
<tr>
<td>Мониторинг PVE/PBS/PMG в реальном времени</td>
<td>Да</td>
<td>Да</td>
</tr>
<tr>
<td>Алерты в Telegram/Discord/Slack/Email</td>
<td>Да</td>
<td>Да</td>
</tr>
<tr>
<td>Push-режим для изолированного PBS</td>
<td>Да</td>
<td>Да</td>
</tr>
<tr>
<td>Мониторинг Docker/Kubernetes/TrueNAS/vSphere</td>
<td>Да</td>
<td>Да</td>
</tr>
<tr>
<td>AI-патрули (Pulse Patrol) и автофиксы</td>
<td>Ограничено / через собственный ключ провайдера</td>
<td>Расширенный анализ и Auto-Fix</td>
</tr>
<tr>
<td>Долгая история метрик и продвинутая аналитика</td>
<td>Базовая</td>
<td>Расширенная</td>
</tr>
</tbody>
</table>
<p>Для домашней лаборатории или небольшого прода бесплатного тира хватает с запасом. Pro имеет смысл там, где мониторинг превращается в отдельную задачу с SLA и нужен автоматический разбор инцидентов без участия человека.</p>
<h2>7. Профилактика: чтобы не чинить это в 3 ночи</h2>
<h3>Мониторинг самого Pulse</h3>
<p>Да, тому кто мониторит — тоже нужен мониторинг. Добавь Pulse в проверку через cron или внешний uptime-сервис: пинг на порт 7655 раз в 5 минут.</p>
<pre><code class="language-bash">
# Простая проверка доступности, кидай в cron
curl -sf http://127.0.0.1:7655/api/health || echo "Pulse недоступен" | mail -s "ALERT: Pulse down" ты@почта.ru
</code></pre>
<h3>Резервное копирование конфига</h3>
<table>
<tbody>
<tr>
<th>Что бэкапить</th>
<th>Как часто</th>
<th>Куда</th>
</tr>
<tr>
<td>Каталог /data (Docker volume pulse_data)</td>
<td>Раз в сутки</td>
<td>Отдельное хранилище, не тот же диск что у Pulse</td>
</tr>
<tr>
<td>Список токенов и учётных данных</td>
<td>После каждого изменения</td>
<td>Менеджер паролей, не текстовый файл на рабочем столе</td>
</tr>
<tr>
<td>Конфиг алертов (Settings → Export)</td>
<td>Раз в неделю или перед апдейтом</td>
<td><a class="wpil_keyword_link" title="Git" href="https://it-apteka.com/tag/git/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3247">Git</a>-репозиторий или S3-бакет</td>
</tr>
</tbody>
</table>
<pre><code class="language-bash">
# Бэкап volume для Docker-инсталляции
docker run --rm -v pulse_data:/data -v $(pwd):/backup alpine \
tar czf /backup/pulse-backup-$(date +%F).tar.gz -C /data .
</code></pre>
<h3>Автозапуск</h3>
<p>При Docker — флаг <code>--restart unless-stopped</code> уже в команде установки выше, этого достаточно. При ручной установке через install.sh проверь что юнит включён:</p>
<pre><code class="language-bash">
systemctl enable pulse
systemctl is-enabled pulse
</code></pre>
<h3>Безопасность</h3>
<p>Мониторинг сам по себе — привлекательная цель для атаки: он видит всю инфраструктуру сразу, и токен от него потенциально открывает read-доступ ко всему кластеру. Относись к хосту с Pulse так же серьёзно, как к самим гипервизорам.</p>
<ul>
<li>UFW — открывай 7655 только для доверенной подсети, наружу не публикуй без VPN или reverse-proxy с аутентификацией</li>
<li>fail2ban — если веб-интерфейс всё же смотрит наружу, повесь jail на форму логина, чтобы перебор пароля упирался в бан по IP после нескольких попыток</li>
<li>SSH hardening на хосте с Pulse — отключи пароль-логин, оставь только ключи, поменяй порт если это единственная линия обороны от automated-сканеров</li>
<li>Отдельный read-only пользователь в Proxmox для каждого источника мониторинга, никогда не root-токен — роль PVEAuditor физически не может ничего сломать, даже если токен утечёт</li>
<li>Резервные копии токенов и конфига — вынесены за пределы самого хоста Pulse, иначе потеряешь и данные, и способ их восстановить одним и тем же инцидентом</li>
<li>Ограничение по IP на уровне файрвола Proxmox для порта 8006, если Pulse сидит на статическом адресе — лишний барьер даже при утечке валидного токена</li>
</ul>
<pre><code class="language-bash">
# Пример правила UFW: пускать 7655 только из локальной подсети
ufw allow from 192.168.1.0/24 to any port 7655 proto tcp
ufw deny 7655
</code></pre>
<p>Капля никотина убивает лошадь. Один открытый наружу дашборд мониторинга без пароля — весь периметр компании.</p>
<h3>Обновление</h3>
<pre><code class="language-bash">
# Docker
docker pull rcourtman/pulse:latest
docker stop pulse && docker rm pulse
# дальше повторяешь docker run с теми же volume и переменными
# Ручная установка / LXC
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | bash
</code></pre>
<p>Перед обновлением — бэкап volume/данных, описанный выше. Откатиться при неудаче: для <a title="Docker volumes: как хранить данные контейнеров и не потерять их после prune" href="https://it-apteka.com/docker-volumes-kak-hranit-dannye-kontejnerov-i-ne-poterjat-ih-posle-prune/" target="_blank" rel="noopener" data-wpil-monitor-id="3254">Docker поднять контейнер</a> со старым тегом версии из Releases, для ручной установки — переустановить конкретную версию флагом <code>--version</code> у install.sh.</p>
<h2>8. FAQ</h2>
<h3>Почему Pulse не подключается к Proxmox после настройки?</h3>
<p>В девяти случаях из десяти дело в токене — либо включена privilege separation и у токена пустые права, либо роль назначена не на корневой путь /. Проверь оба пункта командой pveum acl list и пересоздай токен с —privsep 0.</p>
<h3>Как проверить что мониторинг Proxmox через Pulse работает правильно?</h3>
<p>Открой дашборд Pulse — нода должна показывать актуальные CPU, RAM и статус за последние 30 секунд. Дополнительно проверь через curl с ручным запросом к API Proxmox с тем же токеном — если JSON приходит, проблема не в правах, а в самом Pulse.</p>
<h3>Что делать если Pulse грузит CPU на слабом сервере?</h3>
<p>Увеличь интервал опроса в настройках, закрой лишние открытые вкладки дашборда — Pulse снижает частоту polling, когда нет активных клиентов, но при постоянно открытых вкладках в нескольких браузерах нагрузка растёт пропорционально.</p>
<h3>Чем Pulse отличается от Zabbix для мониторинга Proxmox?</h3>
<p>Pulse заточен именно под Proxmox-экосистему — понимает Ceph, ZFS, статус бэкапов PBS из коробки и разворачивается за одну команду. Zabbix универсальнее и мониторит любую инфраструктуру, но требует отдельного сервера, базы данных и куда больше <a title="MikroTik для профессионалов: правильная настройка с нуля до production [2026]" href="https://it-apteka.com/mikrotik-dlja-professionalov-pravilnaja-nastrojka-s-nulja-do-production-2026/" target="_blank" rel="noopener" data-wpil-monitor-id="3255">настройки под задачу с нуля</a>.</p>
<h3>Можно ли мониторить несколько кластеров Proxmox одним Pulse?</h3>
<p>Да, добавляй ноды каждого кластера отдельно через Settings → Add Node, у каждого независимого кластера свой токен. Внутри одного кластера достаточно подключить одну ноду — остальные Pulse обнаружит сам через членство в кластере.</p>
<h3>Нужен ли агент на нодах Proxmox для работы Pulse?</h3>
<p>Нет, для мониторинга самого Proxmox VE и PBS агент не требуется — Pulse ходит через штатный REST API по токену. Агенты нужны только если дополнительно подключаешь Docker-хосты, Kubernetes или хочешь снять данные SMART/температуры изнутри гостевых систем.</p>
<h3>Можно ли использовать Pulse бесплатно для коммерческого проекта?</h3>
<p>Да, self-hosted версия распространяется по лицензии MIT и полнофункциональна для базового мониторинга без ограничений по количеству нод. Платный Pulse Pro — это отдельный слой AI-функций и расширенной аналитики, а не условие для коммерческого использования базовой версии.</p>
<h3>Как перенести настройки Pulse на новый сервер?</h3>
<p>Забэкапь каталог /data (или Docker volume pulse_data) как описано в разделе профилактики, разверни Pulse той же версии на новом хосте, распакуй архив в volume и запусти сервис — токены нод и конфиг алертов подтянутся автоматически, повторно вводить ничего не придётся.</p>
<h3>Как часто выходят обновления Pulse и обязательно ли их ставить сразу?</h3>
<p>Проект развивается активно, патч-релизы выходят с интервалом в недели. Ставить в день релиза не обязательно, но раз в месяц-два проверять changelog стоит — там же закрывают проблемы вроде избыточного спама в syslog нод и уточняют работу с API-токенами, о которых шла речь в разделе про ошибки.</p>
<h2>8.1. Отдельно про Proxmox Mail Gateway</h2>
<p>Если в инфраструктуре крутится ещё и PMG — Pulse подключает его тем же способом, что и PVE: read-only пользователь, токен без privilege separation, добавление ноды через тот же мастер в Settings. На дашборде PMG появится отдельной вкладкой с очередью писем, статистикой спам-фильтра и статусом самого сервиса — не нужно заводить для почтового шлюза отдельный инструмент мониторинга только потому, что это не гипервизор.</p>
<h2>9. Прогноз</h2>
<p>После установки у тебя есть живой дашборд по всем нодам Proxmox, алерты в Telegram при падении бэкапа или переполнении диска, и история метрик вместо разовых снимков. Больше не нужно открывать пять вкладок веб-интерфейса, чтобы понять что происходит в кластере целиком.</p>
<p>Дальше — дело техники: подключи PBS через push-режим если он изолирован, настрой пороги под свою нагрузку и не забывай про бэкап конфига перед каждым апдейтом. Кластер вырастет с трёх нод до тридцати — Pulse тот же самый, меняется только интервал опроса и глубина хранения истории, архитектуру переделывать не придётся.</p>
<p>Если рядом с Proxmox крутится ещё и Docker-хост или кластер Kubernetes — не плоди отдельные системы мониторинга под каждый тип инфраструктуры, версия 6 сводит всё в один дашборд. Меньше вкладок в браузере — меньше шанс пропустить алерт среди вкладок с котиками.</p>
<p>Рождённый в домашней лаборатории — продакшна не боится. Проверено на кластерах от трёх нод в гараже до полусотни на арендованных стойках: рецепт из этой статьи один и тот же, разница только в интервале опроса и количестве кофе, выпитого во время настройки. Если что-то не завелось — пиши в комментарии, разберёмся.</p>
Поднял кластер Proxmox. Три ноды, десяток VM, бэкапы на PBS. И ноль видимости — что происходит внутри, узнаёшь только когда пользователи пишут «у нас всё лежит». Знакомо? Мониторинг Proxmox через Pulse закрывает эту дыру одной командой в терминале, без Zabbix, без агентов на каждой ноде, без недели настройки.
Эта статья написана как рабочий рецепт, а не как обзор функций с сайта разработчика. Разберём три способа установки, создание безопасного read-only токена, подключение алертов и реальные ошибки, с которыми сталкиваются при первом запуске — включая ту самую 401, из-за которой половина issue-трекера проекта на GitHub.
Быстрый ответ
Pulse — это бесплатный self-hosted
мониторинг для Proxmox VE, PBS и PMG с веб-дашбордом в реальном времени. Разворачивается за один
Docker-контейнер или LXC-скрипт, не требует агентов на нодах Proxmox — работает через штатный API. Показывает CPU, RAM, диски, статус бэкапов, ZFS/Ceph и умеет слать алерты в
Telegram, Discord, Slack и почту. Ставится за 10-15 минут, конфиг — три файла.
1. Диагноз: почему штатных средств Proxmox не хватает
Веб-интерфейс Proxmox показывает состояние ноды, на которой ты сейчас сидишь. Хочешь глянуть кластер целиком — открывай пять вкладок. Хочешь узнать, что бэкап на PBS не отработал третью ночь подряд — иди и смотри логи руками. Никаких алертов из коробки, никакой истории метрик дольше суток, никакого единого экрана на все ноды.
Штатный график RRD в Proxmox хранит точки с шагом в минуту только за последний час, дальше идёт усреднение, и разовый скачок нагрузки в 3 часа ночи ты просто не увидишь на графике за неделю. А именно ночные скачки и роняют продакшн — днём кто-то что-то поменял, ночью оно выстрелило, и виноватого искать по памяти.
Тут в игру входит поведенческий момент, который касается не только SEO, но и реальной эксплуатации: чем позже ты узнал о проблеме, тем дороже её решение. Алерт в Telegram за 20 минут до полного отказа диска — это плановая замена. Тот же диск, найденный постфактум по жалобам пользователей — это восстановление из бэкапа и разбор полётов с начальством.
Из практики: кластер на три ноды, ZFS-пул на одной из них незаметно уходил в DEGRADED почти неделю. Никто не смотрел — зачем, всё же работает. Работало ровно до момента, пока не отвалился второй диск в зеркале, и тогда работать перестало резко и полностью. Пять минут настройки алерта на статус пула сэкономили бы сутки восстановления из бэкапа. Такие истории и есть причина, почему мониторинг ставят не «когда будет время», а сразу после установки гипервизора.
Дальше в статье:
- что Pulse умеет и чем отличается от Zabbix и Checkmk
- три способа установки — LXC-скрипт, Docker, ручной install.sh
- настройка мониторинг-пользователя и API-токена в Proxmox без лишних прав
- подключение алертов и push-режима для изолированного PBS
- разбор реальных ошибок 401/403 при подключении токена
- чем закрыть мониторинг Docker и Kubernetes рядом с Proxmox
Время на установку — 15 минут. Время на полную настройку с алертами и бэкапом конфига — час, если не отвлекаться на кофе. Хотя кофе всё равно налей, разговор долгий.
2. Причины взяться за Pulse, а не городить Zabbix ради трёх нод
| Причина |
Почему это важно |
| Нет агентов на гипервизоре |
Pulse ходит в штатный API Proxmox (порт 8006), ничего не ставится на сами ноды — меньше риска что-то сломать на проде |
| Установка за одну команду |
Docker-контейнер или готовый LXC-скрипт из community-scripts — не нужен отдельный сервер под мониторинг-стек |
| Ресурсы почти не расходует |
Опрос останавливается, когда нет открытых вкладок с дашбордом — в отличие от Zabbix, который крутится постоянно |
| Понимает специфику Proxmox |
Видит кластерное членство, Ceph MON/MGR, статус бэкапов PBS, ZFS-пулы — общий SNMP-мониторинг это либо не покажет, либо покажет криво |
| Push-режим для изолированного PBS |
Если PBS сидит за файрволом без входящих соединений, Pulse умеет получать метрики от него, а не только опрашивать |
| Живое сообщество и частые релизы |
Проект активно развивается, баги вроде проблем с токенами закрываются за недели, а не годами как в мёртвых форках |
Есть нюанс. Pulse — это соло-проект одного разработчика (Richard Courtman), MIT-лицензия, бесплатный self-hosted тир полнофункционален для базового мониторинга. Платный Pulse Pro добавляет AI-патрули и авто-фиксы — для домашнего кластера или небольшого прода это не обязательно.
По цифрам из практики пользователей проекта: инстанс Pulse в LXC на 2 ядрах и полсотни отслеживаемых устройств держится в единицах процентов CPU в простое, рост нагрузки заметен только при большом количестве одновременно открытых вкладок дашборда у разных людей. Для сравнения, Zabbix-сервер с СУБД под капотом на том же количестве хостов обычно требует отдельную VM с 2+ ГБ RAM только под сам сервер, не считая агентов.
Как это устроено изнутри
Бэкенд написан на Go, фронтенд — на SolidJS. Это не праздное любопытство: связка даёт низкое потребление памяти и быстрый холодный старт контейнера — секунды, а не десятки секунд как у стека на Java. Каждая нода Proxmox опрашивается в своей горутине через штатный REST API, без блокировки друг друга: упала связь с одной нодой — остальные продолжают опрашиваться штатно.
Для Docker, Kubernetes и TrueNAS в версии 6 добавили отдельный механизм — лёгкие агенты сами отправляют метрики на Pulse POST-запросом, а не ждут, пока их опросят. Для Proxmox это не нужно: штатного API достаточно, агент на гипервизор ставить не придётся вообще.
Сравнение с ближайшими конкурентами
| Критерий |
Pulse |
Zabbix |
Checkmk |
Grafana+Prometheus |
| Время на первую установку |
10-15 минут |
1-2 часа |
1-2 часа |
2-4 часа |
| Агент на нодах Proxmox |
Не нужен, API-only |
Нужен или SNMP |
Нужен или API-плагин |
Нужен exporter |
| Понимание специфики Proxmox (Ceph, ZFS, PBS) |
Из коробки |
Через шаблоны сообщества |
Через плагины |
Через сторонний pve-exporter |
| Ресурсы под сам сервер мониторинга |
~512 МБ RAM |
2+ ГБ RAM, СУБД отдельно |
2+ ГБ RAM |
2+ ГБ RAM на три компонента |
| Мониторинг за пределами Proxmox (Docker, K8s) |
Есть в v6 |
Есть, универсальный |
Есть, универсальный |
Есть, универсальный |
| Лицензия / стоимость |
MIT, бесплатно, Pro — платно |
Бесплатно (GPL) |
Есть бесплатная и Enterprise |
Бесплатно |
Ну и запросы у вас — сказала бы база данных Zabbix, если бы её пытались поднять ради мониторинга трёх нод в домашней лаборатории. Для этого масштаба — явный перебор.
Итог по выбору простой. Три-пятнадцать нод, только Proxmox-экосистема, хочется результат за вечер — Pulse. Смешанная инфраструктура с сетевым оборудованием, принтерами и серверами на других гипервизорах вперемешку — универсальный инструмент вроде Zabbix или Checkmk отработает свои деньги и время на внедрение.
3. Рецепт: разворачиваем Pulse и подключаем Proxmox
3.1. Что нужно до старта
| Компонент |
Минимальная версия |
Комментарий |
| Proxmox VE |
7.0+ |
Для PBS — версия 2.0+ |
| ОС для самого Pulse |
Debian 11+ / Ubuntu 22.04+ |
Подходит отдельная LXC на 512 МБ RAM |
| Docker (если выбираешь этот способ) |
20.10+ |
Docker Compose — опционально |
| Сеть |
— |
Доступ до портов 8006 (PVE API) и 8007 (PBS API) |
На момент публикации актуальна версия Pulse v6.1.2. Перед установкой проверь свежие релизы на странице GitHub — проект обновляется часто, и в v6 добавили унифицированный мониторинг Docker, Kubernetes и TrueNAS в одном окне.
Таблица портов
| Порт |
Протокол |
Назначение |
Доступен снаружи? |
| 7655 |
HTTP/HTTPS |
Веб-интерфейс Pulse |
Нет, только из локальной сети или через VPN |
| 8006 |
HTTPS |
API Proxmox VE, который опрашивает Pulse |
Нет, только для хоста с Pulse |
| 8007 |
HTTPS |
API Proxmox Backup Server |
Нет, только для хоста с Pulse (или push-режим в обратную сторону) |
3.2. Способ A — LXC-контейнер (самый быстрый)
Если у тебя уже есть Proxmox-хост и не хочется поднимать отдельную VM — запускай прямо из консоли Proxmox. Скрипт из community-scripts создаст LXC, поставит Pulse и сразу подскажет следующий шаг.
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/pulse.sh)"
Результат: новая LXC-контейнер с работающим Pulse на порту 7655. Скрипт спросит про диск, RAM и CPU — для мониторинга 3-10 нод хватит 1 vCPU и 512 МБ RAM.
3.3. Способ B — Docker (если уже есть Docker-хост)
Не перепутай образ — официальный называется rcourtman/pulse, без кириллицы и лишних форков.
docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
--restart unless-stopped \
rcourtman/pulse:latest
Хочешь сразу задать логин и пароль без экрана первичной настройки — добавь переменные окружения:
docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
-e PULSE_AUTH_USER="admin" \
-e PULSE_AUTH_PASS="СложныйПароль123" \
--restart unless-stopped \
rcourtman/pulse:latest
Результат: контейнер поднят, docker ps показывает статус Up, порт 7655 слушает.
Если предпочитаешь Docker Compose — не переписывай команду руками каждый раз при обновлении, держи конфиг в файле:
services:
pulse:
image: rcourtman/pulse:latest
container_name: pulse
restart: unless-stopped
ports:
- "7655:7655"
volumes:
- pulse_data:/data
environment:
- PULSE_AUTH_USER=admin
- PULSE_AUTH_PASS=СложныйПароль123
volumes:
pulse_data:
docker compose up -d
Результат: та же одна строка в логах при старте, но обновление теперь — это docker compose pull && docker compose up -d, без переписывания флагов вручную.
3.4. Способ C — ручная установка (для существующей VM/LXC)
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | sudo bash
Скрипт сам определит систему, поставит systemd-юнит и запустит сервис. Дальше открывай http://IP-сервера:7655 в браузере — увидишь мастер первичной настройки.
Этот способ выбирай, если у тебя уже есть выделенная VM или LXC под служебные сервисы и не хочется тащить туда Docker ради одного контейнера. Из минусов — обновления придётся гонять тем же install.sh вручную, Docker в этом смысле немного удобнее для CI/CD-подхода к апдейтам.
Какой из трёх способов выбрать? Если Proxmox один и мониторинг нужен «здесь и сейчас» — LXC-скрипт из способа A. Если уже есть Docker-хост под другие сервисы — способ B, туда же в Compose. Способ C — для тех, кто принципиально не любит контейнеры и держит всё голыми systemd-юнитами.
3.5. Создаём отдельного пользователя для мониторинга в Proxmox
Вот тут важно не полениться. Root-токен с полным доступом — это удобно ровно до первого инцидента с утечкой конфига. Заводи отдельного read-only пользователя.
# Пользователь в realm pve (не pam - чтобы не плодить системных юзеров)
pveum user add pulse-monitor@pve --comment "Read-only monitoring for Pulse"
# Роль на основе PVEAuditor - Pulse хватает только чтения
pveum aclmod / -user pulse-monitor@pve -role PVEAuditor
# Токен БЕЗ privilege separation - иначе токен получит пустые права
pveum user token add pulse-monitor@pve pulse-token --privsep 0
Результат последней команды — вывод с полем value, это и есть секрет токена. Скопируй сразу, второй раз Proxmox его не покажет.
Не перепутай privsep
Самая частая причина ошибки 401 при первом подключении — токен создан с privilege separation по умолчанию. У токена тогда свой пустой набор прав, независимый от прав пользователя. Флаг —privsep 0 обязателен, если не настраиваешь права на токен отдельно.
Почему именно PVEAuditor, а не что-то шире? Роль даёт доступ на чтение ко всему, что нужно мониторингу: статусы нод, VM, контейнеров, хранилищ, задач бэкапа. Прав на запуск, остановку или изменение конфигурации у неё нет физически — даже если токен утечёт, максимум что получит атакующий это список твоей инфраструктуры, а не рычаг для её поломки. Для мониторинга это ровно тот минимум привилегий, который нужен и не больше.
3.6. Подключаем ноду Proxmox в веб-интерфейсе Pulse
Открывай Pulse → Settings → Add Node → Proxmox VE и заполняй поля: адрес хоста с портом 8006, имя пользователя в формате pulse-monitor@pve!pulse-token, и значение токена. Отдельно — если ноды в кластере, Pulse обнаружит остальные автоматически после подключения первой.
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Proxmox VE нода"] --> B["API порт 8006"]
C["Proxmox Backup Server"] --> D["API порт 8007"]
B --> E["Pulse сервер"]
D --> E
E --> F["Веб-дашборд 7655"]
E --> G["Алерты Telegram Discord Email"]
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style C fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style E fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style G fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
Для изолированного PBS без входящих соединений есть push-режим: PBS сам присылает метрики на Pulse по расписанию, входящий доступ на 8007 не нужен вообще. Настраивается отдельным ключом в разделе PBS → Push Mode документации проекта.
Вот как выглядит цикл опроса на уровне протокола — полезно держать в голове, когда разбираешь логи и не понимаешь, откуда взялась задержка в дашборде:
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#f8fafc',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'noteBkgColor': '#fefce8',
'noteTextColor': '#713f12',
'noteBorderColor': '#fbbf24',
'actorBkg': '#f8fafc',
'actorBorder': '#94a3b8',
'actorTextColor': '#1e293b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'sequence': {
'mirrorActors': false,
'messageAlign': 'center',
'actorMargin': 120,
'width': 160,
'noteMargin': 12
}
}}%%
sequenceDiagram
participant U as Браузер
participant P as Pulse сервер
participant N as Proxmox нода
U->>P: Открыл дашборд
P->>N: Запрос по API токену
N->>P: JSON со статусом и метриками
P->>U: Обновление графиков
Note over P,N: Опрос останавливается без открытых вкладок
Что появится на дашборде после подключения
Сразу после первого успешного опроса на главном экране Pulse появляются карточки по каждой ноде: загрузка CPU, использование RAM, состояние дисков и уже смонтированных хранилищ. Отдельная вкладка сводит все VM и LXC-контейнеры кластера в один список с фильтром по статусу — running, stopped, paused — и по ноде, на которой они крутятся.
Вкладка Storage показывает не только процент заполнения, но и тип хранилища — ZFS, LVM-thin, директория — с отдельным индикатором для ZFS-пулов: ONLINE, DEGRADED, FAULTED. Именно этот индикатор и не даст повторить историю про неделю в DEGRADED из раздела диагноза выше.
Вкладка Backups подтягивает задачи из PBS или встроенного vzdump и показывает время последнего успешного запуска по каждой VM отдельно. Если бэкап конкретной машины не отрабатывал дольше заданного порога — карточка подсвечивается, и по ней же настраивается алерт из раздела про уведомления ниже.
| Вкладка дашборда |
Что показывает |
На что смотреть в первую очередь |
| Nodes |
CPU, RAM, load average, температура (если доступна) |
Устойчивый рост load average без соответствующего роста CPU — признак I/O-ожидания |
| Guests (VM/LXC) |
Статус, потребление ресурсов, нода размещения |
Гости в статусе paused дольше нескольких минут — обычно забытая миграция |
| Storage |
Заполнение, тип, состояние ZFS/Ceph |
Статус DEGRADED или заполнение выше 85% |
| Backups |
Время последнего успешного/неуспешного job |
Возраст последнего успешного бэкапа больше суток |
3.7. HTTPS через reverse proxy
Штатный веб-интерфейс Pulse отдаёт HTTP на 7655. Если планируешь заходить не только из локальной сети — повесь nginx с сертификатом впереди, не открывай 7655 напрямую наружу.
server {
listen 443 ssl;
server_name pulse.example.local;
ssl_certificate /etc/letsencrypt/live/pulse.example.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pulse.example.local/privkey.pem;
location / {
proxy_pass http://127.0.0.1:7655;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Заголовки Upgrade и Connection нужны обязательно — дашборд Pulse держит вебсокет для живого обновления метрик, без них графики будут замирать и обновляться только по F5.
3.8. Тюнинг интервала опроса и хранения истории
По умолчанию Pulse опрашивает ноды каждые несколько секунд, пока открыт хотя бы один клиент дашборда. Для трёх-пяти нод это ни на что не влияет. Для кластера в 20+ нод с сотнями VM разумно увеличить интервал и ограничить глубину хранения истории — иначе диск под /data начнёт расти быстрее, чем ты успеешь настроить ротацию.
# Settings -> General -> Polling & Storage
polling_interval_seconds: 15
metrics_retention_days: 30
Результат: меньше нагрузка на API Proxmox от постоянных запросов, дашборд обновляется чуть реже, зато сервер под Pulse не упирается в диск через месяц эксплуатации. Баланс простой: чем крупнее кластер, тем длиннее интервал — секундная точность нужна на пяти нодах, а не на пятидесяти.
3.9. Настройка алертов
Settings → Notifications → добавляешь канал. Поддерживаются Telegram, Discord, Slack, email и вебхуки. Порог по CPU/RAM/диску задаётся в процентах, порог по бэкапам — в часах с момента последнего успешного job.
# Пример настройки алерта в конфиге Pulse (Settings -> Alerts)
threshold_cpu_percent: 90
threshold_memory_percent: 85
threshold_disk_percent: 90
backup_stale_hours: 26
notify_channels: [telegram, email]
4. Проверка: убеждаемся что мониторинг реально работает
# Статус сервиса при ручной установке
systemctl status pulse
# Статус контейнера при установке через Docker
docker ps --filter name=pulse
# Логи, если что-то не так
docker logs -f pulse
# или
journalctl -u pulse -f
# Проверка что API Proxmox отвечает на токен
curl -k -H "Authorization: PVEAPIToken=pulse-monitor@pve!pulse-token=ТВОЙ-СЕКРЕТ" \
https://IP-ноды:8006/api2/json/nodes
Если последняя команда вернула JSON со списком нод, а не ошибку — токен рабочий, дальше проблема если что уже на стороне Pulse, не Proxmox. Открой дашборд, нода должна появиться в списке за 10-30 секунд после первого опроса.
5. Осложнения: разбор реальных ошибок
| Ошибка |
Причина |
Решение |
| 401 Unauthorized при добавлении ноды |
Токен создан с privilege separation, у него пустые права |
Пересоздай токен с флагом —privsep 0, либо назначь права токену отдельно через ACL |
| 403 Permission check failed на /nodes/…/status |
Роль назначена не на корневой путь /, а на конкретный узел без propagate |
Выполни pveum aclmod / -user pulse-monitor@pve -role PVEAuditor на корень дерева |
| Нода «unreachable» в логах Pulse |
Файрвол блокирует порт 8006 между хостом Pulse и Proxmox |
Проверь curl -k https://IP:8006 с хоста Pulse, открой порт в UFW/iptables |
| Самоподписанный сертификат рвёт соединение |
Proxmox по умолчанию ставит self-signed сертификат |
В настройках ноды в Pulse включи «Skip TLS verification» или подставь свой сертификат |
| Высокая нагрузка CPU от Pulse на слабом хосте |
Открыто много вкладок дашборда, включён polling с коротким интервалом |
Увеличь интервал опроса в Settings → Polling, закрывай неиспользуемые вкладки |
| Pulse спамит системный лог Proxmox |
Известное поведение при частом опросе API — фиксируется в syslog каждой ноды |
Обнови до последней стабильной версии, за последние релизы это заметно поправили |
| Токен для одного кластера не работает на другом |
Каждая независимая установка Proxmox требует свой токен |
Создавай отдельный токен под каждый кластер, для нод внутри одного кластера токен реплицируется сам |
| Графики в дашборде не двигаются без перезагрузки страницы |
Reverse proxy не пробрасывает вебсокет-заголовки Upgrade/Connection |
Добавь proxy_set_header Upgrade и Connection «upgrade» в конфиг nginx, как в примере выше |
| После обновления Pulse не стартует, в логах ошибка миграции данных |
Обновление пропустило промежуточную мажорную версию |
Ставь версии по порядку через —version в install.sh, не перепрыгивай через v5 сразу на v6, если долго не обновлялся |
| Автоустановочный скрипт токена падает с «400 too many arguments |
Известный баг мастера быстрой настройки в некоторых версиях при автогенерации токена |
Создай пользователя и токен вручную через pveum, как показано в разделе 3.5, и вбей значения в форму Pulse руками |
Восстановление после сбоя
Если хост с Pulse умер целиком — подними новый контейнер или LXC той же версии, разверни туда volume/каталог /data из бэкапа и запусти сервис. Настройки нод, токены и история алертов восстановятся, повторно вводить токены Proxmox не придётся.
# Восстановление volume из архива для Docker-инсталляции
docker volume create pulse_data
docker run --rm -v pulse_data:/data -v $(pwd):/backup alpine \
tar xzf /backup/pulse-backup-2026-07-30.tar.gz -C /data
docker compose up -d
Бэкап, который ни разу не восстанавливали — это не бэкап, это красивый файл на диске, в существование которого ты веришь на слово. Раз в квартал подними тестовый контейнер на отдельном порту и разверни в него архив — убедишься, что восстановление реально работает, а не просто складывается в архив годами без проверки.
Для домашней лаборатории есть отдельный вариант установки — аддон Home Assistant. Если у тебя уже крутится Home Assistant рядом с Proxmox, Pulse Server и Pulse Agent можно поднять как его аддоны, без отдельной VM или LXC под мониторинг. Для прод-окружения такой вариант не рекомендую — изоляция и обновления аддонов Home Assistant устроены не так строго, как у отдельного сервиса.
Всё не так плохо как кажется по этой таблице. На практике 90% проблем — это privsep у токена. Один флаг чинит почти всё.
6. Альтернативы: когда Pulse — не твой вариант
- Zabbix — тяжелее в настройке, зато мониторит вообще всё в инфраструктуре, не только Proxmox. Бери, если у тебя уже есть Zabbix-сервер и нужно добавить пару нод, а не разворачивать отдельный стек.
- Checkmk — похожая история: избыточен для трёх нод, но силён если нужен единый мониторинг на сотни хостов вперемешку с сетевым оборудованием.
- Grafana + Prometheus + pve-exporter — гибче по визуализации и хранению истории, но собирать стек из трёх компонентов ради красивых графиков оправдано только если Grafana у тебя и так стоит под другие задачи.
- Proxmox Datacenter Manager (PDM) — официальный инструмент от самого Proxmox для управления несколькими кластерами. Хорош как замена веб-интерфейса и умеет удалённо управлять нодами разных кластеров из одной точки, но алертов и глубины метрик как в Pulse там пока меньше — это скорее панель управления, чем система наблюдения.
- Netdata — если хочется мониторить не только Proxmox, а метрики ОС на глубоком уровне на каждой ноде: контекст-свитчи, интерапты, детальную разбивку по процессам. Но это агент на каждый хост, а не read-only через API, и придётся ставить его на каждую ноду отдельно, включая гипервизор.
Ничто не мешает совмещать инструменты: Pulse — как быстрый обзорный дашборд и источник алертов по инфраструктуре Proxmox, а Zabbix или Grafana — как единая точка мониторинга для всей компании, куда Pulse при желании прокидывает метрики через вебхук. Так делают, когда мониторинг уже был построен под другие системы, а Proxmox добавился в инфраструктуру позже.
Если кластер маленький, а API Proxmox — твой единственный источник данных, Pulse выигрывает по соотношению «сколько времени потратил — сколько пользы получил». Для энтерпрайза с сотней хостов разного типа — смотри в сторону Zabbix или Checkmk.
Отдельно скажу про встроенный Proxmox Backup Server. Он и сам умеет слать уведомления о неудачных задачах — но только про себя, и только по email. Если тебе нужен единый экран с состоянием нод, VM и бэкапов одновременно, штатных писем PBS недостаточно — придётся всё равно смотреть в отдельный дашборд.
Free-тир Pulse против Pulse Pro
| Функция |
Self-hosted (бесплатно) |
Pulse Pro |
| Мониторинг PVE/PBS/PMG в реальном времени |
Да |
Да |
| Алерты в Telegram/Discord/Slack/Email |
Да |
Да |
| Push-режим для изолированного PBS |
Да |
Да |
| Мониторинг Docker/Kubernetes/TrueNAS/vSphere |
Да |
Да |
| AI-патрули (Pulse Patrol) и автофиксы |
Ограничено / через собственный ключ провайдера |
Расширенный анализ и Auto-Fix |
| Долгая история метрик и продвинутая аналитика |
Базовая |
Расширенная |
Для домашней лаборатории или небольшого прода бесплатного тира хватает с запасом. Pro имеет смысл там, где мониторинг превращается в отдельную задачу с SLA и нужен автоматический разбор инцидентов без участия человека.
7. Профилактика: чтобы не чинить это в 3 ночи
Мониторинг самого Pulse
Да, тому кто мониторит — тоже нужен мониторинг. Добавь Pulse в проверку через cron или внешний uptime-сервис: пинг на порт 7655 раз в 5 минут.
# Простая проверка доступности, кидай в cron
curl -sf http://127.0.0.1:7655/api/health || echo "Pulse недоступен" | mail -s "ALERT: Pulse down" ты@почта.ru
Резервное копирование конфига
| Что бэкапить |
Как часто |
Куда |
| Каталог /data (Docker volume pulse_data) |
Раз в сутки |
Отдельное хранилище, не тот же диск что у Pulse |
| Список токенов и учётных данных |
После каждого изменения |
Менеджер паролей, не текстовый файл на рабочем столе |
| Конфиг алертов (Settings → Export) |
Раз в неделю или перед апдейтом |
Git-репозиторий или S3-бакет |
# Бэкап volume для Docker-инсталляции
docker run --rm -v pulse_data:/data -v $(pwd):/backup alpine \
tar czf /backup/pulse-backup-$(date +%F).tar.gz -C /data .
Автозапуск
При Docker — флаг --restart unless-stopped уже в команде установки выше, этого достаточно. При ручной установке через install.sh проверь что юнит включён:
systemctl enable pulse
systemctl is-enabled pulse
Безопасность
Мониторинг сам по себе — привлекательная цель для атаки: он видит всю инфраструктуру сразу, и токен от него потенциально открывает read-доступ ко всему кластеру. Относись к хосту с Pulse так же серьёзно, как к самим гипервизорам.
- UFW — открывай 7655 только для доверенной подсети, наружу не публикуй без VPN или reverse-proxy с аутентификацией
- fail2ban — если веб-интерфейс всё же смотрит наружу, повесь jail на форму логина, чтобы перебор пароля упирался в бан по IP после нескольких попыток
- SSH hardening на хосте с Pulse — отключи пароль-логин, оставь только ключи, поменяй порт если это единственная линия обороны от automated-сканеров
- Отдельный read-only пользователь в Proxmox для каждого источника мониторинга, никогда не root-токен — роль PVEAuditor физически не может ничего сломать, даже если токен утечёт
- Резервные копии токенов и конфига — вынесены за пределы самого хоста Pulse, иначе потеряешь и данные, и способ их восстановить одним и тем же инцидентом
- Ограничение по IP на уровне файрвола Proxmox для порта 8006, если Pulse сидит на статическом адресе — лишний барьер даже при утечке валидного токена
# Пример правила UFW: пускать 7655 только из локальной подсети
ufw allow from 192.168.1.0/24 to any port 7655 proto tcp
ufw deny 7655
Капля никотина убивает лошадь. Один открытый наружу дашборд мониторинга без пароля — весь периметр компании.
Обновление
# Docker
docker pull rcourtman/pulse:latest
docker stop pulse && docker rm pulse
# дальше повторяешь docker run с теми же volume и переменными
# Ручная установка / LXC
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | bash
Перед обновлением — бэкап volume/данных, описанный выше. Откатиться при неудаче: для Docker поднять контейнер со старым тегом версии из Releases, для ручной установки — переустановить конкретную версию флагом --version у install.sh.
8. FAQ
Почему Pulse не подключается к Proxmox после настройки?
В девяти случаях из десяти дело в токене — либо включена privilege separation и у токена пустые права, либо роль назначена не на корневой путь /. Проверь оба пункта командой pveum acl list и пересоздай токен с —privsep 0.
Как проверить что мониторинг Proxmox через Pulse работает правильно?
Открой дашборд Pulse — нода должна показывать актуальные CPU, RAM и статус за последние 30 секунд. Дополнительно проверь через curl с ручным запросом к API Proxmox с тем же токеном — если JSON приходит, проблема не в правах, а в самом Pulse.
Что делать если Pulse грузит CPU на слабом сервере?
Увеличь интервал опроса в настройках, закрой лишние открытые вкладки дашборда — Pulse снижает частоту polling, когда нет активных клиентов, но при постоянно открытых вкладках в нескольких браузерах нагрузка растёт пропорционально.
Чем Pulse отличается от Zabbix для мониторинга Proxmox?
Pulse заточен именно под Proxmox-экосистему — понимает Ceph, ZFS, статус бэкапов PBS из коробки и разворачивается за одну команду. Zabbix универсальнее и мониторит любую инфраструктуру, но требует отдельного сервера, базы данных и куда больше настройки под задачу с нуля.
Можно ли мониторить несколько кластеров Proxmox одним Pulse?
Да, добавляй ноды каждого кластера отдельно через Settings → Add Node, у каждого независимого кластера свой токен. Внутри одного кластера достаточно подключить одну ноду — остальные Pulse обнаружит сам через членство в кластере.
Нужен ли агент на нодах Proxmox для работы Pulse?
Нет, для мониторинга самого Proxmox VE и PBS агент не требуется — Pulse ходит через штатный REST API по токену. Агенты нужны только если дополнительно подключаешь Docker-хосты, Kubernetes или хочешь снять данные SMART/температуры изнутри гостевых систем.
Можно ли использовать Pulse бесплатно для коммерческого проекта?
Да, self-hosted версия распространяется по лицензии MIT и полнофункциональна для базового мониторинга без ограничений по количеству нод. Платный Pulse Pro — это отдельный слой AI-функций и расширенной аналитики, а не условие для коммерческого использования базовой версии.
Как перенести настройки Pulse на новый сервер?
Забэкапь каталог /data (или Docker volume pulse_data) как описано в разделе профилактики, разверни Pulse той же версии на новом хосте, распакуй архив в volume и запусти сервис — токены нод и конфиг алертов подтянутся автоматически, повторно вводить ничего не придётся.
Как часто выходят обновления Pulse и обязательно ли их ставить сразу?
Проект развивается активно, патч-релизы выходят с интервалом в недели. Ставить в день релиза не обязательно, но раз в месяц-два проверять changelog стоит — там же закрывают проблемы вроде избыточного спама в syslog нод и уточняют работу с API-токенами, о которых шла речь в разделе про ошибки.
8.1. Отдельно про Proxmox Mail Gateway
Если в инфраструктуре крутится ещё и PMG — Pulse подключает его тем же способом, что и PVE: read-only пользователь, токен без privilege separation, добавление ноды через тот же мастер в Settings. На дашборде PMG появится отдельной вкладкой с очередью писем, статистикой спам-фильтра и статусом самого сервиса — не нужно заводить для почтового шлюза отдельный инструмент мониторинга только потому, что это не гипервизор.
9. Прогноз
После установки у тебя есть живой дашборд по всем нодам Proxmox, алерты в Telegram при падении бэкапа или переполнении диска, и история метрик вместо разовых снимков. Больше не нужно открывать пять вкладок веб-интерфейса, чтобы понять что происходит в кластере целиком.
Дальше — дело техники: подключи PBS через push-режим если он изолирован, настрой пороги под свою нагрузку и не забывай про бэкап конфига перед каждым апдейтом. Кластер вырастет с трёх нод до тридцати — Pulse тот же самый, меняется только интервал опроса и глубина хранения истории, архитектуру переделывать не придётся.
Если рядом с Proxmox крутится ещё и Docker-хост или кластер Kubernetes — не плоди отдельные системы мониторинга под каждый тип инфраструктуры, версия 6 сводит всё в один дашборд. Меньше вкладок в браузере — меньше шанс пропустить алерт среди вкладок с котиками.
Рождённый в домашней лаборатории — продакшна не боится. Проверено на кластерах от трёх нод в гараже до полусотни на арендованных стойках: рецепт из этой статьи один и тот же, разница только в интервале опроса и количестве кофе, выпитого во время настройки. Если что-то не завелось — пиши в комментарии, разберёмся.