上个月的一天,朋友早上发我消息:网盘打不开了。

我远程一看,Cloudreve 容器在跑,但反代挂了——前一天晚上改 nginx 配置,手滑删错一行,重启之后没测。

关键是我一晚上都不知道。他早上要用才发现。

这种事不能靠人肉发现。装个监控,挂了自动通知我。

这篇写 Uptime Kuma 的完整配置,包括 Telegram 通知怎么搞。

它是什么

开源的监控面板,一个容器:

界面有点像 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)
名称主站
URLhttps://www.moxiaoa.com
心跳间隔60 秒
重试次数2
超时10 秒

可选加"关键字":如果页面里包含某个特定字符串,才算正常。这样能防止"返回 200 但是白屏"的情况。

2. 证书到期

Uptime Kuma 对 HTTPS 站点会自动显示证书剩余天数,低于 14 天会告警。这个很实用,省得证书过期才发现。

3. 内网服务(TCP 端口)

有些服务没有域名,直接用 TCP 端口监控:

能连上就算正常。

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 里配

设置 → 通知 → 新建:

问题来了:Uptime Kuma 容器要能访问 Telegram 的 API,国内服务器直连不通。

两个办法:

办法一:给容器配代理

environment:
  - HTTP_PROXY=http://宿主机IP:7890
  - HTTPS_PROXY=http://宿主机IP:7890
  - NO_PROXY=localhost,127.0.0.1

前提是宿主机上有代理服务(clash 之类)。

办法二:用国内可用的通知渠道

我最后用的是企业微信机器人,国内直连,配起来比 Telegram 简单:

群设置 → 群机器人 → 添加 → 拿到 webhook 地址,贴到 Uptime Kuma 的 "Webhook" 通知里。

四、状态页

Uptime Kuma 可以生成一个公开页面,展示所有服务状态。

设置 → 状态页 → 新建:

生成后地址是 http://IP:3001/status,可以挂到主站上,朋友自己就能查。

我给朋友配了一个,他现在不用每次问我"网盘好了没",自己看一眼。

五、通知策略怎么定

这里有个坑:通知发太多,人会麻木。

我一开始所有监控都开通知,结果 qBittorrent 因为下载任务重,每分钟抖一次,一晚上收了几十条。

后来改成:

服务心跳重试通知
主站60s2 次开
网盘60s3 次开
影音库120s3 次开
下载器300s5 次关(抖是正常的)
密码库60s2 次开,最重要

重试次数是关键:网络抖动一次不算挂,连续两三次才算。

六、几个坑

坑一:自己监控自己没意义

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 聊聊。白天要上班,消息回得慢,看到都会回。