先说我自己的情况
我有台腾讯云轻量 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。 这套方案丑,但能跑。
如果你要抄作业,按这个顺序
- 先装 Uptime Kuma:docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1。
- 浏览器进 http://服务器IP:3001,设管理员,加 HTTP(s),间隔 60,重试 3,超时 10,通知选 Telegram。
- 只有当你需要趋势、P95、容量、多主机指标,再上 Prometheus。prometheus.yml 里 scrape_interval: 15s,evaluation_interval: 15s。
- blackbox job 用 metrics_path: /probe,params 里 module: [http_2xx],targets 写你的 URL,relabel 把 address 换成 __param_target,instance 换成目标地址。
- blackbox.yml 写 http_2xx,prober: http,timeout: 5s,preferred_ip_protocol: ip4。证书规则:(probe_ssl_earliest_cert_expiry - time()) / 86400 < 14。
- 资源不够就砍:Prometheus 加 --storage.tsdb.retention.time=30d,Grafana 关掉不用的插件,Alertmanager 别接一堆无用通知。
最后一句不中听的
Uptime Kuma 不是玩具,Prometheus 也不是信仰。 2C2G 小机器先保证告警能到你手机,再去追指标维度。 你要是连 41 个目标的 60 秒探测都没跑稳,上 15 秒抓取只会让 swap 教你做人。 开源软件最大的坑不是 license,是你以为它能顺手把你所有问题都解决。 如果你也在用小机器跑监控,先问自己一句:我到底想知道“它死了没”,还是“它为什么慢”。