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 是最让我安心的一个。
Nginx/OpenResty UptimeKuma服务监控告警
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法