菜单

监控类型

相关源文件

目的与范围

本页面记录了 Uptime Kuma 中可用的不同监控类型、它们的功能和配置选项。监控类型决定了 Uptime Kuma 如何检查各种服务、网站和系统的可用性和功能。每种监控类型都专门用于使用适当的协议和方法来监控特定类型的服务。

有关监控心跳和它们收集的数据的信息,请参阅心跳。有关影响监控状态的维护窗口的信息,请参阅维护窗口

架构概述

Uptime Kuma 中的监控类型遵循模块化架构,其中专门的实现处理不同的服务检查。该系统同时利用中央 Monitor 类和特定的 MonitorType 实现。

来源:server/uptime-kuma-server.js112-118 server/model/monitor.js37-324 server/monitor-types/snmp.js1-64

监控流程

监控过程遵循此序列图,展示了监控器如何按固定间隔检查服务。

来源:server/model/monitor.js327-412 server/monitor-types/snmp.js11-58

监控状态值

监控可以具有以下四种状态值之一

状态描述
DOWN0服务不可访问或工作不正常
UP1服务可访问且工作正常
待处理 (PENDING)2监控正在等待首次检查或足够的信息
MAINTENANCE3服务正在维护中

来源:src/util.js25-28 server/model/monitor.js31-36

监控类型概览

Uptime Kuma 将监控类型分为三类

来源:src/pages/EditMonitor.vue14-95

通用监控类型

HTTP/HTTPS

HTTP 监控类型检查 Web 服务是否可达并返回预期的响应。

配置选项

  • URL:要检查的 URL
  • Method:HTTP 方法(GET、POST 等)
  • Headers:自定义 HTTP 头部
  • Body:POST/PUT 请求的请求体
  • Body Encoding:JSON、Form 或 XML
  • Authentication:Basic Auth、OAuth2 或 mTLS
  • Accepted Status Codes:应视为 UP 的 HTTP 状态码
  • Maximum Redirects:要跟踪的最大重定向次数
  • Timeout:请求超时前的秒数
  • Ignore TLS:是否忽略 TLS 证书错误

实现细节:HTTP 监控使用 Axios 来发出 HTTP 请求并检查响应。

来源:server/model/monitor.js416-454 server/model/monitor.js551-571 src/pages/EditMonitor.vue116-119

TCP 端口

TCP 端口监控检查 TCP 端口是否打开且可访问。

配置选项

  • Hostname:要连接的主机名或 IP
  • Port:要检查的 TCP 端口
  • Timeout:连接尝试超时前的秒数

实现细节:TCP 端口监控使用 util-server.js 中的 tcping 函数来检查端口是否打开。

来源:server/model/monitor.js614-618 server/util-server.js98-117 src/pages/EditMonitor.vue285-295

Ping

Ping 监控使用 ICMP ping 来检查主机是否可达。

配置选项

  • Hostname:要 ping 的主机名或 IP
  • Packet Size:ping 包的大小
  • Timeout:ping 超时前的秒数

实现细节:Ping 监控使用 ping 函数,该函数内部调用 @louislam/ping 模块。

来源:server/model/monitor.js619-622 server/util-server.js125-170 src/pages/EditMonitor.vue285-296

SNMP

SNMP 监控从 SNMP 启用设备中检查值。

配置选项

  • Hostname:SNMP 设备的主机名或 IP
  • Port:SNMP 端口(默认:161)
  • Community String:SNMP community string(类似于密码)
  • OID:要查询的 SNMP 对象标识符
  • SNMP Version:SNMP 协议版本(1、2c、3)
  • JSON Path:从响应中提取特定值的路径
  • Expected Value:要与提取值进行比较的值
  • JSON Path Operator:值检查的比较运算符

实现细节:SNMP 监控在 SNMPMonitorType 类中使用 net-snmp 模块实现。

来源:server/monitor-types/snmp.js5-59 db/knex_migrations/2024-04-26-0000-snmp-monitor.js1-16 src/pages/EditMonitor.vue306-318

HTTP - Keyword

HTTP 关键字监控检查 HTTP 响应中是否包含特定关键字或不包含。

配置选项

  • URL:要检查的 URL(选项与 HTTP 监控相同)
  • Keyword:要在响应中搜索的文本
  • Invert Keyword:如果启用,则当找不到关键字时监控器将处于 UP 状态

实现细节:HTTP 关键字监控扩展了 HTTP 监控,并增加了在响应中搜索关键字的逻辑。

来源:server/model/monitor.js578-598 src/pages/EditMonitor.vue141-158

HTTP - JSON Query

HTTP JSON Query 监控检查 JSON 响应是否包含预期值。

配置选项

  • URL:要检查的 URL(选项与 HTTP 监控相同)
  • JSON Path:从 JSON 响应中提取值的路径
  • Expected Value:要与提取值进行比较的值
  • JSON Path Operator:值检查的比较运算符

实现细节:HTTP JSON Query 监控扩展了 HTTP 监控,并增加了从 JSON 响应中提取和比较值的逻辑。

来源:server/model/monitor.js600-611 src/util.js393-420

gRPC - Keyword

gRPC 关键字监控检查 gRPC 服务是否可用以及是否包含预期的响应。

配置选项

  • URL:gRPC 服务器 URL
  • Service Name:gRPC 服务的名称
  • Method:要调用的 gRPC 方法
  • Protobuf:Protobuf 定义文件
  • Request Body:请求负载
  • Metadata:请求的附加元数据
  • Enable TLS:是否为连接使用 TLS
  • Keyword:要在响应中搜索的文本
  • Invert Keyword:如果启用,则当找不到关键字时监控器将处于 UP 状态

来源: src/pages/EditMonitor.vue122-125 src/pages/EditMonitor.vue141-158

DNS

DNS 监控检查 DNS 记录是否存在并与预期值匹配。

配置选项

  • 主机名: 要查询的主机名
  • 解析服务器: 用于查询的 DNS 服务器
  • 端口: DNS 服务器端口
  • 记录类型: 要查询的 DNS 记录类型(A、AAAA、CNAME、MX 等)
  • 解析类型: 解析类型(IPv4 或 IPv6)

实现细节: DNS 监控使用 Node.js 的 dns 模块执行 DNS 解析。

来源: server/util-server.js291-316 src/pages/EditMonitor.vue285-296

Docker 容器

Docker 容器监控检查 Docker 容器是否正在运行。

配置选项

  • Docker 主机: 要连接的 Docker 主机
  • 容器: 要检查的容器名称或 ID

来源: server/uptime-kuma-server.js18 src/pages/EditMonitor.vue42-44

真实浏览器

真实浏览器监控使用无头 Chrome/Chromium 浏览器检查网站。

配置选项

  • URL:要检查的 URL
  • 超时: 检查超时前的秒数
  • 使用远程浏览器: 是否使用远程浏览器实例
  • 远程浏览器: 要使用的远程浏览器实例

实现细节: 真实浏览器监控使用 Playwright 进行浏览器自动化。

来源: server/uptime-kuma-server.js112 src/pages/EditMonitor.vue46-48 src/pages/EditMonitor.vue161-181

分组

组监控聚合子监控的状态。

配置选项

  • 子监控: 要包含在组中的监控

实现细节: 组监控检查其所有子监控的状态,并报告其中最差的状态。

来源: server/model/monitor.js383-414 src/pages/EditMonitor.vue15-17

被动监控类型

推送

推送监控等待外部服务向 Uptime Kuma 发送心跳。

配置选项

  • 推送 URL: 外部服务可以调用以发送心跳的 URL
  • 心跳间隔: 服务应发送心跳的频率

实现细节: 推送监控不主动检查服务。相反,它期望服务向特殊 URL 发送 HTTP 请求来报告其状态。

来源: server/model/monitor.js623-653 src/pages/EditMonitor.vue128-138

特定监控类型

数据库监控

Microsoft SQL Server

Microsoft SQL Server 监控检查 SQL Server 数据库是否可访问。

配置选项

  • 连接字符串: 数据库连接字符串
  • 查询: 要执行的 SQL 查询

实现细节: 使用 mssql 模块连接到数据库并执行查询。

来源: server/util-server.js325-341 src/pages/EditMonitor.vue73-75

PostgreSQL

PostgreSQL 监控检查 PostgreSQL 数据库是否可访问。

配置选项

  • 连接字符串: 数据库连接字符串
  • 查询: 要执行的 SQL 查询

实现细节: 使用 pg 模块连接到数据库并执行查询。

来源: server/util-server.js350-399 src/pages/EditMonitor.vue76-78

MySQL/MariaDB

MySQL/MariaDB 监控检查 MySQL 或 MariaDB 数据库是否可访问。

配置选项

  • 连接字符串: 数据库连接字符串
  • 查询: 要执行的 SQL 查询

实现细节: 使用 mysql2 模块连接到数据库并执行查询。

来源: server/util-server.js408-437 src/pages/EditMonitor.vue79-81

MongoDB

MongoDB 监控检查 MongoDB 数据库是否可访问。

配置选项

  • 连接字符串: 数据库连接字符串
  • 数据库名称: 要连接的数据库名称

实现细节:MongodbMonitorType 类中使用 mongodb 模块实现。

来源: server/uptime-kuma-server.js117 src/pages/EditMonitor.vue82-84

Redis

Redis 监控检查 Redis 服务器是否可访问。

配置选项

  • 主机名: Redis 服务器的主机名或 IP
  • 端口: Redis 服务器端口
  • 密码(可选): Redis 身份验证密码

实现细节: 使用 redis 模块连接到 Redis 服务器并执行 PING 命令。

来源: server/util-server.js492-522 src/pages/EditMonitor.vue88-90

消息队列监控

MQTT

MQTT 监控检查 MQTT 代理是否可访问。

配置选项

  • 主机名: MQTT 代理的主机名或 IP
  • 端口: MQTT 代理端口
  • 用户名(可选): MQTT 身份验证用户名
  • 密码(可选): MQTT 身份验证密码
  • 主题: 要订阅的 MQTT 主题
  • 成功消息: 指示成功的消息
  • 检查类型: 是检查精确消息还是任何消息

实现细节:MqttMonitorType 类中使用 mqtt 模块实现。

来源: server/uptime-kuma-server.js115 src/pages/EditMonitor.vue64-66

RabbitMQ

RabbitMQ 监控检查 RabbitMQ 服务器是否可访问。

配置选项

  • Nodes: 要检查的 RabbitMQ 节点列表
  • Username: RabbitMQ 认证用户名
  • Password: RabbitMQ 认证密码

实现细节:RabbitMqMonitorType 类中实现。

来源: server/uptime-kuma-server.js118 src/pages/EditMonitor.vue67-69 src/pages/EditMonitor.vue246-281

Kafka Producer

Kafka Producer 监控通过生产一条消息来检查 Kafka 代理是否可访问。

配置选项

  • Brokers: 要连接的 Kafka 代理列表
  • Topic: 要生产到的 Kafka 主题
  • Message: 要生产的消息
  • SSL: 连接是否使用 SSL
  • SASL Options: Kafka SASL 认证选项
  • Allow Auto Topic Creation: 是否允许自动创建主题

实现细节: 使用 kafkajs 模块连接到 Kafka 并生产消息。

来源: server/util-server.js186-261 src/pages/EditMonitor.vue70-72 src/pages/EditMonitor.vue195-244

Game Server Monitors

Steam Game Server

Steam Game Server 监控检查 Steam 游戏服务器是否在线。

配置选项

  • Hostname: 游戏服务器的主机名或 IP
  • Port: 游戏服务器端口

实现细节: 使用 Steam API 检查服务器是否在线。

来源: server/model/monitor.js655-670 src/pages/EditMonitor.vue58-60

GameDig

GameDig 监控检查各种游戏服务器是否在线。

配置选项

  • Hostname: 游戏服务器的主机名或 IP
  • Port: 游戏服务器端口
  • Game: 游戏类型
  • Use Given Port Only: 是否只使用提供的端口

实现细节: 使用 gamedig 模块检查游戏服务器。

来源: package.json94 src/pages/EditMonitor.vue61-63 src/pages/EditMonitor.vue186-193

Network Monitors

Radius

Radius 监控检查 RADIUS 认证服务器是否可访问。

配置选项

  • Hostname: RADIUS 服务器的主机名或 IP
  • Port: RADIUS 服务器端口
  • Username: RADIUS 认证用户名
  • Password: RADIUS 认证密码
  • Secret: RADIUS 共享密钥
  • Called Station ID: 被叫站标识符
  • Calling Station ID: 呼叫站标识符

实现细节: 使用 node-radius-client 模块检查 RADIUS 服务器。

来源: server/util-server.js451-484 src/pages/EditMonitor.vue85-87

Tailscale Ping

Tailscale Ping 监控检查 Tailscale 节点是否可达。

配置选项

  • Hostname: Tailscale 节点的主机名或 IP

实现细节:TailscalePing 类中实现。

来源: server/uptime-kuma-server.js113 src/pages/EditMonitor.vue91-93 src/pages/EditMonitor.vue105-107

Common Monitor Options

所有监控类型共享这些通用配置选项

选项描述
Friendly Name监控的用户友好名称
间隔监控应检查服务的频率(秒)
Retry Interval服务中断时重试的频率(秒)
Max Retries将服务标记为下游之前的重试次数
超时响应的最大等待时间(秒)
描述监控目的的可选描述
Upside Down Mode启用后,DOWN 被视为 UP,反之亦然

来源: server/model/monitor.js108-158 src/pages/EditMonitor.vue110-113

Monitor Status Determination

此图说明 Uptime Kuma 如何确定监控的状态

来源: server/model/monitor.js327-412 src/util.js106-114

Extending with Custom Monitor Types

要创建自定义监控类型

  1. 创建一个扩展 MonitorType 的类
  2. 实现 check 方法以实现监控逻辑
  3. UptimeKumaServer.monitorTypeList 中注册监控类型
  4. EditMonitor.vue 中添加监控类型的 UI 元素

示例(简化版)

来源: server/monitor-types/snmp.js5-59 server/uptime-kuma-server.js112-118