586_Uptime Kuma状态监控
一句话概述:Uptime Kuma 是开源自托管的状态监控工具,支持 HTTP/TCP/Ping/DNS 等多种监控方式,提供漂亮的状态页面和 90+ 种通知渠道,是 Pingdom/UptimeRobot 的免费替代品。
核心知识点表
| 概念 | 白话解释 |
|---|
| Monitor | 监控项,一个被监控的目标(网站、API、端口等) |
| Heartbeat | 心跳,定期检查目标是否在线的信号 |
| Status Page | 状态页面,展示服务在线状态的公开页面 |
| Notification | 通知,目标宕机时发送的告警消息 |
| Incident | 事件,手动或自动记录的故障事件 |
| Push Monitor | 推送监控,由服务主动发送心跳(适合定时任务) |
安装配置
Docker 安装(推荐)
# v2 版本安装(2025年10月发布)
docker run -d \
--name uptime-kuma \ # 容器名
--restart=always \ # 自动重启
-p 3001:3001 \ # Web 界面端口
-v uptime-kuma:/app/data \ # 持久化数据
louislam/uptime-kuma:2 # v2 版本标签
Docker Compose 安装
# docker-compose.yml
services:
uptime-kuma:
image: louislam/uptime-kuma:2 # v2 最新版
container_name: uptime-kuma # 容器名
restart: always # 始终重启
ports:
- "3001:3001" # Web 端口
volumes:
- ./data:/app/data # 数据持久化(必须是本地目录!)
docker compose up -d # 启动
# 浏览器打开:http://你的IP:3001
# 首次访问立即创建管理员账号(非常重要!)
重要注意事项
# 1. 安装后立即创建管理员账号!
# 否则任何人都能创建账号并控制你的监控系统
# 2. 数据目录不能使用 NFS!
# SQLite 不支持网络文件系统,必须使用本地磁盘
# 3. v2 相比 v1 的重大变化:
# - 支持 MariaDB 作为数据库后端
# - 提供 rootless Docker 镜像
# - 新 UI 界面
# - 移除了 JSON 备份/恢复功能
基本使用
添加监控项
# 在 Web 面板操作:
# 1. 点击 "Add New Monitor"
# 2. 选择监控类型:
# HTTP(s) — 监控网站和 API
# - URL:https://example.com
# - 方法:GET / POST / HEAD
# - 期望状态码:200
# - 检查间隔:60 秒
# TCP Port — 监控端口是否开放
# - Hostname:192.168.1.100
# - Port:3306(如 MySQL)
# Ping — ICMP ping
# - Hostname:192.168.1.100
# DNS — 监控 DNS 解析
# - Hostname:example.com
# - DNS Server:8.8.8.8
# - Record Type:A
# Docker Container — 监控容器健康状态
# - Container Name/ID:myapp
# - Docker Host:/var/run/docker.sock
# Push — 推送式监控(适合定时任务/cron job)
# - 生成一个 URL,你的服务定期请求这个 URL
# - 如果超时没收到请求,就告警
配置通知
# Settings → Notifications → Setup Notification
# 常用通知渠道:
# - Telegram:填入 Bot Token 和 Chat ID
# - Discord:填入 Webhook URL
# - Slack:填入 Webhook URL
# - Email (SMTP):填入 SMTP 服务器信息
# - Webhook:自定义 HTTP 请求
# - Bark(iOS 推送)
# - Gotify(自托管推送)
# - PushDeer / Pushover
# 支持 90+ 种通知方式!
# 可以给不同的监控项配置不同的通知渠道
创建状态页面
# Status Pages → 创建状态页面
#
# 1. 设置页面标题和描述
# 2. 选择要展示的监控项
# 3. 分组展示(如"网站服务"、"API服务"、"数据库")
# 4. 设置自定义域名(可选)
# 5. 发布 → 获得公开的状态页面 URL
#
# 状态页面显示:
# - 每个服务的当前状态(在线/离线/降级)
# - 历史可用性百分比
# - 响应时间图表
# - 手动添加的事件记录
高级用法
推送监控(Push Monitor)
# 适合监控定时任务和批处理:
# 1. 创建 Push 类型的 Monitor
# 2. 获取推送 URL(如 http://kuma:3001/api/push/xxxx)
# 3. 在你的脚本末尾添加:
# Bash 脚本示例
#!/bin/bash
# 你的定时任务逻辑
python process_data.py # 执行数据处理
# 任务完成后发送心跳
curl -s "http://kuma:3001/api/push/xxxx?status=up&msg=OK" # 报告成功
# 如果任务失败,发送失败心跳
# curl -s "http://kuma:3001/api/push/xxxx?status=down&msg=Failed"
# 在 crontab 中:
# 0 * * * * /path/to/your-script.sh
# Uptime Kuma 如果超过设定时间没收到心跳,就会告警
SSL 证书过期监控
# HTTP(s) 监控自动包含 SSL 证书检查:
# 1. 添加 HTTP(s) 监控
# 2. 在 "Certificate Expiry Notification" 中设置:
# - 证书到期前 30/14/7 天发送提醒
# 3. 不会错过证书续期!
关键词监控
# 监控页面内容是否包含/不包含特定文字:
# 1. 添加 Keyword 类型的 Monitor
# 2. URL:https://example.com/api/health
# 3. Keyword:"status":"ok"
# 4. 如果页面内容不包含这个关键词,则视为异常
# 适用场景:
# - API 健康检查(检查返回的 JSON 内容)
# - 网页内容监控(检查页面是否被篡改)
v2.1 新功能:Globalping 全球探测
# Uptime Kuma v2.1(2026年2月)新增:
# - 通过 Globalping 从全球多个节点探测
# - 检测不同地区的可达性
# - 域名到期监控
# 使用方式:
# 在监控项中启用 "Globalping" 选项
# 选择探测节点位置
数据备份
# v2 移除了 JSON 备份/恢复功能
# 推荐备份方式:
# 方法1:直接备份数据目录
cp -r ./data ./data_backup_$(date +%Y%m%d)
# 方法2:使用 SQLite 命令
sqlite3 ./data/kuma.db ".backup backup.db"
# 方法3:Docker volume 备份
docker run --rm \
-v uptime-kuma:/data \
-v $(pwd):/backup \
alpine tar czf /backup/kuma-backup.tar.gz /data
常见报错
| 报错信息 | 原因 | 解决方案 |
|---|
Connection refused | 目标服务未运行 | 检查目标服务状态和端口 |
Certificate has expired | SSL 证书过期 | 续期目标站点的 SSL 证书 |
Timeout | 网络超时 | 增大超时时间或检查网络 |
SQLITE_BUSY | 数据库锁定 | 确保只有一个实例在运行 |
Data directory on NFS | NFS 不兼容 SQLite | 使用本地磁盘存储数据 |
No admin account | 未创建管理员 | 重新创建容器,立即设置账号 |
速查表
# === 安装 ===
docker run -d --restart=always -p 3001:3001 \
-v uptime-kuma:/app/data --name uptime-kuma \
louislam/uptime-kuma:2
# === 监控类型 ===
# HTTP(s) → 网站/API 可达性
# TCP → 端口开放检测
# Ping → ICMP ping
# DNS → DNS 解析
# Docker → 容器健康状态
# Push → 推送式心跳
# Keyword → 页面内容检查
# gRPC → gRPC 服务
# MQTT → MQTT 代理
# GameDig → 游戏服务器
# Steam → Steam 游戏
# MySQL/Postgres/MongoDB/Redis → 数据库连接
# === Push Monitor API ===
curl "http://kuma:3001/api/push/TOKEN?status=up&msg=OK"
curl "http://kuma:3001/api/push/TOKEN?status=down&msg=Error"
# === 默认信息 ===
# 端口:3001
# 数据目录:/app/data
# 数据库:SQLite(v2 可选 MariaDB)
同类对比
| 特性 | Uptime Kuma | UptimeRobot | Pingdom | Gatus |
|---|
| 价格 | 免费 | 免费50个 | $15/月 | 免费 |
| 自托管 | 支持 | 不支持 | 不支持 | 支持 |
| 监控项数量 | 无限 | 50(免费) | 10(免费) | 无限 |
| 检查间隔 | 20秒起 | 5分钟 | 1分钟 | 自定义 |
| 通知方式 | 90+ | 有限 | 有限 | 多种 |
| 状态页面 | 内置 | 内置 | 内置 | 内置 |
| UI 体验 | 优秀 | 良好 | 良好 | 基础 |
| 配置方式 | GUI | GUI | GUI | YAML |
选型建议:自托管状态监控首选 Uptime Kuma(界面漂亮、功能全面、完全免费);偏好代码配置选 Gatus;不想自托管选 UptimeRobot 免费版。