网站突然挂了才发现?服务器宕机半小时才收到用户投诉?
在运维工作中,监控系统的重要性不言而喻:
- 付费监控服务:UptimeRobot免费版限制多,付费版每月$7起
- Zabbix/Prometheus:功能强大但配置复杂,学习成本高
- 云厂商监控:只能监控自家服务,多云环境管理困难
- Nagios:老牌工具,界面古老,配置繁琐
有没有一款既免费、又简单、还功能全面的监控工具?
今天给大家介绍一款开源监控神器 —— Uptime Kuma,让服务监控变得像呼吸一样简单!
一、介绍
Uptime Kuma 是一款易用的自托管监控工具,在GitHub上已经获得了8万+ Star!
它的核心优势:
- 🚀 简单易用:Docker一键部署,5分钟完成搭建
- 🎨 界面美观:现代化设计,响应式布局,体验一流
- 🔔 告警丰富:支持90+种通知渠道(Telegram、钉钉、企业微信等)
- 💰 完全免费:开源免费,无任何限制
- 🌍 多语言支持:包括中文在内的20+种语言
- 📊 功能全面:HTTP、TCP、Ping、Docker、证书等全方位监控
项目地址: https://github.com/louislam/uptime-kuma
官方网站: https://uptime.kuma.pet
在线演示: https://demo.kuma.pet/start-demo
官方文档: https://github.com/louislam/uptime-kuma/wiki
二、核心功能特性
2.1 支持的监控类型
| 监控类型 | 说明 | 使用场景 |
|---|---|---|
| 🌐 HTTP(s) | TCP端口监控 | 数据库、服务端口 |
| 🔌 TCP | TCP端口监控 | 数据库、服务端口 |
| 📝 HTTP关键词 | 检测页面内容 | 确认页面正常显示 |
| 📊 JSON查询 | 检查API返回 | API健康检查 |
| 🏓 Ping/ICMP | Ping检测 | 服务器存活性 |
| 🌐 DNS记录 | DNS解析监控 | 域名解析检查 |
| 🐳 Docker容器 | 容器状态监控 | 容器化应用 |
| 📡 WebSocket | WebSocket连接 | 实时通信服务 |
| 🎮 Steam服务器 | 游戏服务器 | 游戏运维 |
| 📥 Push | 主动推送 | 自定义监控 |
2.2 告警通知渠道
Uptime Kuma支持90+种通知方式:
国内常用:
- 钉钉
- 企业微信
- 飞书
- Server酱
- PushDeer
- Bark (iOS)
国际常用:
- Telegram
- Discord
- Slack
- Email (SMTP)
- Webhook
- Pushover
- Gotify
其他特殊:
- SMS (多家厂商)
- 语音电话
- Microsoft Teams
- Google Chat
- Line
- Mattermost
2.3 系统架构
┌──────────────────────────────────────────────────┐
│ Uptime Kuma 监控中心 │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ Web 管理界面 (Vue.js) │ │
│ │ - 仪表盘 │ │
│ │ - 监控配置 │ │
│ │ - 状态页面 │ │
│ └──────────────┬──────────────────────────┘ │
│ │ │
│ ┌──────────────▼──────────────────────────┐ │
│ │ 后端服务 (Node.js + Socket.IO) │ │
│ │ - 监控任务调度 │ │
│ │ - 数据采集 │ │
│ │ - 告警处理 │ │
│ └──────────────┬──────────────────────────┘ │
│ │ │
│ ┌──────────────▼──────────────────────────┐ │
│ │ 数据存储 (SQLite) │ │
│ │ - 监控历史 │ │
│ │ - 配置信息 │ │
│ └─────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
│
┌─────────┼─────────┐
│ │ │
┌────▼───┐ ┌──▼───┐ ┌───▼────┐
│ 网站 │ │服务器│ │ Docker │
│ 监控 │ │ 监控 │ │ 监控 │
└────────┘ └──────┘ └────────┘
│ │ │
┌────▼─────────▼─────────▼────┐
│ 告警通知渠道 │
│ 钉钉 | 微信 | Telegram │
└─────────────────────────────┘
2.4 独特功能
1. 状态页面(Status Page)
公开状态页面:
https://status.yourdomain.com
特点:
- 展示所有监控项状态
- 历史可用率统计
- 响应时间图表
- 可自定义域名
- 支持多个状态页面
2. Ping图表
实时显示:
- 最近24小时响应时间
- 平均响应时间
- 最高/最低响应时间
- 可用率统计
3. 证书监控
自动检测HTTPS证书:
- 证书有效期
- 证书颁发者
- 证书过期提醒
- 证书更新通知
4. 代理支持
支持通过代理访问:
- HTTP代理
- HTTPS代理
- SOCKS5代理
5. 双因素认证(2FA)
保护管理后台安全:
- TOTP支持
- Google Authenticator
- Authy等兼容
三、快速安装
3.1 Docker Compose安装(推荐)
最简单的方式:
# 创建目录
mkdir uptime-kuma
cd uptime-kuma
# 下载配置文件
curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml
# 启动服务
docker compose up -d
访问:http://localhost:3001
自定义配置:
# compose.yaml
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:2
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./data:/app/data
environment:
- TZ=Asia/Shanghai # 设置时区
3.2 Docker命令安装
# 基础命令
docker run -d \
--name uptime-kuma \
--restart=always \
-p 3001:3001 \
-v uptime-kuma:/app/data \
louislam/uptime-kuma:2
# 仅本地访问
docker run -d \
--name uptime-kuma \
--restart=always \
-p 127.0.0.1:3001:3001 \
-v uptime-kuma:/app/data \
louislam/uptime-kuma:2`
3.3 非Docker安装
系统要求:
- Node.js >= 20.4
- Git
- PM2(后台运行)
安装步骤:
# 克隆仓库
git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
# 安装依赖
npm install --production
# 构建前端
npm run build
# 安装PM2
npm install pm2 -g
# 启动服务
pm2 start server/server.js --name uptime-kuma
# 设置开机自启
pm2 startup
pm2 save
访问:http://localhost:3001
四、使用体验
4.1 首次配置
访问 http://your-server:3001,首次会要求创建管理员账户:
1. 输入用户名
2. 设置密码
3. 点击"创建"
4.2 添加监控
监控网站示例:
添加新监控 → HTTP(s)
基本信息:
- 名称: 我的博客
- URL: https://example.com
- 检测间隔: 60秒
高级设置:
- 超时时间: 30秒
- 最大重定向: 10次
- 接受的状态码: 200-299
- 关键词检测: 可选
通知设置:
- 选择通知渠道
- 设置通知条件
监控服务器示例:
添加新监控 → Ping
基本信息:
- 名称: 生产服务器
- 主机名: 192.168.1.100
- 检测间隔: 30秒
通知设置:
- 钉钉机器人
- 企业微信
监控Docker容器:
添加新监控 → Docker Container
配置:
- Docker Host: unix:///var/run/docker.sock
- 容器名称: nginx
- 检测间隔: 60秒
4.3 配置告警
钉钉机器人配置:
1. 钉钉群 → 群设置 → 智能群助手 → 添加机器人
2. 选择"自定义"
3. 复制Webhook地址
4. Uptime Kuma → 设置 → 通知 → 添加通知
5. 类型选择"钉钉"
6. 粘贴Webhook
7. 测试发送
企业微信配置:
8. 企业微信 → 应用管理 → 创建应用
9. 获取 Corp ID 和 Secret
10. Uptime Kuma → 添加通知
11. 选择"企业微信"
12. 填写相关信息
13. 测试发送
Telegram配置:
1. 与 @BotFather 对话创建Bot
2. 获取 Bot Token
3. 获取 Chat ID
4. Uptime Kuma → 添加通知
5. 填写Token和Chat ID`
4.4 实际使用场景
场景1:网站监控
监控配置:
- 主站: https://example.com (60秒检测)
- API: https://api.example.com (30秒检测)
- CDN: https://cdn.example.com (60秒检测)
告警策略:
- 连续失败2次 → 钉钉通知
- 恢复正常 → 钉钉通知
- 响应时间>2秒 → 警告通知
实际效果:
- 网站异常立即收到钉钉消息
- 可快速定位问题(主站正常但API异常)
- 历史数据帮助分析故障规律
场景2:服务器监控
监控项:
- Ping: 192.168.1.10-20 (10台服务器)
- SSH端口: TCP 22
- 数据库: TCP 3306
- Redis: TCP 6379
告警:
- 任一服务器Ping不通 → 立即通知
- 端口无法连接 → 立即通知
场景3:Docker容器监控
监控的容器:
- nginx
- mysql
- redis
- app-backend
- app-frontend
检测策略:
- 容器停止 → 立即告警
- 容器重启 → 记录日志
- 健康检查失败 → 告警
4.5 状态页面
创建公开状态页面:
设置 → 状态页面 → 新建
配置:
- 名称: 服务状态
- 描述: 实时监控我们的服务
- 选择要展示的监控项
- 自定义域名: status.yourdomain.com
特性:
- 实时更新
- 历史可用率
- 事件时间线
- 支持多语言
访客可以访问查看服务状态,无需登录。
五、高级配置
5.1 安装caddy并代理
# 准备(确保已安装 curl、gnupg、ca-certificates)
sudo apt update
sudo apt install -y curl gnupg ca-certificates
# 导入官方仓库 GPG(命令仅示范,若报错按官网步骤调整)
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
# 添加仓库(命令示例,any-version 可替换或保留)
echo "deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/ubuntu any-version main" | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
Caddyfile 基础位置
在 /etc/caddy/Caddyfile。修改这个文件后重载 Caddy 即可
创建及编辑Caddyfile文件
vim /etc/caddy/Caddyfile
sub.xxx.xx {
reverse_proxy 45.xxx.xx.xx:3001
}
按esc健,输入“:"及wq 回车退出
创建日志目录并授权(Caddy 默认运行用户通常是 caddy):
sudo mkdir -p /var/log/caddy
sudo chown -R caddy:caddy /var/log/caddy
sudo chmod 750 /var/log/caddy
校验 Caddyfile 语法
sudo caddy validate --config /etc/caddy/Caddyfile
- 如果返回 valid 则继续下一步;若报错,caddy validate 会给出位置信息,按提示修正。
让 Caddy 重新加载配置(无停机):
sudo systemctl reload caddy
或(若需要完全重启):
sudo systemctl restart caddy
查看实时日志(定位证书或代理错误):
sudo journalctl -u caddy -f
# 或查看你配置的访问日志
sudo tail -F /var/log/caddy/flux_access.log
重载caddy 服务,若是不报错,caddy 反代成功
5.3 数据备份
# 备份数据目录
docker exec uptime-kuma tar czf /tmp/backup.tar.gz /app/data
# 复制到宿主机
docker cp uptime-kuma:/tmp/backup.tar.gz ./backup-$(date +%Y%m%d).tar.gz
# 自动备份脚本
#!/bin/bash
BACKUP_DIR="/path/to/backups"
DATE=$(date +%Y%m%d)
docker exec uptime-kuma tar czf /tmp/backup.tar.gz /app/data
docker cp uptime-kuma:/tmp/backup.tar.gz $BACKUP_DIR/uptime-kuma-$DATE.tar.gz
# 保留最近7天的备份
find $BACKUP_DIR -name "uptime-kuma-*.tar.gz" -mtime +7 -delete
5.4 API使用
Uptime Kuma提供API接口:
# 获取监控列表
curl http://localhost:3001/api/monitors
# 获取特定监控的状态
curl http://localhost:3001/api/monitor/1
# 创建监控(需要认证)
curl -X POST http://localhost:3001/api/monitor \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"name":"Test","url":"https://example.com"}'
评论区