菜单

服务器组件

相关源文件

本文档描述了 Uptime Kuma 的核心服务器端架构,包括主要的服务器组件、它们之间的关系以及它们如何相互作用以提供监控功能。有关前端组件的信息,请参阅 前端组件,有关服务器和客户端之间数据流的信息,请参阅 数据流

概述

Uptime Kuma 服务器基于 Node.js 构建,并为监控系统提供了骨干。主要职责包括:

  • 提供 Web 界面和 API 端点
  • 管理检查服务状态的监控器
  • 从数据库存储和检索数据
  • 在服务状态更改时发送通知
  • 为 Prometheus 提供指标
  • 运行后台维护任务

核心服务器架构

以下图表说明了主要的服务器组件及其关系

来源:[server/uptime-kuma-server.js],[server/server.js],[server/database.js]

UptimeKumaServer

UptimeKumaServer 类作为核心组件,负责初始化和协调所有服务器功能。它实现了单例模式。

UptimeKumaServer 的主要特点:

  • 管理 Express 应用、HTTP/HTTPS 服务器和 Socket.IO
  • 在内存中存储活动的监控器和维护窗口
  • 提供检索监控器和维护数据的方法
  • 通过静态属性 monitorTypeList 公开监控器类型
  • 在数据库连接建立后初始化资源

在 [server/server.js] 中创建服务器实例

来源:[server/uptime-kuma-server.js:22-75],[server/server.js:83-86]

数据库

Database 类负责数据库连接、配置和迁移。它支持 SQLite、MariaDB 和嵌入式 MariaDB 作为数据库后端。

主要职责

  • 创建和管理数据目录
  • 建立数据库连接
  • 应用迁移和补丁
  • 配置 RedBean ORM

在 [server/server.js] 中的数据库初始化过程

来源:[server/database.js:18-392],[server/server.js:173-191]

监控系统

监控系统围绕 Monitor 类构建,该类负责检查服务状态并生成心跳。

Monitor 类实现了各种检查类型:

  • HTTP/HTTPS
  • TCP 端口
  • Ping
  • DNS
  • 推送
  • 关键词
  • JSON 查询
  • gRPC
  • 数据库连接
  • 许多其他专用监控器

监控器生命周期

  1. 由 UptimeKumaServer 实例化
  2. 使用 monitor.start(io) 启动
  3. 使用 beat() 以指定的时间间隔运行检查
  4. 将心跳存储在数据库中
  5. 更新 Prometheus 指标
  6. 在状态更改时发送通知

来源:[server/model/monitor.js:37-1204]

Prometheus 指标

Prometheus 类提供关于监控器本身的监控指标,并将其暴露供 Prometheus 抓取。

暴露的关键指标:

  • monitor_cert_days_remaining:证书剩余有效期(天)
  • monitor_cert_is_valid:证书有效性(1=有效,0=无效)
  • monitor_response_time:监控器响应时间(毫秒)
  • monitor_status:监控器状态(1=UP,0=DOWN,2=PENDING,3=MAINTENANCE)

每个监控器在启动时都会创建一个 Prometheus 实例

来源:[server/prometheus.js:35-123],[server/model/monitor.js:331]

Socket 处理程序

Socket handlers 通过 Socket.IO 管理与客户端的实时通信。它们按域组织在单独的文件中。

处理程序通常遵循一致的模式:

来源:[server/socket-handlers/api-key-socket-handler.js:16-155],[server/server.js:326-4380]

后台任务

后台任务执行计划的维护任务,例如清理旧数据和优化数据库。

主要任务包括:

  • clearOldData:根据保留策略移除旧心跳和统计数据
  • incrementalVacuum:执行数据库清理以优化性能

使用 Croner 库安排任务

来源:[server/jobs.js:6-58],[server/jobs/clear-old-data.js:9-65]

请求流程

以下序列图说明了在监控过程中数据如何通过服务器组件传递

来源:[server/model/monitor.js:327-397],[server/server.js:326-664]

身份验证

身份验证由 auth 模块处理,并支持多种身份验证方法:

主要安全特性

  • 使用 bcrypt 进行密码哈希
  • 使用 JWT 令牌维护会话
  • 支持 TOTP 的双因素身份验证
  • 用于程序化访问的 API 密钥身份验证
  • 速率限制以防止暴力破解攻击

来源:[server/auth.js:16-179],[server/rate-limiter.js:4-75]

数据库 Schema

核心数据库架构包含以下主要实体:

来源:[server/database.js:70-115],[server/model/monitor.js]

结论

Uptime Kuma 的服务器组件构成了统一、模块化的架构。

  • UptimeKumaServer:协调所有服务器功能的中心组件
  • Database:处理数据持久化和迁移
  • Monitor:执行服务检查并生成状态数据
  • Socket Handlers:提供与客户端的实时通信
  • Prometheus:公开监控指标
  • Background Jobs:执行维护任务

这种架构提供了灵活性和可扩展性,使 Uptime Kuma 能够支持各种监控类型、通知方法和部署场景。

来源:[server/uptime-kuma-server.js],[server/server.js],[server/database.js],[server/model/monitor.js],[server/jobs.js]