OneUptime IP Monitor 配置指南:IPv4/IPv6 地址可达性与延迟监控

OneUptime IP Monitor 配置指南:IPv4/IPv6 地址可达性与延迟监控 OneUptime IP Monitor 配置指南IPv4/IPv6 地址可达性与延迟监控【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime本指南讲解 OneUptime 开源可观测平台中IP MonitorIP 监控器的完整配置与工作原理如何监控任意 IPv4/IPv6 地址的可达性、如何利用响应时间、丢包率、抖动等指标定义在线/降级/离线判定标准以及这些配置项在底层是如何被 Probe探针和监控判据引擎执行的。读完本文你将掌握 IP 监控器的创建流程、判据Criteria的完整配置语义并能结合源码理解 ICMP 探测与多包统计的真实实现。概述IP Monitor 解决什么问题IP 监控IP monitoring用于监控任意 IPv4 或 IPv6 地址的可用性与响应性。OneUptime 的分布式探针Probe会按调度周期性地对目标 IP 地址发起连通性测试并持续上报其状态。借助 IP Monitor你可以实现监控 IPv4 与 IPv6 地址的可用性追踪响应时间RTT与延迟变化检测网络连通性问题丢包、超时验证基础设施端点路由器、防火墙、网关、服务器公网 IP 等是否可达。在 OneUptime 的监控器类型体系中IP 属于Basic Monitoring基础监控类别。源码 MonitorType.ts 中定义了类型枚举IP IP其描述为 Reachability of any IPv4 or IPv6 address.搜索关键词包括ipv4、ipv6、address、reachability、host同时isProbableMonitor()确认 IP 监控器由探针按调度周期执行MonitorType.ts。创建 IP Monitor创建步骤与其他监控器一致在 OneUptime Dashboard 中操作进入Monitors监控器页面点击Create Monitor创建监控器选择IP作为监控器类型输入要监控的 IP 地址按需配置监控判据Monitoring Criteria设置监控间隔Interval与告警通知规则后保存。配置项IP AddressIP Address是 IP Monitor 的核心配置输入要监控的 IPv4 或 IPv6 地址例如192.168.1.1或2001:db8::1。该值必须是合法的 IP 地址格式。从源码看地址合法性校验由 IP.ts 中的IP.isIP()完成它同时调用 IPv4 与 IPv6 两套锚定anchored正则做全量匹配校验IPv4 正则严格限定 0-255 的四段十进制格式IP.tsIPv6 正则会匹配完整的 8 组十六进制冒号格式、压缩形式::、内嵌 IPv4 的 IPv6 地址如::ffff:192.168.1.1以及带 zone 的链路本地地址如fe80::1%eth0IP.ts。值得注意的实现细节两个正则都是锚定的且不带g标志因此像evil 2001:db8::1 evil、[2001:db8::1]:443这类包含地址形状的字符串不会被误判为合法 IP同时校验器不做 trim带前后空白的输入会被拒绝。在探针侧PingMonitor.ping()接受Hostname、IPv4、IPv6或URL作为探测目标PingMonitor.ts。IP Monitor 实际走的是 ICMP Echo 探测链路与同仓库中的 Ping Monitor 共享同一套 PingMonitor.ts 实现——两者的区别在于 Ping Monitor 接受主机名域名而 IP Monitor 只接受 IP 字面量。监控判据Monitoring CriteriaIP Monitor 通过配置判据来决定目标 IP 何时被视为在线online、降级degraded或离线offline。每条判据由过滤器类型Filter Type过滤器条件Filter Condition阈值Value组成并可选择是否在时间窗口上聚合评估。可用过滤器类型Filter Types下表为 IP Monitor 支持的过滤器类型对应源码 CriteriaFilter.ts 中CheckOn枚举的ResponseTime、PacketLossPercent、Jitter、IsOnline、IsRequestTimeoutFilter Type描述Is Online目标 IP 地址是否可达Response Time (in ms)响应时间单位毫秒Packet Loss (in %)未收到回应的 ICMP Echo 请求占比百分比Jitter (in ms)单次检查中发出的多个数据包往返时延的标准差Is Request Timeout请求是否超时这些指标来自探针每次检查发出的5 个 ICMP Echo 请求。源码常量PING_PACKET_COUNT 5明确注释多次探测把一次简单的可达性探测变成一次真正的测量——可以计算丢包率、抖动和 min/avg/max RTTPingMonitor.ts。统计结果结构PingMonitorResponse定义于 PingMonitorResponse.ts包含packetsSent、packetsReceived、packetLossPercent、minRoundTripTimeInMs、maxRoundTripTimeInMs、avgRoundTripTimeInMs、jitterInMs。其中Jitter的定义在源码中有明确注释它是本次检查发送的多个数据包之间往返时延的标准差standard deviation of round-trip times across the packets sent in this check。在PingMonitor.getPacketStatistics()中优先直接解析系统 ping 命令输出的stddev字段若解析不到则用每个数据包的 RTT 与均值计算方差并开方得到标准差PingMonitor.ts。过滤器条件Filter ConditionsIs Online与Is Request Timeout属于布尔型判据只有两种条件True— 条件成立False— 条件不成立。Response Time、Packet Loss、Jitter属于数值型判据支持四种比较条件Greater Than— 超过阈值Less Than— 低于阈值Greater Than or Equal To— 大于等于阈值Less Than or Equal To— 小于等于阈值。这些条件对应源码 CriteriaFilter.ts 中FilterType枚举的GreaterThan、LessThan、GreaterThanOrEqualTo、LessThanOrEqualTo、True、False。此外CriteriaFilterUtil.hasValueField()会为布尔型判据隐藏阈值输入框——IsOnline与IsRequestTimeout均被列在其中CriteriaFilter.ts保证 UI 与判据语义一致。在时间窗口上评估Evaluate This Criteria Over A Period Of TimeEvaluate this criteria over a period of time在一段时间内评估该判据是判据表单上的独立复选框不属于过滤器条件。开启后不再用最近一次检查的瞬时值做比较而是对聚合结果进行比较Evaluate聚合方式Average平均值、Sum总和、Maximum Value最大值、Minimum Value最小值、All Values所有值、Any Value任意值For the last (in minutes)时间窗口在最近 N 分钟内评估。这对应源码 CriteriaFilter.ts 的EvaluateOverTimeType枚举与 CriteriaFilter.ts 的EvaluateOverTimeMinutes枚举提供 2/3/5/10/15/20/30/45/60 分钟窗口。在判据结构CriteriaFilter中evaluateOverTime布尔标志与evaluateOverTimeOptions含timeValueInMinutes、evaluateOverTimeType、onNoDataPolicy共同表达该配置CriteriaFilter.ts。服务端求值由 EvaluateOverTime.ts 完成它会从指标时序库读取时间窗口内的样本返回聚合值或样本数组并给出Evaluated窗口可用或InsufficientData窗口为空或尚未填满等状态EvaluateOverTime.ts后续处理交由无数据策略决定。All Values 与 Any Value 的区别All Values只有当窗口内真正被数据完整覆盖时才匹配。刚创建的监控器、或检查记录中断的监控器历史数据不足以支撑最近 N 分钟的判定此时判据会等待不匹配而不是拿仅有的一两个读数去碰运气。Any Value用于只要任意一次检查越界就立刻告警的场景仍然立即触发。源码层面有一个相关保证CriteriaFilterUtil.isBooleanSeries()将IsOnline、IsRequestTimeout列为布尔型时序这类时序在随时间评估时只会提供All Values与Any Value两种聚合方式CriteriaFilter.ts——布尔序列的 Average/Sum/Max/Min 会得到一个无意义的数字如 0.6无法与 True/False 比较因此 UI 会直接隐藏这些选项。If No Data无数据时If No Data控制当窗口内无法支撑判据时数据缺失、监控器刚创建、或检查记录中断的行为Ignore默认— 判据不匹配。适用于普通阈值告警避免在数据不充分时误报。Trigger— 将缺失数据本身视为问题。适用于心跳式heartbeat检查此时静默本身就是故障。Treat As Zero— 将整个窗口视为一个零值参与比较。适用于计数器类指标没有事件确实意味着零。这对应源码 CriteriaFilter.ts 的NoDataPolicy枚举。EvaluateOverTime的文档注释进一步说明当窗口不可用时默认策略Ignore保证判据会等待 N 分钟的数据而不是拿恰好到达的那一个读数触发告警CriteriaFilter.ts。判据示例目标 IP 不可达时标记为离线配置项值Filter TypeIs OnlineFilter ConditionFalse当探针发出的 ICMP Echo 请求无任何回应时Is Online为 False监控器被标记为离线。底层实现中若主机无回应ping()会抛出UnableToReachServer以用户错误形式最终由调用方转换为{ isOnline: false, failureCause }PingMonitor.ts。延迟超过 100ms 时告警配置项值Filter TypeResponse Time (in ms)Filter ConditionGreater ThanValue100响应时间取所有数据包的平均 RTT而非第一个包源码注释明确多包检查中跨包平均 RTT 是更诚实的单值PingMonitor.ts。底层原理探针如何执行一次 IP 检查理解配置之后了解执行链路有助于排查问题。IP/Ping 监控的完整链路如下调度OneUptime 服务端生成MonitorProbe任务把 IP 监控器分发给分布式探针由MonitorType.isProbableMonitor()决定哪些类型由探针执行执行探针调用PingMonitor.ping()PingMonitor.ts内部使用 Node.jsping库的ping.promise.probe()向目标地址发送5 个 ICMP Echo 请求min_reply对应 Linux/macOS 的-c参数与 Windows 的-n参数统计getPacketStatistics()解析系统 ping 输出计算丢包率、min/avg/max RTT 与抖动当stddev缺失时用样本方差开方回退计算判据求值服务端把本次检查结果含PingMonitorResponse写入时序库EvaluateOverTime按需读取窗口内样本做聚合再交由比较器按FilterType与阈值判断是否越界告警越界判据触发事件流Incident/Alert/通知规则状态页Status Page随之更新。几个值得注意的工程细节重试机制ping()在无回应时最多重试 5 次DEFAULT_PING_RETRIES_WHEN_UNSET 4表示首次尝试之外的 4 次重试每次重试间隔 1 秒若响应时间超过 10 秒也会追加一次重试[PingMonitor.ts](https://link.gitcode.com/i/7f8c656b9078a8f8ad772da4f75914f8#L43-L47, L603-L617)超时语义当所有尝试都超时返回值是isOnline: true且isTimeout: true慢不是宕机这与设备可达性检查checkReachability()的语义不同——后者专为网络设备轮询设计将超时视为不可达PingMonitor.ts探针自身在线检查主机无回应后探针会调用OnlineCheck.canProbeMonitorPingMonitors()确认探针自身是否在线若探针本身离线则返回null无结论服务端保留该监控器之前的在线状态避免探针失联造成全量误报PingMonitor.tsIPv6 平台兼容getReachabilityPingConfig()处理了平台差异——macOS 的ping6既没有单包等待也没有 deadline 标志Windows 的 ping 没有 deadline 标志代码在相应平台会跳过这些参数PingMonitor.ts。相关文档与进一步阅读判据Criteria与过滤器类型的完整枚举定义CriteriaFilter.tsIP/Ping 监控器的探针实现PingMonitor.ts多包统计结果的数据结构PingMonitorResponse.tsIP 地址校验实现IPv4/IPv6 正则IP.ts监控器类型体系与 IP 在其中的定位MonitorType.ts时间窗口聚合求值引擎EvaluateOverTime.ts相关测试PingMonitorCheckReachability.test.ts、PingMonitor.retries.test.ts、EvaluateOverTime.test.ts【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考