Uptime Kuma 服务监控告警系统搭建

服务器上跑了 22 个容器,怎么知道哪个挂了?人工一个一个 ping 太蠢了。Uptime Kuma 帮我解决了这个问题——一个 Web 界面展示所有服务状态,挂了立刻通知。

为什么用 Uptime Kuma

- 界面好看 — 比 Prometheus + Grafana 简单 100 倍

- 通知丰富 — 钉钉、飞书、Telegram、邮件都能推送

- Docker 部署 — 一条命令

- 自托管 — 数据在自己手上

部署

version: "3.8"

services:

uptime-kuma:

image: louislam/uptime-kuma:1

container_name: uptime-kuma

restart: unless-stopped

ports:

- "3001:3001"

volumes:

- ./uptime-data:/app/data

networks:

- app

networks:

app:

driver: bridge

访问 http://IP:3001,首次设置管理员账号。

添加监控

后台点「新增监控」,支持:

HTTP(s)

监测网站是否返回 200:

- URL: https://soulwrite.xyz

- 间隔: 60 秒

- 关键字: 填一个页面特有内容,确认返回正确

TCP 端口

监测服务端口是否活着:

- 主机名: halo

- 端口: 8090

Docker 容器

直接监测容器状态:

- Docker 容器名称: halo

- 容器 ID 或名称填「halo」

通知配置

设置 → 通知,按需开启:

Telegram

- Bot Token: @BotFather 创建

- Chat ID: 你的 ID

- 测试:点「发送测试」

钉钉(Webhook)

- Webhook URL: 钉钉机器人 Webhook 地址

- 安全设置:加签或关键字

邮件

- SMTP 主机、端口、用户名、密码

- 收件人邮箱

状态页面

Uptime Kuma 可以生成公开状态页:

1. 设置 → 状态页面

2. 添加公开状态页

3. 把想展示的监控项拖进去

4. 生成链接,分享出去

我给每个服务单独做了状态页:

- status.soulwrite.xyz/halo

- status.soulwrite.xyz/ai

- status.soulwrite.xyz/media

踩坑记录

坑 1:监控不到容器内服务

最初用 HTTP 监测容器,容器名解析不到。改成「TCP 端口」模式,填容器名加端口:

halo:8090

Docker 自定义网络下,容器名就是 DNS。

坑 2:通知发不出去

Telegram 机器人被限制了。加了代理或者换 Webhook 为「浏览器通知」做测试。

坑 3:SSL 证书过期没提示

HTTP 监测返回 301 会算失败。后来加了「允许状态码」:

200-399

我的监控列表

| 服务 | 类型 | 间隔 |

|------|------|------|

| soulwrite.xyz | HTTP | 60s |

| halo:8090 | TCP | 60s |

| ollama:11434 | TCP | 120s |

| alist:5244 | TCP | 60s |

| mysql:3306 | TCP | 180s |

总结

Uptime Kuma 是我运维离不开的工具:

- 部署简单 — Docker 一条命令

- 监控全面 — HTTP/TCP/Docker/Ping/DNS 都行

- 通知及时 — 挂了立刻推 Telegram/钉钉

- 零成本 — 开源免费

22 个容器里,Uptime Kuma 是最让我安心的一个。