Uptime Kuma 和 Prometheus + Grafana 怎么选?我拿 2C2G 小机器跑了 90 天

🔑 关键词:Uptime Kuma,Prometheus,Grafana,开源监控,告警配置

📖 摘要:不是二选一:Uptime Kuma 负责活没活和状态页,Prometheus 负责趋势和容量。附 2C2G 机器上的资源占用、Docker 参数、告警规则和踩坑顺序。

先说我自己的情况

我有台腾讯云轻量 2C2G,Ubuntu 22.04,Docker 24.0.7,compose v2.23.0。 去年 8 月先装了 Uptime Kuma 1.23.13,端口 3001,数据挂到 /opt/uptime-kuma,SQLite。 监控 41 个目标:12 个网页、8 个 API、6 个 TCP、3 个 DNS、2 个 Docker 容器、10 个证书到期。 检查间隔 60 秒,重试 3 次,超时 10 秒,Telegram 通知。 跑了 90 天,内存 180-260MB,CPU 平均 1.8%,数据库 210MB。

问题不是它能不能用,而是它回答不了为什么

凌晨 3 点备份,API 偶尔超时。 Uptime Kuma 只给我一条:宕机 2 分钟。 我翻 heartbeat,只有响应时间折线,不知道是 MySQL 锁、磁盘 IO 还是备份进程把带宽吃满。 后来我加了 Prometheus 2.48、Grafana 10.2、node_exporter 1.7、blackbox_exporter 0.24、Alertmanager 0.26。 内存从 260MB 冲到 1.1GB,2C2G 开始 swap,Grafana 首屏 5 秒。 那一刻我明白:小机器上,监控全家桶不是不行,是会把你本来就紧张的资源再砍一刀。

硬对比:别只看功能列表

维度 Uptime Kuma 1.23.x Prometheus + Grafana + exporters
部署 单容器,端口 3001,MIT 至少 4 个容器:9090/3000/9100/9115
模型 主动探测 HTTP/TCP/Ping/DNS/Docker/Push 拉取 exporter,PromQL 查询
告警 内置通知,Telegram/邮件/Webhook Alertmanager,分组/静默/抑制更强
数据 SQLite,心跳和响应时间,保留天数可设 TSDB,默认 15d,可 retention 30d/90d
证书 HTTP 监控里直接看到期 blackbox 的 probe_ssl_earliest_cert_expiry
状态页 自带公开状态页 Grafana 能做,但权限和样式要折腾
资源 41 个目标约 260MB 同样目标我这边 1.1GB 起

我的做法:不是二选一,是分工

Uptime Kuma 继续管“活没活”和对外状态页。 Prometheus 只抓 8 个关键指标:up、probe_duration_seconds、probe_ssl_earliest_cert_expiry、node_load1、node_memory_MemAvailable_bytes、node_filesystem_avail_bytes、node_disk_io_time_seconds_total、node_network_receive_bytes_total。 retention 设 30d,Grafana 只留 2 个 dashboard,Alertmanager 只开 3 条规则:up == 0 for 2m、证书小于 14 天、probe_duration_seconds > 3 for 5m。 内存回到 700MB 左右,没再 swap。 这套方案丑,但能跑。

如果你要抄作业,按这个顺序

  1. 先装 Uptime Kuma:docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1。
  2. 浏览器进 http://服务器IP:3001,设管理员,加 HTTP(s),间隔 60,重试 3,超时 10,通知选 Telegram。
  3. 只有当你需要趋势、P95、容量、多主机指标,再上 Prometheus。prometheus.yml 里 scrape_interval: 15s,evaluation_interval: 15s。
  4. blackbox job 用 metrics_path: /probe,params 里 module: [http_2xx],targets 写你的 URL,relabel 把 address 换成 __param_target,instance 换成目标地址。
  5. blackbox.yml 写 http_2xx,prober: http,timeout: 5s,preferred_ip_protocol: ip4。证书规则:(probe_ssl_earliest_cert_expiry - time()) / 86400 < 14。
  6. 资源不够就砍:Prometheus 加 --storage.tsdb.retention.time=30d,Grafana 关掉不用的插件,Alertmanager 别接一堆无用通知。

最后一句不中听的

Uptime Kuma 不是玩具,Prometheus 也不是信仰。 2C2G 小机器先保证告警能到你手机,再去追指标维度。 你要是连 41 个目标的 60 秒探测都没跑稳,上 15 秒抓取只会让 swap 教你做人。 开源软件最大的坑不是 license,是你以为它能顺手把你所有问题都解决。 如果你也在用小机器跑监控,先问自己一句:我到底想知道“它死了没”,还是“它为什么慢”。

🏷️ 标签: