MIT License

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

项目背景与痛点

自托管基础设施的运维者大多踩过同一个坑:Proxmox VE 上跑虚拟机、PBS 负责备份、Docker 里塞满各种服务、TrueNAS 存着唯一一份数据副本,偶尔还遗留一个 vSphere 老集群。每个平台都有自己的 Web UI,但"整体是否健康"这个问题,需要你在五个浏览器标签页之间来回切换才能拼凑出来。

更关键的是,真正致命的问题恰恰不体现在任何静态图表上——昨晚的 vzdump 任务失败了、ZFS 池悄悄涨到了 92%、某个容器在无限重启、集群里一台节点已经掉线三小时。这些事件需要主动告警,而不是靠人类定时巡检。Pulse 的定位正是这一点:把多源异构的虚拟化与容器平台聚合成一个统一的健康视图,并把"异常"从指标里提炼出来,变成可推送的事件。

核心技术揭秘

从"单二进制、自托管、零外部依赖"这三个约束倒推,Pulse 的技术选型几乎是被决定的:Go 后端 + 编译期嵌入的前端静态资源 + 嵌入式 SQLite,不引入 Prometheus、InfluxDB 这类重型时序组件。这在 homelab 场景里是决定性的优势——一个 docker run 就能起来。

真正的难点在采集层。Proxmox VE 走 /api2/json,PBS 是另一套任务模型,Docker 用 Engine API,Kubernetes 靠 client-go 的 informer,vSphere 走 govmomi,TrueNAS 则是自己的 REST 接口。合理的做法是定义统一的 Provider 接口,每个平台实现"枚举资源"和"采样状态"两组方法,把各自原始 JSON 归一化成同一套资源模型。

这里的隐蔽成本是语义对齐:PVE 的 storage、TrueNAS 的 dataset、vSphere 的 datastore 是同一概念三种形态;"备份是否成功"在 PBS 里是任务的 exitstatus,在 PVE 里要从 vzdump 日志尾部解析。这类映射写起来枯燥,却直接决定告警准确率。

整体数据流大致如下:

graph TD A[Proxmox VE / PBS] --> C[采集适配层 Provider] B[Docker / K8s / TrueNAS / vSphere] --> C C --> D[统一资源模型] D --> E[状态聚合与派生计算] E --> F{"规则评估"} F -->|"阈值命中"| G[告警引擎-去重与冷却] F -->|"状态正常"| H[指标快照入库] G --> I[增量推送通道] H --> I I --> J[前端实时面板] G --> K[通知渠道]

值得单独说的是告警引擎。它不能是"每轮采样命中条件就发一条",那样必然告警风暴。成熟实现会做三件事:用资源指纹去重、设置冷却窗口、只在状态迁移时触发(healthy → critical 才通知,持续 critical 不重复轰炸)。这也是大量同类工具最容易翻车的地方。前端侧则以 WebSocket 推送增量,只重渲染发生变更的卡片,避免整页刷新。

功能亮点与差异

覆盖面是它最明显的优势。 同时接入 PVE/PBS/Docker/K8s/TrueNAS/vSphere,在开源监控里并不多见。主流方案要么是 Grafana + 一堆 exporter(配置成本极高,且要自己写 PromQL),要么是 Uptime Kuma 这类只探测端口可用性的工具。

它面向"事件"而非"指标"。 告警语义直接是"备份失败"“磁盘满”“容器不健康”“节点离线”,贴合运维者的心理模型,而不是要求你先学会写查询语句。对不想要一套完整可观测性栈的中小环境,这个取舍非常务实。

自托管 + 无外部依赖,数据不出内网,也省掉了维护时序数据库的心力。

代价同样存在:广度必然折损深度,单个平台的指标覆盖远不如专用 exporter;轮询模型决定了延迟下限;SQLite 在超大规模下会碰到天花板。

应用场景与落地建议

适合:homelab、10–50 个节点的中小企业内网、托管服务商面向客户的前置健康视图。

不适合:需要长期指标留存、容量趋势预测、多副本高可用的大型环境——这类需求应当交给 Prometheus + VictoriaMetrics,Pulse 只做聚合与告警层。

生产落地时注意几点:

  • 权限最小化。PVE 用只读的 PVEAuditor 角色和 API Token,不要图省事给 root@pam。
  • 控制采集频率。/cluster/resources 这类全量接口在节点多时代价不小,高频轮询会给 PVE 主节点带来额外负载。
  • WebSocket 要过得了反向代理。nginx 需显式配置 Upgrade 与 Connection 头,否则实时面板会退化成不刷新。
  • 持久化数据目录。SQLite 文件必须挂载到卷上,升级前做好备份,schema 变更不总是向后兼容。
  • 设置静默窗口。计划内维护、备份窗口期主动静默,避免噪音训练出"告警免疫"。

综合评价

优点:定位精准、平台覆盖广、部署成本极低、告警语义贴近真实运维动作,尤其适合被多个平台割裂视图困扰的自托管用户。

缺点:广度换来的是深度不足;轮询架构有天然延迟;单二进制 + SQLite 在规模与高可用上遇到瓶颈;告警准确性高度依赖各平台 API 的版本兼容性,上游接口变更时需要跟进。

一句话总结:Pulse 更像一个基础设施健康状态聚合器,而不是一套监控系统。把它放在"统一视图 + 事件告警"的位置上,它非常好用;指望它承担长期时序存储与容量分析,你会失望。

关于

GitHub 原始描述(英文)

Real-time monitoring dashboard for Proxmox VE, PBS, Docker, Kubernetes, TrueNAS and vSphere. Self-hosted, with alerts for failed backups, full disks, unhealthy containers and offline nodes.

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

语言占比

CSS
Dockerfile
Go
Go Template
HTML
JavaScript
Makefile
PowerShell
Python
Shell
TypeScript

README

Pulse

Pulse logo

Real-time Proxmox, Docker and Kubernetes monitoring that finds what needs attention.

GitHub Stars GitHub Release Docker Pulls License

Live demo · Documentation · Releases · Discussions

Pulse is a self-hosted dashboard and alerting tool for your homelab or infrastructure. Point it at Proxmox, Docker, Kubernetes, TrueNAS, vSphere or your own Linux, Windows and macOS machines, and it shows their health in one place, keeps the history, and tells you when something needs attention: a failed backup, a filling disk, an unhealthy container, a node that dropped offline.

Pulse Proxmox overview

Want to look around first? The live demo runs on sample data and signs you in automatically.

What Pulse does

  • Gives each platform its own page. Proxmox, Docker, Kubernetes, TrueNAS, vSphere and machines each get a view that matches how you already think about them, with storage and backups beside the systems they belong to.
  • Alerts you when it matters. Set thresholds for CPU, memory, disk, temperature and more, and get notified by email or through Discord, Slack, Teams, Telegram, ntfy, Gotify, Pushover, PagerDuty or any webhook.
  • Checks the things that can’t run an agent. Ping, TCP, UDP and HTTP(S) availability checks cover routers, printers and web services, with certificate-expiry warnings.
  • Keeps history. Every guest, container and host has charts: seven days in Community, ninety in Pro.
  • Optional AI checks. Connect your own AI provider or a local model and Pulse Patrol runs scheduled checks for problems a dashboard only shows if someone is looking.
  • Answers your own AI agent. Point Claude Code, Codex or OpenCode at Pulse with pulse-mcp and ask what changed overnight, whether a host rebooted, or how a disk filled up. A read-only token is enough.
  • Stays hands-off by default. Proxmox is read through a read-only API token, credentials are encrypted at rest, and agent commands stay off unless you turn them on.

Supported platforms

Platform What Pulse shows
Proxmox VE, PBS and PMG Nodes, VMs and containers, storage, backups, replication, Ceph and mail gateways
Docker and Podman Hosts, containers, Compose projects, Swarm services, health, images and updates
Kubernetes Clusters, nodes, workloads, pods, services, storage and events
TrueNAS SCALE and CORE Pools, datasets, disks, snapshots, replication tasks, apps and VMs
Linux, Windows and macOS Host health, filesystems, networking, temperatures, RAID and availability
VMware vSphere (early access) Hosts, clusters, VMs, datastores, networks and snapshots; validate against your own vCenter before relying on it

Install

Pulse is one container or service listening on port 7655. The commands below install the current stable version. If a newer release is out, use its tag instead.

Docker

docker run -d \
  --name pulse \
  -p 7655:7655 \
  -v pulse_data:/data \
  -e PULSE_DEPLOYMENT_METHOD=docker_run \
  --restart unless-stopped \
  rcourtman/pulse:v6.7.0

The Pulse container does not need the Docker socket. Docker hosts are monitored by the agent described below.

Proxmox LXC or Linux

The installer is signed. This block downloads it, verifies it against the pinned pulse-installer key, and only then runs it:

export PULSE_VERSION=v6.7.0
curl -fsSLO "https://github.com/rcourtman/Pulse/releases/download/${PULSE_VERSION}/install.sh" &&
curl -fsSLO "https://github.com/rcourtman/Pulse/releases/download/${PULSE_VERSION}/install.sh.sshsig" &&
ssh-keygen -Y verify \
  -f <(printf '%s\n' 'pulse-installer namespaces="pulse-install" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZd/DaH+BldzOkq1A8KVTcFk73nAyrE8aJOyf7i00jm pulse-installer') \
  -I pulse-installer \
  -n pulse-install \
  -s install.sh.sshsig < install.sh &&
bash install.sh --version "${PULSE_VERSION}"

Paste the whole block. If a download or the signature check fails, it stops; don’t run the last line on its own to get past a failure.

Also available: Docker Compose, Kubernetes with Helm and the full install guide.

First run

Open http://<your-ip>:7655 and paste the one-time setup token. Get it with docker exec pulse /app/pulse bootstrap-token on Docker, or sudo pulse bootstrap-token on Linux (the LXC installer prints the exact command). Create your admin account, then add your first system with Add infrastructure under Settings → Infrastructure.

Do you need an agent?

Often not. Proxmox VE, PBS and PMG are monitored through their API with a read-only token, so no Pulse host agent is required; the generated setup script creates a privilege-separated monitoring user. Install the unified agent where an API can’t give Pulse what you want: Docker and Podman hosts, Kubernetes, standalone machines, or host SMART health and temperatures.

Agents, including v5-to-v6 agent upgrades, are installed with the per-host command under Settings → Infrastructure → Install on a host. The GitHub installer above is for the Pulse server only. Command execution is off by default, the agent’s local listener binds to localhost, and on Linux --least-privilege runs it as a dedicated non-root user. The agent security model lists what it can and cannot do at each privilege level.

[!WARNING] API-only does not mean guest-agent-free. VM filesystem and memory requests through QEMU Guest Agent can share the channel used by freeze-enabled backups. Read-only permissions do not prove backup safety. Do not add permissions, enable or restart an agent, or send manual guest-agent probes during a backup, freeze or thaw. An OK backup task does not prove successful thaw. Stopping Pulse also stops its monitoring and alerts. Read the backup safety precaution before you need it.

Editions

  • Community (free, this repository): self-hosted monitoring, seven days of metric history, core SSO, update alerts, and Patrol with your own AI provider or a local model.
  • Pro: Community plus Patrol investigation and fixes, ninety days of history, centralized agent profiles, RBAC, audit logging and reporting.
  • MSP: one Pulse Account running isolated workspaces for each client, with separate dashboards, alerts, users, audit history and reports. Try it free for sixty days with two clients at Pulse for MSPs.

Core self-hosted monitoring is not gated by how many systems or child resources you monitor. See the capability reference and current plans.

[!IMPORTANT] GitHub release assets and rcourtman/pulse images are Community builds. Pro, Relay and eligible legacy customers should install the private image or Linux archive from the Pulse download portal. Replacing a private Pro runtime with a Community build removes its private runtime hooks.

Relay is no longer sold. Existing subscribers keep Pro features at their current price for as long as their subscription continues, and paired phones keep working until 31 March 2027. Relay connects the app, not the web UI: use your own VPN or tunnel for remote access, and add an ntfy, Gotify or Pushover destination for phone alerts.

Documentation

Getting started in other languages: Deutsch · Español · Français

Community and support

Before filing a bug, read the safe reporting guidance. Your original evidence is enough. A second reproduction or diagnostics export is not required, so please don’t repeat anything that could interrupt workloads or send duplicate notifications. GitHub reports and attachments are public: review them locally and keep credentials and private details out.

Development

Pulse is Go 1.26 with a SolidJS and TypeScript frontend. The managed dev runtime serves the frontend at http://127.0.0.1:5173 and proxies API and WebSocket traffic to the backend on port 7655.

npm ci
npm --prefix frontend-modern ci
npm run dev

Read CONTRIBUTING.md before starting on a change: Pulse works issue-first and does not normally accept unsolicited pull requests.

License

Everything in this repository is MIT licensed, with no dual licensing and no source-available code. Pulse Pro is a separate commercial product built from private sources, sold through pulserelay.pro under Terms of Service that apply to that product only.

评论

暂无评论