菜单

心跳

相关源文件

心跳是 Uptime Kuma 监控系统的核心数据记录。它们代表了被监控资源的个体状态检查,并为计算正常运行时间、可视化服务健康状况以及触发通知奠定了基础。本页面将解释心跳在整个系统中是如何生成、存储和可视化的。

概述

每次 Uptime Kuma 检查被监控服务的状态时,都会创建一个心跳。每个心跳都包含以下信息:

  • 检查时间
  • 状态结果(UP、DOWN、PENDING 或 MAINTENANCE)
  • 响应时间(ping)
  • 任何错误或状态消息

心跳作为所有监控器的历史记录,是正常运行时间计算、状态页面和通知触发的基础。

来源

心跳生命周期

来源

心跳数据结构

心跳记录包含以下关键信息:

字段类型描述
id整型心跳的唯一标识符
monitor_id整型指向此心跳所属监控器的引用
time日期时间 (DateTime)执行检查时的 ISO 时间戳
status整型状态代码:0 (DOWN),1 (UP),2 (PENDING),3 (MAINTENANCE)
ping整型响应时间(毫秒)(如果适用)
msg字符串错误消息或附加信息
downCount整型连续宕机状态的次数

来源

状态码

Uptime Kuma 在内部使用数字状态代码来表示监控器的状态。

这些状态代码在代码库中被定义为常量,并在整个系统中用于表示监控器的状态。

来源

心跳生成

心跳的生成方式取决于监控器的类型。

HTTP/Keyword/JSON Query 监控器

对于基于 HTTP 的监控器,心跳包括:

  • HTTP 响应状态码
  • 响应时间(ping)
  • 响应体(用于关键字或 JSON 查询验证)
  • TLS 证书信息(对于 HTTPS URL)

心跳状态由以下因素决定:

  • HTTP 状态码的可接受性
  • 关键字是否存在(对于关键字监控器)
  • JSON 查询评估(对于 JSON 查询监控器)

Ping/TCP 监控器

对于基于网络的监控器,心跳包括:

  • Ping 时间
  • 连接成功/失败

Push 监控器

Push 监控器的工作方式是反向的。

  • 系统期望外部服务“推送”心跳。
  • 如果在预期间隔内未收到心跳,则被视为 DOWN。
  • Push 监控器使用令牌进行身份验证。

其他专用监控器

对于专用监控器(DNS、Docker、游戏服务器、数据库等),心跳包含特定于监控器的信息,但遵循相同的基本结构。

来源

监控器检查过程

下图说明了监控器检查是如何调度的和处理的。

来源

心跳存储

心跳存储在数据库的 heartbeat 表中。该模式包括:

  • 与监控器的外键关系
  • 按时间索引,以实现高效查询
  • 配置为高读写性能

数据库模式的设计旨在高效处理随时间累积的海量心跳记录。

来源

心跳可视化

Uptime Kuma 通过多种方式可视化心跳:

心跳条

HeartbeatBar 组件显示一系列小块,代表监控器的近期心跳。这提供了近期监控器状态的快速可视化概览。

心跳条中的每个块都用颜色编码来表示状态(UP、DOWN、PENDING、MAINTENANCE),并在鼠标悬停时显示时间戳。

来源

心跳数据流

下图显示了心跳数据如何流经系统。

来源

与心跳交互

Uptime Kuma 提供了几种与心跳交互的方式:

  1. 查看:心跳显示在仪表盘和监控器详情页面。
  2. 过滤:在仪表盘上,重要的心跳会显示状态变化。
  3. 清除:用户可以清除监控器的心跳历史记录。
  4. API 访问:可以通过 API 访问心跳。

从心跳计算正常运行时间

心跳是正常运行时间计算的基础。系统通过分析心跳历史记录来计算不同时间段(24 小时、7 天、30 天等)的正常运行时间百分比。

来源

Push 监控器和心跳

Push 监控器与其他监控器类型的运作方式不同。

  1. Uptime Kuma 不主动检查服务,而是由外部服务将“心跳”推送到 Uptime Kuma。
  2. 每个 push 监控器都有一个带有令牌的唯一 URL 用于身份验证。
  3. 系统期望在配置的间隔内收到心跳。
  4. 如果在配置的间隔内未收到心跳,则监控器状态将变为 DOWN。

此方法对于监控以下场景很有用:

  • Cron 作业
  • 批处理过程
  • 无法从外部访问的内部系统

来源

心跳性能考虑

考虑到对于间隔较短的监控器,心跳可能会迅速累积,Uptime Kuma 实施了多项优化措施:

  1. 在 monitor_id 和 time 字段上建立数据库索引
  2. 对 UI 组件中显示的心跳数量进行速率限制
  3. 提供清除历史心跳数据的选项
  4. 用于正常运行时间计算的高效数据库查询

来源

用户界面组件

以下组件显示或与心跳交互:

  1. HeartbeatBar:将近期心跳状态可视化为一系列块。
  2. Monitor Details Page:显示近期心跳的表格,包含时间戳和消息。
  3. Dashboard:显示重要的心跳(通常是状态变化)。
  4. Status Pages:使用聚合的心跳数据来显示当前状态。

来源

  • 有关监控器及其配置方式的信息,请参阅 监控器系统
  • 有关如何根据心跳状态变化触发通知的信息,请参阅 通知系统
  • 有关影响心跳状态的维护窗口的详细信息,请参阅 维护窗口