惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
V
Visual Studio Blog
The Register - Security
The Register - Security
Y
Y Combinator Blog
I
InfoQ
小众软件
小众软件
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
P
Privacy International News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
Arctic Wolf
P
Privacy & Cybersecurity Law Blog
AWS News Blog
AWS News Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Security Archives - TechRepublic
Security Archives - TechRepublic
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Security Affairs
Cyberwarzone
Cyberwarzone
V
Vulnerabilities – Threatpost
C
Cyber Attacks, Cyber Crime and Cyber Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
爱范儿
爱范儿
Spread Privacy
Spread Privacy
Recent Commits to openclaw:main
Recent Commits to openclaw:main
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
C
CERT Recently Published Vulnerability Notes
IT之家
IT之家
月光博客
月光博客
雷峰网
雷峰网
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
美团技术团队
NISL@THU
NISL@THU
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Лёгкий мониторинг Proxmox-кластера: Pulse вместо большого Zabbix-стека
Konstantin_T · 2026-05-21 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение15 мин

Охват и читатели135

Кейс

Зачем вообще отдельный мониторинг поверх Proxmox

Полчаса в день у меня уходило на ручной обход шести нод Proxmox через веб-интерфейс — он показывает по одной ноде за раз. И часть рутины всё равно проскакивала: задание PBS остановилось — никто не заметил, ZFS scrub отключили на maintenance и забыли включить, на ноде накопились pending kernel updates, и о них узнаёшь, когда уже надо ребутить. На небольшом кластере ручного обхода хватает. На кластере из шести нод с парой сотен виртуалок и контейнеров — уже нет.

На этом кластере после миграции с проприетарного гипервизора накопился вполне типовой операционный долг: отключённые после ручного maintenance таймеры scrub, остановленные после рестарта PBS задания резервного копирования, дрейф конфигурации между нодами после мажорного апгрейда.

Стандартный путь — построить полноценный observability-стэк: Zabbix или Prometheus + Alertmanager + Grafana, метрики, шаблоны, дашборды, рутина по обслуживанию самого мониторинга. Это правильный путь, но он плохо подходит к задаче «быстро получить единый экран по Proxmox-кластеру». В этой статье — про другой вариант: лёгкий read-only слой над Proxmox/PBS, который разворачивается за несколько часов активной работы и закрывает первый уровень видимости. Инструмент называется Pulse, и статья — про то, где он работает, где нет, и что выяснилось в первый месяц эксплуатации.

Сразу обозначу границу: Pulse не заменяет полноценный мониторинг. Это первый экран и базовый набор алертов. Если нужны ролевой доступ (RBAC), журнал аудита, интеграция с SIEM, отчёты по SLO/SLA или формальный compliance — читайте до конца, в разделе «Когда Pulse не подходит» я перечисляю, что он не закрывает.

Исходная инфраструктура

Обезличенная картина того, что нужно наблюдать:

  • 6 нод Proxmox VE в кластере;

  • 1 отдельный Proxmox Backup Server на отдельной железке;

  • ~80 виртуальных машин разного назначения;

  • ~30 LXC-контейнеров под внутренние сервисы;

  • 2 хоста с Docker для CI и служебных задач;

  • ZFS-пулы на части нод;

  • разделение management и production VLAN — это важно: API-сеть кластера и сеть управления не совпадают, и Pulse про это придётся знать (об этом ниже).

Конкретные хостнеймы, IP-адреса, состав ВМ и привязку к организации намеренно не привожу — статья о Pulse, а не о конкретной инфраструктуре.

До Pulse «мониторинг» сводился к трём вещам:

  1. Веб-интерфейс PVE и его отдельные вкладки по нодам.

  2. Уведомления PBS о backup jobs — на email, который у части людей был в спам-фильтре.

  3. Ручные обходы дежурного админа раз в день.

Этого недостаточно, чтобы заметить, что задание PBS остановилось неделю назад, а сообщение про это улетело в junk. И уж точно недостаточно, чтобы поймать медленно деградирующие вещи — температуру SSD, отключённые systemd-таймеры, отложенные обновления.

Почему не Zabbix первым шагом

Это самый частый вопрос: «У вас же есть Zabbix/Prometheus, чем не подходит?»

Подходит. Zabbix и связка Prometheus + Alertmanager + Grafana — мощнее и универсальнее Pulse. Они лучше масштабируются, у них развитая экосистема шаблонов, они закрывают не только Proxmox, но и всё остальное.

Цена этой мощи — обвязка:

  • Zabbix-сервер сам по себе становится отдельным проектом: его нужно бэкапить, обновлять, мониторить и сопровождать;

  • официальные шаблоны для Proxmox VE и PBS дают основу, но без доработки покрывают не всё, что хочется видеть на дашборде;

  • Grafana поверх Zabbix или Prometheus — это ещё один слой со своими дашбордами, которые надо собрать и поддерживать;

  • порог входа: пара дней админа на стартовую настройку, ещё несколько — на тюнинг порогов.

Когда задача звучит как «через две недели после миграции хочу единый экран по Proxmox-кластеру и понятный канал алертов в Telegram», правильный ответ — не начинать со стэка, который сам требует поддержки. Сначала закрыть первый уровень видимости, потом — если требования вырастут — двигаться в сторону Zabbix/Prometheus.

Pulse — про этот первый уровень.

Что такое Pulse

Pulse — open-source-проект, rcourtman/Pulse на GitHub, лицензия MIT. На момент написания stable-версия v5.1.x, в release candidate уже v6.0.0; релизы выходят каждые 1–3 дня. Звёзд на GitHub — более 5,5 тыс.

Что Pulse делает:

  • Подключается к Proxmox VE, Proxmox Backup Server и Proxmox Mail Gateway через API. Показывает состояние нод, ВМ, LXC, storage, ZFS-пулов, заданий бэкапа.

  • Мониторит Docker/Podman (контейнеры, Swarm-сервисы) и Kubernetes (через агенты).

  • Шлёт алерты в Telegram, по email, webhooks.

  • Patrol — встроенный модуль авто-диагностики, работает на правилах из коробки, без LLM. Проходит по нодам, бэкапам, ZFS-пулам и поднимает структурные проблемы; по README ловит «ZFS capacity issues, failed backup jobs, VMs in restart loops, clock drift, container health failures». Опциональная LLM-интеграция (BYOK) усиливает разбор находок, но базовое наблюдение от неё не зависит.

  • AI-чат — отдельный опциональный компонент, по модели BYOK (bring your own key). По README поддерживаются OpenAI, Anthropic и Ollama — можно подключить локальную модель, не выпуская данные наружу.

Архитектурно это одно приложение в одном LXC-контейнере, без внешней БД. По умолчанию слушает порт 7655.

Open-core модель

Pulse идёт по open-core: бесплатная Community-редакция для self-hosted (всё, что описано в статье) и платные тиры с удалённым доступом, расширенной AI-аналитикой и RBAC. Я работаю только на Community; платные тиры в статье не разбираю. Когда требования вырастают до полноценного RBAC и аудита, равноценным конкурентом всё равно становятся уже Zabbix или Prometheus + Grafana с настроенными правами — не платная редакция Pulse.

Развёртывание

Активная настройка заняла у меня около полутора часов — это без учёта подготовки токенов, согласований доступа и первого разбора находок Patrol, на которые ушёл остаток дня. Цифру «полтора часа» не нужно воспринимать как универсальную: на кластерах с нестандартной сетью или большим парком нод и пулов будет дольше.

Шаг 1. Поднять LXC с Pulse

Из README проекта:

curl -fsSL https://github.com/rcourtman/Pulse/releases/latest/download/install.sh | bash

Скрипт создаёт LXC, ставит зависимости и поднимает сервис на порту 7655. По умолчанию — 1 vCPU и 1 ГБ RAM. На моём масштабе поднял RAM до 2 ГБ; для кластера в сотни узлов и тысячи ВМ автор проекта рекомендует увеличивать дальше.

Дашборд после установки доступен по http://<lxc-ip>:7655 без TLS «из коробки». Для production-доступа я бы поставил перед ним reverse proxy с TLS (Caddy/Traefik/nginx — что привычнее).

Шаг 2. API-доступ к Proxmox

Pulse подключается к Proxmox по API-токенам. Минимально достаточная роль — PVEAuditor на корне с propagate: она включает привилегии Sys.Audit, VM.Audit, Datastore.Audit, Pool.Audit, SDN.Audit, Mapping.Audit и достаточна для дашборда, метрик и алертов по бэкап-заданиям. Через CLI pveum это делается так (всё запускается на любой ноде кластера от root):

# 1. Отдельный пользователь под мониторинг
pveum user add pulse@pve --comment "Pulse monitoring (read-only)"

# 2. PVEAuditor на корень с propagate — read-only на ноды, ВМ, LXC, datastores, backup-задания
pveum acl modify / --users pulse@pve --roles PVEAuditor --propagate 1

# 3. API-токен с privsep=1 по умолчанию (у токена отдельные ACL)
pveum user token add pulse@pve readonly --comment "Pulse Community"

# 4. Раздать токену ту же роль (privsep=1 — поэтому повторяем явно)
pveum acl modify / --tokens 'pulse@pve!readonly' --roles PVEAuditor --propagate 1

Команда pveum user token add напечатает в stdout поле value — это секрет токена, увидеть его повторно нельзя. Сохранить в Pulse и в свой password manager сразу. Та же операция через UI: Datacenter → Permissions → Users → Add → потом API Tokens → Add → потом Permissions → Add для пользователя и для токена.

Pulse не должен иметь прав на изменение состояния. Никаких VM.Allocate, VM.PowerMgmt, Sys.Modify. При утечке токена это ограничивает возможный ущерб до «видит конфигурацию, не может ничего сломать».

Проверить, что токен живой и API доступен — простым curl (формат header’а — из PVE-документации; в реальной среде токен и секрет не вшиваем в логи и не публикуем):

curl -k -H 'Authorization: PVEAPIToken=<user>@pve!<tokenid>=<secret>' \
  https://pve-node.example.com:8006/api2/json/nodes

Если ответ — JSON со списком нод и их состоянием, API-токен корректно настроен, можно подключать его в Pulse.

Шаг 3. Подключить ноды через UI

В Pulse UI добавляю сами ноды, PBS и Docker-хосты. Автообнаружение кластера находит остальные ноды через одну точку входа за несколько минут.

Подводный камень — cluster network detection. Pulse по умолчанию ожидает, что cluster-network и API-network совпадают. В моём случае это не так: management и production VLAN разнесены, API-endpoint живёт в одном сегменте, кластерный трафик — в другом. В этом случае API-endpoint каждой ноды надо указывать вручную. Этот же сценарий обсуждается в Discussion #781 — там подробности и обходы.

Шаг 4. Telegram-уведомления

Создаю бот через BotFather (/newbot, имя, username), получаю токен. Затем напишу боту в личку любое сообщение и дёрну эндпоинт getUpdates Telegram Bot API — он вернёт JSON со списком апдейтов, в каждом есть поле chat.id. Это и есть chat_id для отправки:

curl -s "https://api.telegram.org/bot<TOKEN>/getUpdates" | jq '.result[].message.chat.id'

В Pulse — Settings → Notifications → Telegram, вписываю токен и chat_id. Тестовое сообщение — кнопка Send Test.

Технически можно использовать и групповой чат: добавить бота в группу, поднять боту права на отправку сообщений, в chat_id использовать ID группы (отрицательное число). Я оставил приватный чат — в групповом потоке деловой переписки критичные алерты теряются среди обычных сообщений.

Шаг 5. AI-чат (опционально)

Если планируется AI-функционал (чат-ассистент и AI-разбор находок Patrol) — это BYOK. По README проекта, Pulse понимает OpenAI, Anthropic и Ollama. У меня стоит локальная Ollama с моделью среднего размера на отдельной железке — данные не покидают периметр, и это снимает основной вопрос приватности.

AI-функционал — опциональный. Базовая ценность Pulse — дашборд, Patrol на правилах и алерты, и они работают без LLM.

Права доступа: почему read-only — это важно

Раздел про права — обычно скучный, но именно здесь чаще всего обнаруживаются дыры в конфигурации мониторинга.

Правило простое: мониторинг должен иметь ровно столько прав, сколько ему нужно для чтения метрик. Ни больше. У многих систем мониторинга в production живут токены с правами уровня администратора — потому что «так быстрее было настроить». Это утечка, которая случается тихо и обнаруживается, когда уже поздно.

Минимальная модель для Pulse + Proxmox:

Контур

Объект доступа

Роль

Proxmox VE — ноды, ВМ, LXC, storage, backup-задания

pveum acl modify / с --propagate 1

PVEAuditor (включает Sys/VM/Datastore/Pool/SDN/Mapping .Audit)

Proxmox Backup Server — datastores, jobs, prune/verify

отдельный API-токен в PBS, в acl на нужный datastore

DatastoreReader (или Audit — для всего PBS read-only)

Если в инфраструктуре несколько кластеров или сегментированные пулы ресурсов — токен лучше разнести на несколько, каждый со своим скоупом.

Чего Pulse делать не должен:

  • создавать/удалять ВМ;

  • запускать/перезагружать/мигрировать ВМ;

  • менять конфигурацию нод;

  • управлять backup jobs.

Если в какой-то момент захочется «дать Pulse кнопку рестарта ВМ» — это уже другая категория инструмента, тогда нужна полноценная automation-платформа с собственным RBAC, аудитом и логированием действий.

Правила алертов

Самая частая ошибка с алертами — «давайте включим все, потом отключим лишнее». Не работает: лишние не отключают, на них перестают реагировать, и в итоге игнорируется и важное.

Лучше идти от обратного: какой минимальный набор сигналов нужен, чтобы понять, что происходит. У меня получилось шесть правил. Это не «универсальный набор», а конкретный, который сложился под мою инфраструктуру; для другого окружения список будет другим.

Базовый набор

Правило

Порог

Почему такой порог

False-positive

Свободное место в storage

< 15%

Запас на 5–7 дней роста при моих темпах; не успеешь добавить место — начнутся I/O-ошибки на ВМ

Может срабатывать при крупном временном бэкап-репозитории. Стоит исключить временные datastores

Бэкап не выполнен

> 24 часов с последнего успеха

Все мои job’ы — ежедневные, окно «не выполнено сутки» — реально проблема

Если есть еженедельные job’ы, нужно отдельное правило для них или per-job thresholds

Нода offline

> 2 минут

2 минуты исключают одиночные сетевые икоты, но ещё успеваешь среагировать до миграции

На кластерах с динамическим маршрутингом порог стоит поднять до 5 минут

ВМ в restart-loop

> 3 рестартов за 10 минут

Поймал случай с OOM-killer, который стабильно прибивал процесс БД каждые ~6 минут

На ВМ с auto-recovery (например, в HA-группе) порог можно увеличить

NVMe-температура

> 65 °C

За пределами 65 °C ресурс NAND падает быстро; 70 °C — уже видимый риск

Зависит от модели NVMe — у enterprise-NVMe пороги другие, нужно сверяться с datasheet

ZFS scrub

не запускался > 30 дней

systemd-таймер ставится при инсталляции, но легко выключается ручным maintenance — нужен напоминальник

Может срабатывать на пулах, специально исключённых из scrub (например, scratch) — их нужно вынести из правила

Как выглядит сообщение в Telegram

Pulse отправляет короткое сообщение: проблема, нода/ресурс, ключевые метрики. По кнопке «Open in Pulse» — переход в дашборд с деталями. Дежурный решает: реагировать сейчас или планово.

Чего сознательно не делаем

  • Не настраиваю алерты на CPU/RAM-пороги по нодам. Это шум: загрузка скачет, ложных срабатываний больше, чем полезных событий. Если действительно нужен per-VM CPU monitoring — это уже задача для Prometheus + alertmanager rules с более точной классификацией.

  • Не использую Pulse для информационных уведомлений («бэкап успешен», «нода вернулась»). Только проблемы.

Что нашёл Patrol в первую неделю

Patrol — это сканер, который проходит по нодам, бэкапам, ZFS, конфигам и поднимает не «метрика выше порога», а структурные проблемы. Задание остановлено, таймер выключен, конфигурация дрейфит между нодами, версии пакетов расходятся. Это другой класс находок, чем threshold-алерты.

За первую неделю Patrol поднял пять историй, ни одну из которых я заранее не знал. Каждую разбираю в одинаковом формате: сигнал → диагностика → причина → исправление → правило-предохранитель.

PBS backup job в состоянии stopped дольше недели

  • Сигнал. Patrol помечает PBS task как stopped, последняя успешная попытка — больше недели назад.

  • Диагностика. Открываю PBS UI — да, задание остановлено. В логах PBS — после планового рестарта сервиса задание перешло в stopped и не возобновилось автоматически.

  • Причина. Уведомления PBS по email уходили на адрес, у которого фильтр на спам в почтовом сервере отбраковал последние 11 сообщений подряд. Никто этого не видел.

  • Исправление. Возобновил задание, проверил его на корректность, добавил правило Pulse «бэкап не выполнен > 24h» — теперь подобное приходит в Telegram, а не в спам.

  • Предохранитель. Любые email-уведомления критичных систем дублируются в Telegram через Pulse или отдельный почтовый рилей с проверкой доставки.

ZFS scrub отключён несколько месяцев

  • Сигнал. Patrol сообщает, что на двух пулах scrub не запускался дольше 90 дней.

  • Диагностика. systemctl list-timers | grep zfs — таймеры zfs-scrub-monthly@<pool>.timer в состоянии disabled.

  • Причина. Таймеры выключили во время ручного maintenance несколько месяцев назад и забыли включить обратно. В runbook’е этот шаг не зафиксирован.

  • Исправление. Включил таймеры, запустил scrub вручную для синхронизации. Добавил правило Pulse «scrub не запускался > 30 дней».

  • Предохранитель. Список stateful-таймеров и их ожидаемое расписание зафиксированы в Ansible-роли. Любое отключение требует комментария в коммите и запись в runbook.

Дрейф конфигурации репозиториев после мажорного апгрейда

  • Сигнал. Patrol поднимает расхождение версий пакетов между нодами кластера.

  • Диагностика. На двух нодах в /etc/apt/sources.list.d/ остался устаревший URL pve-no-subscription от предыдущей мажорной версии PVE. apt update ругался на 404, но не падал, а на новые пакеты молча не подписывался.

  • Причина. При апгрейде кластера со старой мажорной версии на новую pve7to8 или аналог не перезаписал sources.list.d на этих двух нодах — возможно, потому что они были недоступны в момент prepare-фазы.

  • Исправление. Поправил URL вручную, apt update, apt full-upgrade, проверил версии ядра и pve-manager.

  • Предохранитель. В Ansible-плейбуке пост-апгрейд-валидации добавил apt-get -o APT::Update::Error-Mode=any update (доступно с apt 2.0): команда возвращает ненулевой код, если хоть один репозиторий ответил 404. Без этого флага apt update молча игнорирует ошибочные строки в sources.list.d/ и плейбук считает шаг успешным.

Отложенные обновления ядра на одной ноде

  • Сигнал. На одной из нод pending kernel updates висят несколько месяцев. На остальных пяти ситуация типовая: ноды обновляются в окна обслуживания.

  • Диагностика. Эта нода — в исключении из Ansible-плейбука апдейтов, потому что на ней когда-то жила ВМ с особыми требованиями к downtime.

  • Причина. ВМ давно переехала с этой ноды, исключение в playbook’е осталось. История миграции в коммитах есть, но никто не вычистил исключение.

  • Исправление. Накатил обновления в ближайшее окно обслуживания, убрал исключение из плейбука.

  • Предохранитель. Исключения в Ansible-инвентаре получили срок жизни и владельца в комментарии. Раз в квартал — ревизия списка исключений.

NVMe выходит за температурный порог под нагрузкой бэкапа

  • Сигнал. На одной ноде Pulse рапортует температуру NVMe выше 65 °C во время окна резервного копирования.

  • Диагностика. Открываю BMC: fan profile в BIOS стоит на Low (30% оборотов). Под обычной нагрузкой этого достаточно, но окно бэкапа создаёт устойчивую I/O-нагрузку на NVMe, и температура уходит к 70 °C.

  • Причина. Fan profile был выставлен на Low при пуско-наладке для снижения шума в стойке. Кейс с длительной I/O-нагрузкой тогда не рассматривался.

  • Исправление. Переключил fan profile на Optimal. При той же нагрузке температура падает ниже 60 °C.

  • Предохранитель. В чеклист при вводе новой ноды добавил правило: для нод с NVMe в hot-path fan profile должен быть не ниже Optimal. Pulse-алерт «NVMe > 65 °C» остаётся как backup.

Что важно про этот список

Я не утверждаю, что «Pulse уникален и нашёл то, что никто бы не нашёл». Все эти проблемы можно было поймать вручную, при дисциплинированных ручных обходах. На практике в любой инфраструктуре есть слой накапливающегося операционного долга — отключённые таймеры, исключения в плейбуках, забытые fan-profiles. Patrol его подсвечивает, потому что проходится по структурным признакам, а не по «метрика вышла за порог». Это специфика подхода: Patrol смотрит на конфигурацию, а не только на метрики.

Подводные камни и ограничения

Здесь — то, что в маркетинговом обзоре обычно опускают.

Метрики ВМ периодически некорректны (открытый баг)

Pulse у некоторых пользователей показывает неправильные значения RAM ВМ и периодически теряет метрики дисков и сети гостевых ВМ. Это Issue #1319, открытый в марте 2026 и на момент написания статьи не закрытый. На моём кластере я видел это эпизодически — обычно после перезапуска guest agent в ВМ.

Что это значит на практике:

  • threshold-алерты по RAM ВМ давать не стоит, пока баг не закрыт — будут ложные срабатывания;

  • алерты «storage free < 15%» и «backup not run > 24h» бага не касаются — там агрегация на уровне datastores и заданий, не per-VM.

Cluster degraded false-positive в старых версиях

В версиях ветки 5.0.x был ложный сигнал «Pulse declare Proxmox Cluster as degraded» — Issue #1085, закрыт в январе 2026. В 5.1.x это устранено. Если разворачиваетесь сейчас, проблема неактуальна, но если у вас стоит ранняя версия — повод обновиться.

Cluster network detection требует ручной настройки

Pulse предполагает, что кластерная сеть Proxmox совпадает с API-сетью. На инфраструктурах с разнесёнными VLAN это не так, и API-endpoint каждой ноды надо указывать руками. Сценарий обсуждается в Discussion #781. Если у вас сеть «как из учебника» — проблемы не увидите. Если разнесено — заложите час на наладку.

Pulse работает в одной копии и сам становится единой точкой отказа

Pulse живёт в одном LXC. Если контейнер падает или его хост перезагружается — мониторинг отсутствует. У Pulse Community нет встроенной HA-схемы, нескольких реплик и кворума. Минимальная страховка — регулярный бэкап LXC (PBS справится) и быстрый restore. Для важных продакшнов имеет смысл вынести Pulse-LXC на отдельный хост, не входящий в основной production-кластер: иначе при падении кластера, который вы и хотели мониторить, пропадает и мониторинг.

Что проверять после обновления Pulse или Proxmox

Релизы Pulse выходят часто. Регрессии случаются. Минимальный чек-лист после апдейта:

  • открыть дашборд, проверить, что все ноды и PBS на месте;

  • проверить, что Patrol-сканы прошли и не залипли в running;

  • послать тестовый Telegram-алерт через Send Test;

  • сравнить число активных правил алертов с тем, что было до апдейта.

После апгрейда Proxmox VE — то же самое: смотрим, что Pulse корректно видит все ноды и PBS, особенно если меняется major-версия.

Когда Pulse подходит

Если коротко: когда нужен быстрый первый экран с минимальной обвязкой. Чек-лист, когда Pulse — обоснованный выбор:

  • небольшой или средний Proxmox-кластер (десятки нод, сотни ВМ/контейнеров);

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

  • задача — быстро увидеть состояние и поймать очевидные эксплуатационные проблемы;

  • Telegram уже используется как канал уведомлений;

  • нет жёстких требований к ролевому доступу, журналу аудита, интеграции с SIEM и формальному compliance;

  • нет ресурса поддерживать отдельный observability-стэк.

В этих сценариях Pulse Community закрывает основную потребность. Relay становится оправдан, когда нужен удалённый доступ к UI и мобильное приложение для дежурного.

Когда Pulse не подходит

Перечисляю без смягчений, потому что выбор инструмента — это честная оценка границ.

  • Enterprise-окружение с обязательным RBAC. Несколько групп администраторов с разными правами на разные кластеры — это уже Pro или другой инструмент с зрелой моделью доступа.

  • Формальный аудит и compliance (ФЗ-152, ISO 27001, PCI DSS): нужен централизованный журнал действий, выгрузка событий в SIEM, сроки хранения. Pulse Pro отдаёт события через audit webhooks, но это не замена SIEM.

  • Долгосрочное хранение метрик. Если нужны метрики за год для планирования ёмкостей — сюда подходит Prometheus + remote write в долговременную time-series базу (Mimir, Thanos, VictoriaMetrics).

  • Сложная маршрутизация алертов. Эскалации, дежурные смены (on-call rotation), дедупликация, заглушки на окна обслуживания (silencing) — здесь нужен Alertmanager или PagerDuty/Opsgenie.

  • SLO/SLA-отчётность. Если у вас договоры с SLA и нужны формальные отчёты — это про Grafana с дашбордами или специализированные инструменты.

  • SIEM-интеграция. Pulse не SIEM. Если у вас есть SIEM, мониторинг должен в него поставлять события, а не быть их единственным держателем.

Альтернативы под эти сценарии: Zabbix (универсальный), Prometheus + Alertmanager + Grafana (метрики и алерты), Wazuh/Elastic (security и compliance), специализированные log-стэки под аудит.

Итог

Pulse в моём сценарии закрыл задачу первого экрана видимости для Proxmox-кластера. Он не заменяет полноценный мониторинг, но закрывает базовый набор: состояние нод, бэкапов, ZFS и storage; простой набор алертов в Telegram; авто-диагностика структурных проблем через Patrol.

Когда в кластере накоплен операционный долг — отключённые таймеры, забытые конфиги, дрейф репозиториев, — Patrol это подсвечивает в первые дни эксплуатации. Это не магия инструмента, а свойство того, что он смотрит на конфигурацию, а не только на метрики.

Когда требования вырастают до ролевого доступа, аудита, отчётов по SLO и интеграции с SIEM, разумный путь — наращивать наблюдаемость на классических инструментах: Zabbix, Prometheus + Alertmanager + Grafana, SIEM. Pulse в этом сценарии остаётся оперативным дашбордом, но перестаёт быть единственным мониторингом.

Если у вас тоже Proxmox-кластер после миграции с проприетарного гипервизора — расскажите в комментариях, как вы решаете задачу первого экрана. И если есть опыт эксплуатации Pulse в продакшне больше нескольких месяцев — особенно интересны истории, где он не сработал: что именно не закрыл, какой инструмент пришлось ставить рядом.


Ссылки и материалы