OneUptime DNS 监控器完全指南:配置参数、判定条件与源码实现解析
OneUptime DNS 监控器完全指南配置参数、判定条件与源码实现解析【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime在 OneUptime 开源可观测性平台中DNS 监控器DNS Monitor用于持续监督你域名的 DNS 解析状态与正确性平台会周期性发起 DNS 查询并根据你配置的判定条件对响应结果进行验证。阅读本文后你将掌握在 OneUptime 中创建与配置 DNS 监控器的完整流程、全部配置项与判定条件的使用方法并能结合仓库源码理解探测端如何查询、判定端如何评估的底层原理从而构建出贴合自身域名场景的 DNS 可用性与正确性监控方案。DNS 监控器概述DNS 监控器会向 DNS 服务器查询指定类型的记录并评估查询结果。依托这一能力你可以实现监控 DNS 服务的可用性验证 DNS 记录是否返回了正确的值例如 A 记录是否仍指向期望的 IP追踪 DNS 解析的响应时间变化校验 DNSSEC 配置的有效性及早发现 DNS 传播延迟或 DNS 劫持等问题。从架构上看OneUptime 的监控体系由**探测端Probe与判定端Server**协作完成Probe/Utils/Monitors/MonitorTypes/DnsMonitor.ts负责实际执行 DNS 查询并产出结构化响应而Common/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts负责把响应与监控器上配置的判定条件逐条比对决定该次检查是通过还是触发告警。创建 DNS 监控器在 OneUptime 控制台中创建 DNS 监控器的步骤在 OneUptime 面板中进入监控器Monitors点击创建监控器Create Monitor在监控器类型中选择DNS输入要查询的域名与记录类型按需配置监控判定条件。对应地前端表单实现在 DnsMonitorStepForm.tsx 中它提供域名Domain Name、记录类型Record Type两个必填输入以及一个可选的DNS 服务器输入高级选项端口、超时、重试默认折叠点击 Advanced: Port, Timeout and Retries 按钮后展开。配置选项详解基础配置字段说明是否必填域名Domain Name要查询的域名例如example.com是记录类型Record Type要查询的 DNS 记录类型是DNS 服务器DNS Server自定义 DNS 服务器例如8.8.8.8留空则使用系统默认 DNS否在底层数据结构中这三个字段对应Common/Types/Monitor/MonitorStepDnsMonitor.ts接口的queryName、recordType与hostname。源码注释明确说明hostname即 DNS server (e.g. 8.8.8.8), empty system default。支持的记录类型记录类型说明AIPv4 地址记录AAAAIPv6 地址记录CNAME规范名称别名记录MX邮件交换记录NS名称服务器记录TXT文本记录SPF、DKIM 等SOA权威起始Start of Authority记录PTR指针记录反向 DNSSRV服务定位记录CAA证书颁发机构授权记录这 10 种类型与源码枚举 DnsRecordType.ts 完全一致A / AAAA / CNAME / MX / NS / TXT / SOA / PTR / SRV / CAA前端表单的记录类型下拉框即由该枚举自动生成。高级配置字段说明默认值端口PortDNS 端口号53超时Timeout, ms等待响应的时间5000重试Retries首次尝试失败后的重试次数0 表示只尝试一次3以上默认值与 MonitorStepDnsMonitor.ts 中MonitorStepDnsMonitorUtil.getDefault()的返回值一一对应port: 53、timeout: 5000、retries: 3。需要注意重试语义重试次数是首次尝试之后的追加次数例如设置为 2 意味着总共最多尝试 3 次设置为 0 则只查询一次。前端表单对该字段的提示文案也明确说明了这一点2 means up to 3 attempts in total. Set to 0 for no retries.。此外MonitorStepDnsMonitorUtil.fromJSON()中有一个细节注释——0 retries is a real answer and must survive the round-trip0 次重试是合法配置必须在序列化往返中保留防止 0 被误判为未设置。监控判定条件你可以配置判定条件决定 DNS 在什么情况下被视为在线Online、降级Degraded或离线Offline。可用的检查类型Check On检查类型说明DNS 在线DNS Is OnlineDNS 服务器是否响应查询DNS 响应时间msDNS Response Time查询响应耗时毫秒DNS 记录存在DNS Record Exists查询是否存在 DNS 记录DNS 记录值DNS Record ValueDNS 记录返回的值DNSSEC 有效DNSSEC Is Valid是否通过 DNSSEC 验证这些检查类型在源码枚举 CriteriaFilter.ts 的CheckOn中均有对应值DnsIsOnline、DnsResponseTime、DnsRecordExists、DnsRecordValue、DnssecIsValid。其中DnsRecordExists与DnssecIsValid属于布尔型检查前端不展示阈值输入框hasValueField()返回 falseDnsIsOnline与DnsResponseTime还支持随时间评估Evaluate Over Time即按窗口内多个采样点聚合后判定避免单次抖动误报。可用的过滤类型Filter TypeDNS 在线、DNS 记录存在、DNSSEC 有效三类检查使用布尔过滤为真True条件为真为假False条件为假DNS 响应时间使用数值比较过滤大于Greater Than、小于Less Than、大于或等于Greater Than Or Equal To、小于或等于Less Than Or Equal ToDNS 记录值使用字符串匹配过滤包含Contains记录值包含指定文本不包含Not Contains记录值不包含指定文本以…开头Starts With记录值以指定文本开头以…结尾Ends With记录值以指定文本结尾等于Equal To记录值与指定文本完全匹配不等于Not Equal To记录值与指定文本不匹配上述过滤类型均可在 CriteriaFilter.ts 的FilterType枚举中找到对应实现True、False、GreaterThan、LessThan、Contains、NotContains、StartsWith、EndsWith、EqualTo、NotEqualTo等。值得注意的是DnsRecordValue的判定逻辑见DnsMonitorCriteria.ts会先尝试把记录值与阈值都转成数字做数值比较若无法转数字再退化为字符串比较因此对 MX/SRV 这类数值 主机名混合格式的记录也可以用数值过滤对优先级、端口等字段做判断。判定条件示例验证 DNS 是否正在解析检查于Check OnDNS 在线过滤类型Filter Type为真True验证 A 记录指向正确的 IP检查于DNS 记录值过滤类型等于Equal To值Value93.184.216.34DNS 响应缓慢时告警检查于DNS 响应时间ms过滤类型大于Greater Than值500验证 DNSSEC 有效检查于DNSSEC 有效过滤类型为真True源码级原理探测端如何执行 DNS 查询理解判定条件背后OneUptime 的 Probe 在DnsMonitor.ts中完成实际查询其核心流程如下构造 Resolver 并设置超时使用 Node.jsdns.promises.Resolver以options.timeout || config.timeout || 5000的优先级确定超时时间显式传入的 per-step 超时优先于配置默认值这是修复过的一个历史问题见DnsMonitorTimeout.test.ts中引用的 issue 背景。设置自定义 DNS 服务器当配置了hostname如8.8.8.8时调用resolver.setServers([server])若同时配置了非 53 的端口服务器字符串会拼接为hostname:port形式。按记录类型分发查询resolveRecords()中针对 10 种记录类型分别调用 Node.js DNS API——resolve4A、resolve6AAAA、resolveCnameCNAME、resolveMxMX值格式化为priority exchange、resolveNsNS、resolveTxtTXT多段字符串拼接、resolveSoaSOA、resolvePtrPTR、resolveSrvSRV值格式化为priority weight port name与resolveCaaCAA值取critical与 issue/issuewild/iodef 字段。A/AAAA/SOA 记录会附带 TTL。测量响应时间利用process.hrtime()精确计算查询耗时并以毫秒为单位向上取整。DNSSEC 验证通过外部dig命令执行dnssec queryName recordType dnsServer其中 DNS 服务器默认使用支持 DNSSEC 验证的 Google Public DNS8.8.8.8并在输出中匹配 ADAuthenticated Data已认证数据标志位来判定 DNSSEC 是否有效。源码注释解释了原因Docker 内部 DNS 与许多默认解析器不做 DNSSEC 验证AD 标志永远不会置位。若dig不可用或校验失败isDnssecValid返回undefined而非直接判失败。该命令的超时同样受步骤超时约束避免在慢解析之上叠加额外等待。执行前还会用正则校验域名/IP 格式防止参数注入。查询结果被封装为 DnsMonitorResponse.ts 结构包含isOnline、responseTimeInMs、failureCause、records记录数组每项含type、value、可选ttl、可选的isDnssecValid与isTimeout以及每次尝试的probeAttempts明细。如果所有重试都失败且错误信息包含 timeout/timed out/etimeout响应会标记isTimeout: true并附带 Request was tried N times and it timed out. 的失败原因。源码级原理重试机制与超时语义重试行为由MonitorRetry.canRetry()统一控制规则如下测试用例见 DnsMonitor.retries.test.tsretry: 0时只执行 1 次查询不触发Sleep.sleep(1000)间隔retry: 2时共执行 3 次attemptNumber 为 1、2、3期间sleep被调用 2 次未显式传入 retry 时使用步骤配置的retries值配置也缺省时按常量DEFAULT_RETRIES_WHEN_UNSET 2兜底即仍保持 3 次尝试的历史行为。每次失败尝试都会被记录进probeAttempts含attemptNumber、attemptedAt、responseReceivedAt、responseTimeInMs、isOnline与failureCause最终totalAttempts反映真实尝试总数。此外若重试耗尽且不是在线自检请求Probe 还会调用OnlineCheck.canProbeMonitorWebsiteMonitors()确认自身网络是否在线避免把 Probe 离线误报成被监控域名故障。源码级原理判定端如何评估条件查询响应回到服务端后由 DnsMonitorCriteria.ts 的isMonitorInstanceCriteriaFilterMet()逐条判定五种检查类型的评估方式分别为DnsIsOnline比较isOnline布尔值支持随时间评估DnsResponseTime将阈值转数值后与responseTimeInMs做compareCriteriaNumbers比较支持平均值/总和/最大值/最小值/全部值/任意值等窗口聚合DnsRecordExists只要records.length 0即认为存在配合 True/False 过滤判定DnssecIsValid仅在isDnssecValid不为undefined时才参与判定Probe 无法验证时跳过该条件避免误报DnsRecordValue遍历所有返回记录先尝试数值比较对可转数值的阈值与记录值否则进行字符串匹配任一记录命中即返回命中结果如DNS record (A): ...。对于随时间评估的过滤EvaluateOverTime会基于monitoringInterval监控周期计算窗口应覆盖的采样数。若窗口内尚无数据监控器刚启动或运行时间不足会遵循NoDataPolicy默认Ignore返回无数据策略的决策结果而不是拿恰好到达的单次读数触发告警——这修正了过去 N 分钟全部值被单次坏读数误触发的问题。实战建议结合原文档与源码这里给出几条可落地的配置建议核心域名可用性用DNS 在线 为真作为基础存活条件配合DNS 响应时间 阈值捕获缓慢但未中断的解析劣化防劫持与防传播异常对关键 A/AAAA 记录使用DNS 记录值 期望 IP进行精确匹配可发现 DNS 劫持或配置回滚对变更中的域名可用包含过滤兼容多值场景邮件链路验证用 MX 记录 等于/包含校验邮件交换服务器是否仍符合预期DNSSEC 回归监控开启DNSSEC 有效 为真在签名过期或配置错误前提前告警注意该检查依赖 Probe 环境具备dig命令且能访问验证型解析器自建 DNS 服务器场景在DNS 服务器字段填写自建解析器地址如8.8.8.8可精确验证指定上游的解析结果而非系统默认 DNS若自建服务运行在非标准端口可在高级选项中调整端口号。要深入验证以上行为可直接查看 DnsMonitor.retries.test.ts、DnsMonitorTimeout.test.ts 与 DnsMonitorCriteria.test.ts 三组测试它们分别覆盖了重试计数、超时优先级与判定条件评估的边界行为。【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Pandoc `--strip-comments` 实战:彻底清除 Markdown/Textile 源文件中的 HTML 注释

Pandoc `--strip-comments` 实战:彻底清除 Markdown/Textile 源文件中的 HTML 注释

Pandoc --strip-comments 实战:彻底清除 Markdown/Textile 源文件中的 HTML 注释 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 导读 --strip-comments 是 Pandoc 提供的一个布尔型选项&#xf…

2026/9/19 4:59:14 阅读更多 →
NVIDIA官网下载太慢?多线程加速与镜像源替换方案全攻略

NVIDIA官网下载太慢?多线程加速与镜像源替换方案全攻略

说实话,NVIDIA 官网的下载速度,是我这几年用过的海外软件站里最让人血压上升的一个。前几天帮朋友在一台 Ubuntu 22.04 上配 CUDA 12.4 环境,驱动安装包差不多 2.5GB,用浏览器直接下载,速度稳定在 300KB/s 到 1MB/s 之…

2026/9/20 6:58:47 阅读更多 →
Element UI Tooltip 组件完全指南:9 种定位、明暗主题与 Popper 高级用法实战解析

Element UI Tooltip 组件完全指南:9 种定位、明暗主题与 Popper 高级用法实战解析

Element UI Tooltip 组件完全指南:9 种定位、明暗主题与 Popper 高级用法实战解析 【免费下载链接】element A Vue.js 2.0 UI Toolkit for Web 项目地址: https://gitcode.com/gh_mirrors/eleme/element Tooltip 是 Element UI(Vue.js 2.0 UI Too…

2026/9/19 4:58:13 阅读更多 →

最新新闻

基于NSGA-II的水电光伏多能互补优化调度与MATLAB实现

基于NSGA-II的水电光伏多能互补优化调度与MATLAB实现

1. 项目概述与优化调度问题拆解1.1 水电-光伏多能互补到底在解决什么先说一个我做了无数次实验后最有感触的点:水电和光伏搭配,不是简单把两个电源的出力曲线加在一起就能完事。光伏出力受太阳辐照度、温度、云层遮挡影响,一天之内波动极大&a…

2026/9/20 6:59:06 阅读更多 →
LibreChat+MCP:构建企业级AI Agent调度中枢

LibreChat+MCP:构建企业级AI Agent调度中枢

1. LibreChat 不是另一个 ChatGPT 界面,而是 Agent 生态的「操作系统雏形」LibreChat 这个名字刚出现时,很多人下意识把它当成又一个开源版 ChatGPT Web UI——毕竟它长得确实像:左侧对话列表、中间聊天窗口、右上角模型切换下拉框。但如果你…

2026/9/20 6:59:06 阅读更多 →
FSD自动驾驶方案拆解:感知、规划、仿真与验证全解析

FSD自动驾驶方案拆解:感知、规划、仿真与验证全解析

简介:这份《特斯拉FSD自动驾驶方案深度解析》文档,面向自动驾驶研发工程师、算法研究员及对智能驾驶技术栈感兴趣的学习者,系统拆解了FSD从感知、规控到执行的全链路软硬件架构。内容覆盖规划、神经网络、训练数据、训练基础设施、AI编译与推…

2026/9/20 6:59:06 阅读更多 →
AIGC内容检测工具对比:千笔与PaperRed在学术场景的应用

AIGC内容检测工具对比:千笔与PaperRed在学术场景的应用

1. 项目背景与核心价值解析2026年被称为AIGC内容检测的爆发元年,随着各类AI写作工具的普及,学术诚信与内容原创性验证需求呈现指数级增长。在这个背景下,"千笔专业降AIGC智能体"和"PaperRed"两款工具瞄准了MBA等高端学术…

2026/9/20 6:59:06 阅读更多 →
医疗设备铝电解电容选型指南:TDK电容在呼吸机与监护仪中的关键参数与失效风险

医疗设备铝电解电容选型指南:TDK电容在呼吸机与监护仪中的关键参数与失效风险

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 6:59:06 阅读更多 →
深入 Mos:macOS 鼠标滚动平滑与独立方向控制的实现解析(README 全解读)

深入 Mos:macOS 鼠标滚动平滑与独立方向控制的实现解析(README 全解读)

桌面应用 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently for your mouse on macOS 项目地址: https://g…

2026/9/20 6:58:06 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →