尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

OneUptime 端口监控(Port Monitor)实战指南:从 TCP 连通性检查到源码级时序解析

OneUptime 端口监控(Port Monitor)实战指南:从 TCP 连通性检查到源码级时序解析 可观测性后端运维前端云原生微服务AI Agent【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址https://gitcode.com/GitHub_Trending/on/oneuptime点击查看免费下载端口监控Port Monitor是 OneUptime 中用于探测指定主机上 TCP/UDP 端口可用性的核心监控类型。它通过周期性地向目标端口发起网络连接并验证端口是否开放、是否及时响应来判断数据库、邮件服务器、应用服务等后台服务的健康状态。读完本文你将掌握在 OneUptime 控制台创建与配置端口监控的完整流程、连接时序与监控标准的精确含义并能结合仓库源码理解端口探测、重试与超时背后的实现原理。端口监控概述端口监控测试的是某个网络端口是否接受连接。基于这一基础能力它可以实现监控特定端口上的服务可用性追踪端口建立连接所花费的时间响应时间验证数据库、邮件服务器、应用服务器等服务是否在运行在服务中断影响到用户之前提前发现故障。从源码看端口监控的探测实现位于 packages/Probe/Utils/Monitors/MonitorTypes/PortMonitor.ts其核心是PortMonitor.ping()方法——它通过 Node.js 的net.Socket向目标host:port发起 TCP 连接并在connect事件触发时判定端口在线。创建端口监控在 OneUptime 控制台Dashboard中创建端口监控的步骤如下进入Monitors监控页面点击Create Monitor创建监控在监控类型中选择Port端口输入目标主机的主机名或 IP 地址以及端口号按需配置监控标准Monitoring Criteria。创建后系统会按照配置的探测间隔周期性地执行端口连通性检查并将结果用于在线Online、降级Degraded、离线Offline状态的判定与告警触发。配置选项主机名或 IP 地址输入目标主机的主机名或 IP 地址例如example.com或192.168.1.1。在源码中ping()方法接受的探测目标类型包括Hostname、IPv4、IPv6以及URL因此主机名、IPv4、IPv6 字面量均被支持。端口输入要监控的端口号合法范围为 0–65535。常见端口示例端口服务22SSH25SMTP80HTTP443HTTPS3306MySQL5432PostgreSQL6379Redis27017MongoDB端口值在底层由 packages/Common/Types/Port.ts 中的Port类型负责校验Port.isValid()会将字符串或数字解析为整数并校验其范围在 0–65535 之间非法值会抛出BadDataException。同时如果探测请求中未携带端口Port is not specifiedping()也会直接抛出BadDataException属于租户配置错误而非探测端缺陷。连接时序DNS 与 TCP 两个阶段对于以主机名为目标的端口检查OneUptime 将连接过程拆分为两个阶段测量这一设计在 packages/Common/Types/Monitor/PortMonitor/PortMonitorTimings.ts 中定义DNS 解析dnsLookupInMs从检查开始到第一次 TCP 连接尝试开始之间的时间TCP 连接tcpConnectInMs从第一次 TCP 连接尝试到连接成功的时间其中包含需要 IPv6/IPv4 回退fallback时尝试另一个地址族所花费的时间。总连接时间totalConnectionInMs DNS TCP即从检查开始到 TCP 连接成功为止的总时长它同时作为端口监控原有的“响应时间”字段保留因此现有标准、告警与历史图表可以继续使用同一字段。当目标是 IP 地址时不需要 DNS 解析因此 DNS 阶段被省略源码中destinationIsIpAddress的判断会跳过 DNS 计时在阶段计时功能上线前收集的旧检查结果则只显示总连接时间。关于计时的实现细节PortMonitor.ping()内部使用process.hrtime.bigint()记录各阶段的纳秒级时间戳并通过lookup、connectionAttempt、connect等 socket 事件精确切分阶段。对应的行为在 packages/Probe/Tests/Utils/Monitors/MonitorTypes/PortMonitor.test.ts 中有完整覆盖例如测试对主机名目标测量 DNS 与 TCP 两阶段验证了dnsLookupInMs: 50, tcpConnectInMs: 40, totalConnectionInMs: 90的切分结果测试对 IP 字面量省略 DNS 阶段断言portTimings中不存在dnsLookupInMs字段测试IPv6 到 IPv4 回退计入 TCP 连接时间验证了多地址族回退场景下的计时逻辑。监控标准Monitoring Criteria你可以配置监控标准根据以下指标判定端口处于在线online、降级degraded还是离线offline状态。可用的验证类型验证类型说明是否在线Is Online端口是否开放并接受连接总连接时间DNS TCPms建立连接的总时间包含主机名目标下的 DNS 解析时间端口 DNS 解析时间ms第一次 TCP 尝试前的 DNS 解析时间目标为 IP 时不可用端口 TCP 连接时间ms从第一次 TCP 尝试到连接成功的时间包含 IP 回退请求是否超时Is Request TimeoutDNS 解析或 TCP 连接尝试是否超过了配置的时间上限过滤器类型Filter Conditions对于是否在线和请求是否超时真True条件为真假False条件为假。对于总连接时间、端口 DNS 解析时间和端口 TCP 连接时间大于Greater Than响应时间超过阈值小于Less Than响应时间低于阈值大于或等于Greater Than or Equal To响应时间达到或超过阈值小于或等于Less Than or Equal To响应时间低于或等于阈值。提示由于目标为 IP 地址时没有 DNS 解析阶段可供评估需要同时兼容主机名与 IP 地址目标的标准请使用总连接时间或 TCP 连接时间而不是 DNS 解析时间。时间窗口评估选项在一段时间内评估此标准Evaluate this criteria over a period of time是标准表单中的一个独立复选框而非过滤器条件。勾选后系统不再比较最近一次检查的值而是比较在评估Evaluate下拉框中选择的聚合值——可选平均值Average、总和Sum、最大值Maximum Value、最小值Minimum Value、所有值All Values、任意值Any Value——在最近分钟For the last in minutes设定的窗口内的结果。所有值All Values只有在窗口被数据真正覆盖时才会匹配。刚刚创建的监控、或检查记录中断的监控其历史数据不足以对最近 N 分钟做出判断此时标准会等待而不是仅凭已有的单条读数就匹配。任意值Any Value则适合只要单次检查越界就立刻告警的场景它会立即触发。如果无数据If No Data用于控制窗口无法支撑该标准时的行为忽略Ignore默认标准不匹配适用于普通阈值告警触发Trigger将缺失数据本身视为问题适用于心跳式检查——静默本身就是故障视为零Treat As Zero将窗口当作单个零值比较适用于没有事件就代表零的计数器类指标。标准配置示例示例 1端口关闭时标记为离线验证类型Check on是否在线Is Online过滤器类型Filter Condition假False示例 2总连接时间超过 500ms 时告警验证类型总连接时间DNS TCPms过滤器类型大于Greater Than值500示例 3总连接时间缓慢时标记为降级验证类型总连接时间DNS TCPms过滤器类型大于Greater Than值200示例 4DNS 解析缓慢时告警验证类型端口 DNS 解析时间ms过滤器类型大于Greater Than值100示例 5TCP 连接建立缓慢时告警验证类型端口 TCP 连接时间ms过滤器类型大于Greater Than值250源码级原理探测、重试与超时理解底层实现有助于准确设置监控标准。以下关键行为均可从 packages/Probe/Utils/Monitors/MonitorTypes/PortMonitor.ts 及其测试中印证默认超时 5000ms未显式指定超时时timeout默认取 5000mspingOptions.timeout?.toNumber() || 5000。超时计时器是绝对截止时间——在connect()开始前就启动覆盖 DNS 解析与所有地址族的连接尝试而不只是空闲 socket 计时。重试次数retry表示首次尝试之后的额外重试次数0 表示只连接 1 次2 表示最多连接 3 次。未配置时默认重试 4 次即总共最多 5 次尝试。测试用例明确断言了retry: 0只连接一次、retry: 2连接三次、未设置时连接五次。此外当单次连接响应时间超过 10 秒时会额外重试一次。两次尝试之间会Sleep.sleep(1000)等待 1 秒再继续。端口 25 特殊策略部分云厂商会阻断出站 SMTP 流量。源码中保留了一个窄策略——当 ICMP 监控ping不可用时端口 25 的超时会被视为在线treatPort25TimeoutAsOnline以避免云环境误报该策略是否启用取决于Register.isPingMonitoringEnabled()。失败原因分类当探测失败时getRequestFailedDetails()会根据错误码将失败划分为四类阶段便于定位问题DNS 解析失败DNSResolutionENOTFOUND、EAI_AGAIN、EAI_FAIL等请求超时RequestTimeoutETIMEDOUT或超时截止TCP 连接失败TCPConnectionECONNREFUSED、ECONNRESET、EHOSTUNREACH、ENETUNREACH等网络错误NetworkError其他网络类错误。每一次失败尝试都会被记录attemptNumber、attemptedAt、responseTimeInMs、isOnline、failureCause最终返回包含全部尝试明细的结果供上层判定在线状态与生成告警。参考资料本文档来源packages/App/FeatureSet/Docs/Content/es/monitor/port-monitor.md另有 英文版 及其他多语言版本核心实现packages/Probe/Utils/Monitors/MonitorTypes/PortMonitor.ts时序结构定义packages/Common/Types/Monitor/PortMonitor/PortMonitorTimings.ts端口类型与校验packages/Common/Types/Port.ts单元测试packages/Probe/Tests/Utils/Monitors/MonitorTypes/PortMonitor.test.ts、packages/Probe/Tests/Utils/Monitors/MonitorTypes/PortMonitorEgressBoundary.test.ts赞分享可观测性后端运维前端云原生微服务AI Agent【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址https://gitcode.com/GitHub_Trending/on/oneuptime点击查看免费下载相关推荐OneUptime Port Monitor 端口监控实战配置 TCP/UDP 端口可用性检查与告警标准OneUptime Port Monitor 端口监控实战配置 TCP/UDP 端口可用性检查与告警标准 Port Monitor 是 OneUptime 基可观测性后端运维前端云原生微服务AI AgentOneUptime 端口监控Port Monitor实战指南TCP 端口可用性探测、分相计时与告警标准配置OneUptime 端口监控Port Monitor实战指南TCP 端口可用性探测、分相计时与告警标准配置 OneUptime 的端口监控Port Mo可观测性后端运维前端云原生微服务AI AgentOneUptime Port Monitor 使用指南TCP 端口可用性监控、连接分阶段计时与告警条件配置OneUptime Port Monitor 使用指南TCP 端口可用性监控、连接分阶段计时与告警条件配置 导读 Port Monitor 是 OneUpti可观测性后端运维前端云原生微服务AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表