Hotdry.
systems-engineering

工程化轻量级 Node.js 自托管监控工具:实时 HTTP/Ping/TCP 检查与自定义告警

Uptime Kuma 是一个基于 Node.js 的开源自托管监控工具,支持实时 HTTP、Ping 和 TCP 检查。通过 Docker 快速部署,提供 90+ 通知渠道如 email、Slack 和 Discord。工程实践包括设置 30 秒间隔、连续失败阈值 3 次,以及状态页面配置,确保服务高可用。

在现代分布式系统中,服务可用性是核心关切。自托管监控工具如 Uptime Kuma 以其轻量级和灵活性脱颖而出,尤其适合资源有限的环境。它基于 Node.js 构建,支持实时 HTTP、Ping 和 TCP 检查,并集成多种告警渠道,避免了商业工具的订阅费用和数据隐私风险。通过工程化实践,可以实现高效的监控闭环,确保服务响应及时、告警精准。

Uptime Kuma 的优势在于其多协议支持和响应式 UI。官方数据显示,它能监控 HTTP (s)、TCP、Ping 等协议,检查间隔最低 20 秒,UI 采用 Vue 3 和 Bootstrap 5,确保操作流畅。根据 GitHub 仓库描述,该工具已获 7 万 + Star,证明其社区活跃度和可靠性。在实际部署中,它占用资源低,单实例内存使用约 100MB,适合 VPS 或内网服务器。

部署 Uptime Kuma 时,优先选择 Docker 以简化依赖管理。核心命令为:docker run -d --restart=always -p 3001:3001 -v /path/to/data:/app/data --name uptime-kuma louislam/uptime-kuma:1。该配置使用本地卷持久化数据,避免容器重启丢失监控历史。注意,官方警告不支持 NFS 等网络文件系统,应使用本地目录或 Docker 卷。首次访问 http://localhost:3001 创建管理员账号,并启用 2FA 增强安全。非 Docker 方式需 Node.js >=20.4 和 pm2 后台运行:git clone https://github.com/louislam/uptime-kuma.git;cd uptime-kuma;npm run setup;pm2 start server/server.js --name uptime-kuma。

对于 HTTP 检查,配置参数直接影响监控精度。输入 URL、方法(GET/POST)、自定义头和体,支持状态码验证(如 200)和关键词匹配(如响应中含 "success")。最佳实践:设置间隔 30-60 秒,超时阈值 5-10 秒,避免频繁请求导致负载。证据显示,在生产环境中,30 秒间隔能平衡实时性和资源消耗;关键词监控可检测 API 异常,而非仅依赖状态码。启用 SSL 证书检查,提前 30 天告警过期。

Ping 检查用于网络连通性,指定主机 IP,间隔同 HTTP。工程参数:包大小 56 字节,超时 5 秒,连续失败 3 次触发告警。这基于 ICMP 协议,适合验证服务器在线,但防火墙可能阻挡。实际案例中,Ping 结合 HTTP 可区分网络 vs 服务故障。

TCP 检查针对端口开放,如监控 MySQL 3306 端口。参数包括主机、端口、超时(默认 10 秒)。最佳实践:针对关键服务如 SSH (22) 或 Redis (6379),设置间隔 60 秒,失败阈值 2-3 次。Uptime Kuma 支持 Docker 容器监控,直接挂载 /run/docker.sock 卷,实现容器健康检查。

告警配置是 Uptime Kuma 的亮点,支持 90+ 渠道,包括 email (SMTP)、Slack、Discord。全局设置通知:在 Settings > Notifications 添加 SMTP (端口 465/TLS) 或 Slack Webhook。每个监控项可指定渠道和阈值,如 "Up" 恢复时通知、"Down" 失败时告警。工程参数:连续失败 3 次,避免抖动误报;响应时间 >500ms 警告。Discord 集成需 Bot Token,Slack 用 Incoming Webhook URL。证据:用户反馈显示,多渠道配置(如 email + Slack)可将响应时间缩短 50%。

可落地参数清单:

  1. 部署清单

    • 环境:Docker 24+ 或 Node.js 20.4+。
    • 卷挂载:/data:/app/data (SQLite 默认)。
    • 端口:3001 (可代理到 80/443 via Nginx)。
    • 启动:docker compose up -d,使用官方 compose.yaml。
  2. HTTP 检查参数

    • 间隔:30s。
    • 超时:10s。
    • 关键词:正则匹配,e.g., /success/。
    • 最大重试:3。
  3. Ping/TCP 参数

    • Ping:主机 IP,间隔 60s,超时 5s。
    • TCP:端口 80/443/3306,间隔 60s,失败阈值 3。
    • 代理支持:若需,设置 HTTP_PROXY 环境变量。
  4. 告警清单

    • Email:SMTP 服务器、端口 587 (STARTTLS)、用户名 / 密码。
    • Slack:Webhook URL,频道 #alerts。
    • Discord:Bot Token,频道 ID。
    • 阈值:Down 3 次告警,Up 1 次恢复。
    • 状态页面:创建公共页,添加 Logo 和自定义域。
  5. 监控与维护

    • 日志:pm2 logs 或 docker logs uptime-kuma。
    • 更新:docker pull louislam/uptime-kuma:latest;重启容器。
    • 回滚:备份 /data 目录,版本固定如 :1.23.11。
    • 风险:监控负载 <5% CPU;若高,增加间隔。

通过这些实践,Uptime Kuma 可实现 99.9% 服务可用性监控。相比 Prometheus 等重型工具,它更适合中小团队,轻量部署即用。

资料来源:

查看归档