2025年9月26日
推荐不止于监控:Uptime Kuma如何重新定义服务健康管理
在寻找一个既强大又易用的监控工具时,我发现了Uptime Kuma。这个开源项目彻底改变了我对服务监控的认知——它不仅仅是一个简单的 uptime 监控工具,更是一个完整的服务健康管理平台。
Uptime Kuma 简介
Uptime Kuma是一个自托管的监控工具,具有以下特点:
- 🎯 开源免费:MIT协议,完全免费使用
- 🎨 界面美观:现代化的Web界面设计
- 🚀 功能丰富:支持多种监控类型
- 🔔 通知多样:支持数十种通知方式
- 📱 移动友好:响应式设计,支持手机访问
- 🐳 部署简单:支持Docker一键部署
核心功能特性
1. 多种监控类型
HTTP/HTTPS监控
- 监控网站可用性
- 检查响应时间
- 支持自定义请求头
- 支持POST/GET等请求方法
TCP/端口监控
- 监控服务器端口开放状态
- 检查网络连接
- 支持超时设置
Ping监控
- ICMP ping监控
- 检测网络延迟
- 监控丢包率
DNS监控
- DNS解析监控
- 检查DNS记录
- 监控解析时间
关键词监控
- 检查页面内容
- 监控特定关键词
- 支持正则表达式
数据库监控
- MySQL监控
- PostgreSQL监控
- Redis监控
- MongoDB监控
2. 通知系统
Uptime Kuma支持丰富的通知方式:
即时通讯
- 钉钉
- 企业微信
- 飞书
- Slack
- Discord
- Telegram
邮件服务
- SMTP邮件
- SendGrid
- Mailgun
短信服务
- 阿里云短信
- 腾讯云短信
- AWS SNS
其他方式
- Webhook
- Pushover
- Pushbullet
- Gotify
- Signal
3. 状态页面
- 自定义状态页面
- 支持多语言
- 可设置公开/私密
- 支持自定义域名
部署指南
1. Docker部署(推荐)
# 创建数据目录
mkdir -p ./data
# 运行Uptime Kuma
docker run -d \
--restart=always \
-p 3001:3001 \
-v ./data:/app/data \
--name uptime-kuma \
louislam/uptime-kuma:1
2. Docker Compose部署
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
ports:
- "3001:3001"
volumes:
- ./data:/app/data
restart: unless-stopped
networks:
- monitoring
networks:
monitoring:
driver: bridge
3. 手动部署
# 克隆项目
git clone https://github.com/louislam/uptime-kuma.git
# 进入目录
cd uptime-kuma
# 安装依赖
npm install --production
# 构建项目
npm run build
# 启动服务
npm run start
使用教程
1. 初始设置
-
访问管理界面
- 打开浏览器访问:
http://your-server:3001 - 创建管理员账户
- 打开浏览器访问:
-
基本配置
- 设置时区
- 配置语言
- 设置通知方式
2. 添加监控项
添加网站监控
- 点击”添加新监控”
- 选择”HTTP(s)”
- 填写监控名称和URL
- 设置检查间隔
- 配置通知方式
- 保存并启用
添加服务器监控
- 选择”TCP”或”Ping”
- 填写服务器地址和端口
- 设置超时时间
- 配置阈值
3. 配置通知
配置邮件通知
- 进入设置 > 通知
- 选择邮件通知
- 填写SMTP服务器信息
- 设置收件人
- 测试连接
配置钉钉通知
- 获取钉钉机器人Webhook
- 在通知中添加”Webhook”
- 填写Webhook URL
- 设置消息格式
高级功能
1. 监控分组
创建监控分组来组织不同的监控项:
// 分组示例
{
"网站监控": [
"首页",
"API接口",
"管理后台"
],
"服务器监控": [
"Web服务器",
"数据库服务器",
"缓存服务器"
],
"第三方服务": [
"CDN服务",
"支付接口",
"短信服务"
]
}
2. 监控标签
使用标签来分类和管理监控项:
production:生产环境staging:测试环境critical:关键服务infrastructure:基础设施
3. API集成
Uptime Kuma提供REST API:
// 获取监控状态
fetch('/api/status/:monitorId')
// 添加监控
POST /api/monitors
{
"name": "新监控",
"type": "http",
"url": "https://example.com",
"interval": 60
}
// 获取心跳数据
GET /api/heartbeats/:monitorId
最佳实践
1. 监控策略
关键服务监控
- 设置较短的检查间隔(30-60秒)
- 配置多种通知方式
- 设置合理的阈值
一般服务监控
- 检查间隔可设置为5-10分钟
- 使用邮件通知
- 设置容忍度
备份服务监控
- 较长的检查间隔(30分钟)
- 仅在工作时间通知
- 设置较高的故障容忍度
2. 通知配置
故障分级
- P0:电话 + 短信 + 即时通讯
- P1:邮件 + 即时通讯
- P2:邮件通知
- P3:仅记录日志
通知规则
- 连续故障3次后发送通知
- 恢复时发送恢复通知
- 工作时间外减少通知频率
3. 性能优化
数据库优化
-- 定期清理历史数据
DELETE FROM heartbeat WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
-- 创建索引
CREATE INDEX idx_heartbeat_monitor_id ON heartbeat(monitor_id);
CREATE INDEX idx_heartbeat_created_at ON heartbeat(created_at);
资源限制
# Docker资源限制
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M
与其他监控工具对比
| 特性 | Uptime Kuma | Zabbix | Prometheus | Grafana |
|---|---|---|---|---|
| 易用性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
| 功能完整性 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 资源占用 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 部署难度 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 扩展性 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 社区支持 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
企业级应用
1. 多租户部署
为不同部门或客户创建独立的监控实例:
# 多实例部署示例
version: '3.8'
services:
uptime-kuma-sales:
image: louislam/uptime-kuma:1
ports:
- "3001:3001"
volumes:
- ./data/sales:/app/data
uptime-kuma-tech:
image: louislam/uptime-kuma:1
ports:
- "3002:3001"
volumes:
- ./data/tech:/app/data
2. 高可用部署
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
deploy:
replicas: 2
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
3. 数据备份
#!/bin/bash
# 备份脚本
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/uptime-kuma"
# 创建备份
docker exec uptime-kuma npm run backup
# 复制备份文件
docker cp uptime-kuma:/app/data/backup-$DATE.tar.gz $BACKUP_DIR/
# 清理旧备份(保留30天)
find $BACKUP_DIR -name "backup-*.tar.gz" -mtime +30 -delete
扩展开发
1. 自定义通知插件
// 自定义通知插件示例
class CustomNotifier {
constructor() {
this.name = "Custom Notifier";
this.type = "custom";
}
async send(notification, msg) {
try {
// 实现通知逻辑
await this.sendToCustomService(msg);
return "Success";
} catch (error) {
throw new Error("Notification failed");
}
}
async sendToCustomService(message) {
// 自定义通知服务实现
}
}
2. 自定义监控类型
// 自定义监控类型示例
class CustomMonitor {
async check() {
try {
// 实现监控逻辑
const result = await this.performCheck();
return {
status: result ? "up" : "down",
msg: result ? "OK" : "Failed",
ping: this.getResponseTime()
};
} catch (error) {
return {
status: "down",
msg: error.message
};
}
}
}
故障排查
1. 常见问题
监控项状态异常
- 检查目标服务是否正常运行
- 验证网络连接是否正常
- 确认监控配置是否正确
通知不工作
- 检查通知配置是否正确
- 测试网络连接
- 查看系统日志
性能问题
- 检查服务器资源使用情况
- 优化数据库查询
- 调整监控间隔
2. 日志分析
# 查看容器日志
docker logs uptime-kuma
# 实时监控日志
docker logs -f uptime-kuma
# 查看特定时间段的日志
docker logs --since="2024-01-01" --until="2024-01-02" uptime-kuma
社区和贡献
1. 项目地址
- GitHub:https://github.com/louislam/uptime-kuma
- 官方网站:https://uptime.kuma.pet/
- Demo站点:https://demo.uptime.kuma.pet/
2. 社区支持
- GitHub Issues:报告Bug和功能请求
- Discord社区:技术交流和支持
- 文档:详细的使用文档
3. 贡献方式
- 提交Bug报告
- 贡献代码
- 改进文档
- 分享使用经验
总结
Uptime Kuma作为一个开源监控工具,具有以下优势:
- 易于部署:Docker一键部署,几分钟即可运行
- 界面友好:现代化的Web界面,操作简单直观
- 功能完整:支持各种监控类型和通知方式
- 扩展性强:支持插件和API集成
- 社区活跃:持续更新,社区支持良好
无论是个人项目还是企业应用,Uptime Kuma都是一个值得推荐的监控解决方案。它不仅满足了基本的监控需求,还提供了丰富的扩展能力,真正实现了”不止于监控”的服务健康管理。
如果你正在寻找一个既强大又易用的监控工具,强烈推荐尝试Uptime Kuma!