上个月的一天,朋友早上发我消息:网盘打不开了。
我远程一看,Cloudreve 容器在跑,但反代挂了——前一天晚上改 nginx 配置,手滑删错一行,重启之后没测。
关键是我一晚上都不知道。他早上要用才发现。
这种事不能靠人肉发现。装个监控,挂了自动通知我。
这篇写 Uptime Kuma 的完整配置,包括 Telegram 通知怎么搞。
它是什么
开源的监控面板,一个容器:
- 监控 HTTP、TCP、Ping、DNS、容器状态
- 挂了发通知(Telegram、邮件、企业微信、钉钉、Server 酱,几十种渠道)
- 有状态页,可以公开给朋友看"服务在不在"
- 有历史运行曲线
界面有点像 Pingdom,但自己部署,免费。
一、compose 配置
services:
uptime-kuma:
container_name: uptime-kuma
image: louislam/uptime-kuma:1
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- /opt/docker/uptime-kuma/data:/app/data
environment:
- TZ=Asia/Shanghai
mem_limit: 256m
起来后访问 http://IP:3001,注册管理员账号。
注意用 :1 这个 tag,跟着 1.x 大版本走,别用 latest——latest 可能拉到大版本跳跃的镜像,数据迁移容易出问题。
二、先加几个必要的监控
点右上角"添加监控",填:
1. 站点可用性(HTTP)
| 字段 | 值 |
|---|---|
| 监控类型 | HTTP(s) |
| 名称 | 主站 |
| URL | https://www.moxiaoa.com |
| 心跳间隔 | 60 秒 |
| 重试次数 | 2 |
| 超时 | 10 秒 |
可选加"关键字":如果页面里包含某个特定字符串,才算正常。这样能防止"返回 200 但是白屏"的情况。
2. 证书到期
Uptime Kuma 对 HTTPS 站点会自动显示证书剩余天数,低于 14 天会告警。这个很实用,省得证书过期才发现。
3. 内网服务(TCP 端口)
有些服务没有域名,直接用 TCP 端口监控:
- 类型:TCP Port
- 主机:192.168.1.50
- 端口:8096
能连上就算正常。
4. 容器状态(Docker)
类型选 "Docker Container",填容器名。容器停了会告警,比端口检测更直接。
但要给它挂 docker socket:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
挂 socket 等于给它 root 权限,自己家里用没问题,别在公网暴露。
三、Telegram 通知(国内可用)
邮件通知最方便,但国内邮件容易被判垃圾邮件。Telegram 快、免费、稳定,但要用代理。
第一步:建 bot
Telegram 里搜 @BotFather,发 /newbot,按提示起名字,会给你一串 token:
123456789:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxxx
第二步:拿 chat_id
给你刚建的 bot 发一条消息,然后浏览器打开:
https://api.telegram.org/bot<你的token>/getUpdates
返回的 JSON 里找 "chat":{"id":123456789},这个数字就是 chat_id。
第三步:在 Uptime Kuma 里配
设置 → 通知 → 新建:
- 类型:Telegram
- Bot Token:贴刚才那串
- Chat ID:贴数字
- 勾选"默认启用"
问题来了:Uptime Kuma 容器要能访问 Telegram 的 API,国内服务器直连不通。
两个办法:
办法一:给容器配代理
environment:
- HTTP_PROXY=http://宿主机IP:7890
- HTTPS_PROXY=http://宿主机IP:7890
- NO_PROXY=localhost,127.0.0.1
前提是宿主机上有代理服务(clash 之类)。
办法二:用国内可用的通知渠道
- 企业微信群机器人(webhook,免费)
- 钉钉群机器人
- Server 酱(微信推送,有免费额度)
- Bark(iOS 推送)
我最后用的是企业微信机器人,国内直连,配起来比 Telegram 简单:
群设置 → 群机器人 → 添加 → 拿到 webhook 地址,贴到 Uptime Kuma 的 "Webhook" 通知里。
四、状态页
Uptime Kuma 可以生成一个公开页面,展示所有服务状态。
设置 → 状态页 → 新建:
- 标题:陌笑技术分享 · 服务状态
- 描述:本页展示各服务的实时运行状态
- 选择要展示的监控项
- 设置访问路径(比如
/status)
生成后地址是 http://IP:3001/status,可以挂到主站上,朋友自己就能查。
我给朋友配了一个,他现在不用每次问我"网盘好了没",自己看一眼。
五、通知策略怎么定
这里有个坑:通知发太多,人会麻木。
我一开始所有监控都开通知,结果 qBittorrent 因为下载任务重,每分钟抖一次,一晚上收了几十条。
后来改成:
| 服务 | 心跳 | 重试 | 通知 |
|---|---|---|---|
| 主站 | 60s | 2 次 | 开 |
| 网盘 | 60s | 3 次 | 开 |
| 影音库 | 120s | 3 次 | 开 |
| 下载器 | 300s | 5 次 | 关(抖是正常的) |
| 密码库 | 60s | 2 次 | 开,最重要 |
重试次数是关键:网络抖动一次不算挂,连续两三次才算。
六、几个坑
坑一:自己监控自己没意义
Uptime Kuma 跑在同一台机器上,如果整台机器断电、断网,它自己也挂了,什么通知都发不出去。
真要可靠,得在另一台机器上部署一个监控,互相监控。我目前是单点,接受这个局限——家里断电的概率,比我改配置改坏的概率低。
坑二:内网监控和公网监控要分开
监控 https://photo.xxx.com 是走公网绕一圈回来,能测出反代和证书的问题。
监控 192.168.1.50:2283 是内网直连,只测服务本身。
两个都要有,才能分清是"服务挂了"还是"反代挂了"。
坑三:HTTP 监控默认跟随重定向
如果站点 301 到一个错误地址,监控可能还是绿的。可以在监控设置里关掉"跟随重定向",或者加关键字检查。
坑四:数据会一直长
Uptime Kuma 的心跳记录默认保留很久,久了数据库会变大。在设置里把保留天数改成 30-90 天。
七、装完之后的实际效果
上线第三天就派上用场了:
凌晨两点,Jellyfin 容器 OOM 被系统杀掉,Uptime Kuma 检测到端口不通,企业微信机器人给我推了一条消息。
我早上看到,进 Portainer 重启容器,顺手加了内存限制。
以前这种情况,要等朋友白天用的时候才发现。现在几分钟内就知道。
最后
Uptime Kuma 是全家桶里"最不显眼但最有用"的一个服务:256M 内存,装完就忘了,出事的时候它是唯一会告诉你的人。
下一篇写 Watchtower——让这些容器自动更新,顺便把磁盘里堆的垃圾镜像清掉。
---
如果你也在折腾这套服务,碰到卡住的地方,可以加我微信 lige0552 聊聊。白天要上班,消息回得慢,看到都会回。