主题模式
Are you an LLM? You can read better optimized documentation at /ai/homelab/uptime-kuma.md for this page in Markdown format
Uptime Kuma 自托管监控面板:服务健康状态实时追踪
家庭实验室里跑了 Jellyfin、Nextcloud、Pi-hole、Immich 一堆服务,哪个挂了你可能半天都不知道。Uptime Kuma 是一款开源的轻量级监控工具,可以实时追踪所有服务的运行状态,出问题时第一时间推送通知。
相比 UptimeRobot 等第三方监控服务,Uptime Kuma 的优势:
- 完全自托管:数据在自己手里,不依赖第三方
- 无监控数量限制:免费版 UptimeRobot 只能监控 50 个,Uptime Kuma 无限制
- 多协议支持:HTTP/HTTPS、TCP、DNS、Ping、Docker 容器、数据库等
- 90+ 通知渠道:Telegram、Discord、邮件、Webhook、钉钉、飞书等
- 状态页面:生成公开的服务状态页,类似 GitHub Status
| 特性 | Uptime Kuma | UptimeRobot 免费版 | Grafana |
|---|---|---|---|
| 自托管 | ✅ | ❌ | ✅ |
| 免费监控数 | 无限 | 50 个 | 无限 |
| 部署难度 | 极低 | 无需部署 | 较高 |
| 通知渠道 | 90+ | 3 种 | 10+ |
| 状态页面 | ✅ 内置 | ✅ 有限 | ✅ 需配置 |
| 资源占用 | ~50MB | 无 | ~500MB+ |
| 适合场景 | 个人/小团队 | 入门 | 企业级监控 |
🛠️ 准备工作
硬件需求
| 配置 | 最低 | 推荐 |
|---|---|---|
| CPU | 1 核 | 2 核(N100 足够) |
| 内存 | 128MB | 512MB |
| 硬盘 | 1GB | 5GB(含日志) |
软件环境
- Docker(必备)
- 域名(可选,用于状态页面访问)
🐳 Docker 部署
一键部署
bash
mkdir -p /root/data/docker_data/uptime-kuma
cd /root/data/docker_data/uptime-kuma
nano docker-compose.ymlyaml
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
ports:
- '3001:3001'
volumes:
- ./data:/app/data
environment:
- TZ=Asia/Shanghai
restart: unless-stopped启动服务:
bash
docker compose up -d端口冲突
如果 3001 端口被占用(如 Immich 默认使用 3001),可以改为其他端口,如 3002:3001。
首次访问
打开浏览器访问 http://your-server-ip:3001:
- 创建管理员账号:设置用户名和密码
- 登录系统:进入监控面板
📊 配置监控项
1. HTTP/HTTPS 监控
最常用的监控类型,检测网站是否可访问。
| 配置项 | 推荐值 |
|---|---|
| 监控类型 | HTTP(s) |
| URL | https://jellyfin.your-domain.com |
| 心跳间隔 | 60 秒 |
| 超时时间 | 30 秒 |
| 重试次数 | 2 次 |
| 接受状态码 | 200-299 |
| 关键字 | 可选,检查页面是否包含特定内容 |
2. TCP 端口监控
监控数据库、SSH 等非 HTTP 服务:
| 配置项 | 示例 |
|---|---|
| 监控类型 | TCP Port |
| 主机名 | 192.168.1.100 |
| 端口 | 3306(MySQL) |
| 心跳间隔 | 60 秒 |
3. Ping 监控
检测服务器是否在线:
| 配置项 | 示例 |
|---|---|
| 监控类型 | Ping |
| 主机名 | 192.168.1.1(路由器) |
| 心跳间隔 | 60 秒 |
4. DNS 监控
监控 DNS 解析是否正常:
| 配置项 | 示例 |
|---|---|
| 监控类型 | DNS |
| 主机名 | 8.8.8.8 |
| 域名 | your-domain.com |
| 记录类型 | A |
5. Docker 容器监控
直接监控 Docker 容器运行状态:
| 配置项 | 示例 |
|---|---|
| 监控类型 | Docker Container |
| Docker 守护进程 | /var/run/docker.sock |
| 容器名称 | jellyfin |
Docker Socket 权限
需要将 Docker socket 挂载到 Uptime Kuma 容器中:
yaml
volumes:
- ./data:/app/data
- /var/run/docker.sock:/var/run/docker.sock:ro6. 数据库监控
| 数据库 | 监控类型 | 端口 |
|---|---|---|
| MySQL | MySQL | 3306 |
| PostgreSQL | PostgreSQL | 5432 |
| Redis | Redis | 6379 |
| MongoDB | MongoDB | 27017 |
🔔 通知配置
通知渠道一览
Uptime Kuma 支持 90+ 种通知方式,以下是常用的几种:
| 渠道 | 推荐场景 | 配置难度 |
|---|---|---|
| Telegram | 即时推送、免费 | ⭐ 简单 |
| Discord | 社区/团队 | ⭐ 简单 |
| 邮件 | 正式通知 | ⭐⭐ 中等 |
| 钉钉 | 国内企业 | ⭐⭐ 中等 |
| 飞书 | 国内企业 | ⭐⭐ 中等 |
| Webhook | 自定义集成 | ⭐⭐⭐ 较高 |
| 企业微信 | 国内企业 | ⭐⭐ 中等 |
配置 Telegram 通知
- 在 Telegram 中搜索 @BotFather,创建一个 Bot
- 获取 Bot Token
- 获取你的 Chat ID(可通过 @userinfobot 获取)
- 在 Uptime Kuma 中 设置 → 通知 → Telegram
- 填入 Bot Token 和 Chat ID
- 点击测试,收到测试消息即配置成功
配置钉钉通知
- 在钉钉群中添加自定义机器人
- 获取 Webhook URL 和密钥
- 在 Uptime Kuma 中 设置 → 通知 → DingDing
- 填入 Webhook URL 和密钥
- 测试通知
通知规则设置
每个监控项可以单独设置通知规则:
- 服务下线时通知:服务不可用时推送
- 服务恢复时通知:服务恢复时推送
- 连续 N 次失败才通知:避免误报
- 只在特定时间通知:如工作时间 9:00-18:00
yaml
# 推荐通知规则
重试次数: 2 # 连续 2 次失败才告警
心跳间隔: 60秒 # 每分钟检测一次
恢复通知: 开启 # 服务恢复时推送🌐 状态页面
Uptime Kuma 可以生成公开的服务状态页面,类似于 GitHub Status 或 Cloudflare Status。
创建状态页面
- 点击左侧 Status Pages → New Status Page
- 设置页面名称(如「银河云盘服务状态」)
- 选择要展示的监控项
- 设置页面主题和 Logo
- 点击 保存
配置自定义域名
如果使用 Nginx 反向代理:
nginx
server {
listen 443 ssl http2;
server_name status.your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持(实时更新需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}状态页面效果
状态页面展示内容:
- 整体状态:所有服务正常运行时显示绿色 ✅
- 各服务状态:每个服务的当前状态和响应时间
- 历史可用率:过去 24 小时 / 7 天 / 30 天的可用率
- 事件历史:记录每次故障和恢复的时间线
📈 监控数据与统计
响应时间图表
Uptime Kuma 记录每次检测的响应时间,以图表形式展示:
- 实时数据:当前响应时间
- 趋势图:过去 24 小时响应时间变化
- 统计信息:平均、最大、最小响应时间
可用率统计
| 时间范围 | 可用率计算 |
|---|---|
| 24 小时 | 正常次数 / 总检测次数 |
| 7 天 | 正常时间 / 总时间 |
| 30 天 | 正常时间 / 总时间 |
数据导出
Uptime Kuma 支持导出监控数据:
- 导出为 JSON:在设置中导出所有监控配置
- 数据库直接访问:数据存储在 SQLite 数据库中
bash
# 导出数据库
docker exec uptime-kuma cat /app/data/kuma.db > kuma-backup.db🔧 进阶配置
分组管理
当监控的服务较多时,可以使用分组管理:
- 点击 Add Group 创建分组
- 将相关监控拖入同一分组
- 常见分组方式:
| 分组 | 包含的服务 |
|---|---|
| 核心服务 | Nextcloud, Jellyfin, Immich |
| 网络服务 | Pi-hole, 路由器, Tailscale |
| 数据库 | PostgreSQL, Redis |
| 外部服务 | Google, GitHub, Docker Hub |
代理配置
如果需要监控内网服务但 Uptime Kuma 部署在外网,可以配置代理:
yaml
environment:
- HTTP_PROXY=http://proxy:8080
- HTTPS_PROXY=http://proxy:8080多实例部署
对于大规模监控,可以部署多个 Uptime Kuma 实例:
- 实例 1:监控内网服务
- 实例 2:监控公网服务
- 实例 3:监控 API 端点
与 Prometheus 集成
如果已有 Prometheus 监控体系,可以通过 Prometheus Exporter 将 Uptime Kuma 数据导入:
bash
# 使用 prometheus-exporter
# 需要额外部署 exporter 容器🔒 安全加固
1. 配置 HTTPS
通过 Nginx 反向代理配置 Let's Encrypt 证书,或使用 Cloudflare Tunnel。
2. 禁用公开注册
Uptime Kuma 首次设置后自动关闭注册,无需额外配置。
3. 配置防火墙
bash
# 只允许内网访问
ufw allow from 192.168.1.0/24 to any port 3001
# 通过反向代理时,只允许本机
ufw deny 3001
ufw enable4. 定期备份
bash
#!/bin/bash
# uptime-kuma-backup.sh
BACKUP_DIR=/root/backups/uptime-kuma
DATE=$(date +%Y%m%d)
# 备份数据库
docker exec uptime-kuma cat /app/data/kuma.db > $BACKUP_DIR/kuma-$DATE.db
# 保留最近 30 天
find $BACKUP_DIR -name "*.db" -mtime +30 -deletebash
# 每天凌晨 3 点备份
crontab -e
0 3 * * * /bin/bash /root/scripts/uptime-kuma-backup.sh❓ 常见问题
Q: 监控显示服务不可用但实际正常运行?
排查步骤:
- 检查监控 URL/端口是否正确
- 确认 Uptime Kuma 容器网络能访问目标服务
- 如果是 HTTPS 监控,检查证书是否过期
- 尝试增加超时时间
- 检查 Docker 网络隔离问题
Q: Telegram 通知收不到?
解决方案:
- 确认 Bot Token 正确
- 确认 Chat ID 正确(不是用户名)
- 检查服务器能否访问 Telegram API(可能需要代理)
- 先给 Bot 发一条消息,激活会话
Q: 状态页面无法实时更新?
解决方案:
- 确认 Nginx 配置了 WebSocket 支持
- 检查反向代理的
proxy_read_timeout设置 - 确认浏览器没有禁用 WebSocket
Q: 数据库越来越大怎么办?
解决方案:
bash
# 进入容器清理历史数据
docker exec -it uptime-kuma sqlite3 /app/data/kuma.db
# 清理 30 天前的心跳记录
DELETE FROM heartbeat WHERE time < datetime('now', '-30 days');
VACUUM;Q: 如何迁移到新服务器?
步骤:
bash
# 1. 停止旧服务
docker compose down
# 2. 备份数据
scp -r /root/data/docker_data/uptime-kuma/ new-server:/root/data/docker_data/uptime-kuma/
# 3. 在新服务器启动
cd /root/data/docker_data/uptime-kuma
docker compose up -d🚀 推荐搭配
| 工具 | 用途 | 推荐程度 |
|---|---|---|
| Grafana | 指标可视化 | ⭐⭐⭐⭐ |
| Prometheus | 指标采集 | ⭐⭐⭐⭐ |
| Loki | 日志聚合 | ⭐⭐⭐ |
| Alertmanager | 告警管理 | ⭐⭐⭐⭐ |
| Healthchecks | 定时任务监控 | ⭐⭐⭐⭐⭐ |
完整监控体系
Uptime Kuma → 服务可用性监控(HTTP/TCP/Ping)
+
Prometheus → 指标采集(CPU/内存/磁盘/网络)
+
Grafana → 数据可视化仪表盘
+
Loki → 日志聚合分析📋 配置清单
| 项目 | 推荐配置 |
|---|---|
| 服务器 | N100 小主机 / 树莓派 4 |
| 监控端口 | 3001 |
| 通知渠道 | Telegram + 邮件 |
| 心跳间隔 | 60 秒 |
| 重试次数 | 2 次 |
| 备份策略 | 每日 SQLite 数据库备份 |
🔗 相关文章
- Immich 自托管照片管理 - 照片备份与 AI 管理
- Nextcloud 私有云盘 - 文件同步与共享
- Cloudflare Tunnel 实战 - 安全远程访问
- Jellyfin 搭建指南 - 家庭媒体中心
- Pi-hole 广告拦截 - 家庭网络广告过滤
