拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Nightingale CDN 拨测集成:用 Categraf 主动探测 CDN 可用性与访问质量

Nightingale CDN 拨测集成用 Categraf 主动探测 CDN 可用性与访问质量【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale导读本文讲解 Nightingale 开源监控平台内置的CDN 拨测主动探测集成。它由仓库中的 integrations/CDN 目录承载通过 Categraf 插件按周期对 CDN 加速域名发起真实 HTTP 请求逐阶段拆分 DNS 解析、TCP 建连、TLS 握手、首包响应与整体耗时并对响应内容与状态码做期望校验从而把CDN 是否可用、访问快不快、故障发生在哪个环节转化为一组可查询、可告警、可做根因定位的指标。读完本文你将掌握该集成的配置项语义、指标含义与cdn_probe_result状态码排障方法并能直接复用仓库内置的告警规则模板。集成整体构成该集成在 integrations/CDN 目录下按标准集成规范组织共四个子目录collect/cdn/cdn.tomlCategraf 采集器侧的插件配置模板是本文的核心配置对象alerts/cdn_by_categraf.json内置的 4 条 PromQL 告警规则默认disabled: 1导入后手动启用markdown/README.md 与 markdown/README.en_US.md中英文使用说明即本文依据的主体文档i18n/en_US.json告警规则与指标的英文词条。从源码结构看Nightingale 服务端在启动时会扫描integrations目录把每个子目录注册为内置组件component读取其 icon、markdown 说明、alerts 告警模板、dashboards 与 metrics 元数据并写入内置库相关逻辑位于 center/integration/init.go。这意味着只要服务端能读到integrations/CDN目录CDN 集成即可作为系统内置组件在集成中心中呈现无需手工编写告警规则。值得注意的一个细节CDN 拨测的指标元数据并不在 CDN 目录内而是登记在 integrations/HTTP_Response/metrics/categraf.json 中typ为HTTP_Response名称前缀为拨测 -cdn_dns_request、cdn_tcp_connect、cdn_tls_handshake、cdn_first_byte、cdn_total_cost、cdn_response_status_code、cdn_probe_result_code等指标均在其中并附带了单位毫秒与中英文注释。这说明该拨测能力与 HTTP 探测共用同一套采集实现CDN 集成只是面向 CDN 场景的配置与告警封装。采集配置详解在 Categraf 上启用 CDN 拨测只需要把 collect/cdn/cdn.toml 中的实例[[instances]]填充后放到 Categraf 的采集配置目录。完整配置骨架如下对应文档原文注释已展开说明[[instances]] targets [ https://www.baidu.com ] # # 自定义DNS # # 自定义dns 地址 # dns # # 自定义dns使用的协议 # dns_Protocol udp # # 自定义dns 超时时间 # dns_timeout_ms 1000 # # 连接相关配置 # 连接超时时间 connect_timeout_ms 3000 # tls 握手超时时间 tls_handshake_timeout_ms 1000 # # http 相关配置 # http 请求方法 HEAD GET POST method GET # # 响应内容编码支持GBK GB2312 HZGB2312 GBK18030 BIG5 ,default: UTF8 encode UTF8 # # http 请求头部配置 # headers { Authorization, X-Forwarded-For, Host} headers { User-AgentMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36} ## body 配置 paylaod ## basic auth配置 ,也可以直接在header中配置 # username # password # # 响应部分配置 # 匹配方式 完全匹配还是部分匹配, 支持complete or substring # 不配置 则使用substring match_pattern substring # 期望返回的响应内容 expect_response_string ok # 期望返回的响应码 expect_response_status_code 200参数语义与取值说明配置项作用取值/默认targets被探测的 CDN 加速域名 URL 列表可配置多个每个 URL 独立成一条指标序列示例https://www.baidu.com模板中默认为注释状态需自行填写dns自定义 DNS 服务器地址留空使用系统默认解析字符串如8.8.8.8dns_Protocol自定义 DNS 使用的传输协议udp默认/tcp等dns_timeout_msDNS 解析超时时间毫秒示例1000connect_timeout_msTCP 建连超时时间毫秒示例3000tls_handshake_timeout_msTLS 握手超时时间毫秒示例1000methodHTTP 请求方法HEAD/GET/POST示例GETencode响应内容编码UTF8默认另支持GBK、GB2312、HZGB2312、GBK18030、BIG5headers自定义请求头TOML 内联表写法如{ User-AgentMozilla/5.0 ... Chrome/104.0.0.0 Safari/537.36}也可覆盖Authorization、X-Forwarded-For、Hostpaylaod请求体内容注意原文档此处的拼写为paylaod使用时应保持与插件解析一致的键名字符串如 POST 请求的 bodyusername/passwordBasic Auth 认证也可直接在headers中携带认证头字符串match_pattern响应内容匹配方式complete完全匹配或substring部分匹配默认不配置即为此值expect_response_string期望的响应内容与match_pattern配合做 Body 校验示例okexpect_response_status_code期望的响应状态码示例200关键参数的行为影响从告警与指标元数据的注释可以反推这些参数的实际影响路径超时类参数决定故障分类边界。告警规则注释中明确写到cdn 插件的耗时类指标单位为毫秒与配置项connect_timeout_ms/dns_timeout_ms保持一致。也就是说connect_timeout_ms 3000意味着建连超过 3 秒即按失败处理并落入cdn_probe_result的Timeout分类且所有耗时指标cdn_dns_request/cdn_tcp_connect/cdn_tls_handshake/cdn_first_byte/cdn_total_cost的单位都是毫秒与配置值同一量纲做阈值告警时无需换算。期望校验参数决定内容正确性的判定。match_pattern选择complete还是substring直接影响BodyMismatch响应内容不匹配是否触发substring只要响应体中包含expect_response_string即通过complete则要求完全一致。expect_response_status_code不匹配时落入CodeMismatch。headers提供真实浏览器视角。模板默认携带 Chrome 的User-Agent可以规避部分 CDN 对默认 UA 的拦截或差异化响应让探测结果更贴近真实用户访问。指标说明每次探测完成后插件会输出以下 7 个指标相对路径引用 markdown/README.md指标名含义单位cdn_dns_request请求资源 URL 时 DNS 解析花费的时间毫秒cdn_tcp_connect请求资源 URL 时建立 TCP 连接花费的时间毫秒cdn_tls_handshake请求资源 URL 时 TLS 握手花费的时间毫秒cdn_first_byte首包响应时间从发出请求到收到首个响应包毫秒cdn_total_cost请求资源 URL 的总耗时毫秒cdn_response_status_code请求资源的响应状态码无gaugecdn_probe_result探测结果编码0 表示成功非 0 表示异常类别无其中cdn_response_status_code在 integrations/HTTP_Response/metrics/categraf.json 中登记的类型为gauge其余耗时指标登记单位均为millisecondscdn_probe_result_code与文档中的cdn_probe_result指向同一探测结果语义0 正常非 0 异常。cdn_probe_result 响应码说明Success 0 探测成功 ConnectionFailed 1 连接失败 Timeout 2 超时 DNSError 3 DNS解析失败 AddressError 4 地址错误 BodyMismatch 5 响应内容不匹配 CodeMismatch 6 响应码不匹配这套编码与 HTTP 探测集成integrations/HTTP_Response/metrics/categraf.json 中http_response_result_code的注释完全一致说明 CDN 拨测与 HTTP 拨测共用同一套探测结果分类模型。0 以外的值都代表探测未通过可作为! 0直接告警。内置告警规则与排障动作仓库在 alerts/cdn_by_categraf.json 中预置了 4 条 Prometheus 告警规则全部以cdn_前缀指标为数据源、每 15 秒评估一次默认处于禁用状态disabled: 1在集成中心导入后需手动启用。每条规则都通过annotations.action附带了完整的排障 SOP1. CDN 探测失败查询语句cdn_probe_result ! 0告警标签alertnameCdnProbeFailed级别 severity 1持续prom_for_duration: 120秒后触发排障动作从告警标签取出被探测的target在本地执行curl -sv target复现对照cdn_probe_result取值判断故障环节——值为 3DNS 失败执行dig 域名确认 CNAME 是否仍指向 CDN 厂商排查是否有人误改解析值为 1/2 从探测点执行mtr CDN节点IP判断是网络还是 CDN 节点故障并到厂商控制台确认是否有节点异常公告值为 5/6 说明回源内容或状态码变了先查源站是否发布过版本或已经故障。2. CDN 响应状态码异常查询语句cdn_response_status_code 400告警标签alertnameCdnBadStatusCode级别 severity 1排障动作执行curl -sI target确认实际状态码4xx 中 403 最常见检查 CDN 防盗链、Referer 白名单、URL 鉴权配置是否刚变更404 则确认源站资源是否被删5xx 说明回源失败直接 curl 源站地址验证源站健康度并检查回源 Host 头与源站站点配置是否匹配确认是 CDN 侧配置问题的回滚最近一次配置变更并刷新缓存。3. CDN 首包响应时间过长查询语句cdn_first_byte 2000毫秒即首包超过 2 秒告警标签alertnameCdnSlowFirstByte级别 severity 2持续 300 秒触发排障动作用curl -w %{time_namelookup} %{time_connect} %{time_starttransfer}\n -o /dev/null -s target拆解耗时分布首包慢而连接快说明是回源慢检查源站响应时间与 CDN 缓存命中率命中率低则检查缓存规则排查是否被Cache-Control: no-cache或随机查询参数导致无法缓存源站本身慢的先优化源站并考虑开启 CDN 回源长连接与预取。4. CDN 请求总耗时过长查询语句cdn_total_cost 5000毫秒即整体超过 5 秒告警标签alertnameCdnSlowTotalCost级别 severity 2持续 300 秒触发排障动作用curl -w拆解 DNS/TCP/TLS/首包/传输各阶段耗时找出占比最大的阶段DNS 阶段慢的检查解析链路与 TTL 设置TLS 阶段慢的确认证书链是否过长、是否开启会话复用传输阶段慢的多为文件过大或边缘带宽被打满评估开启压缩与分片各阶段都不突出但总量高的从多个地域的探测点对比确认是否特定区域的节点问题并反馈厂商。这几条规则覆盖了可用性cdn_probe_result ! 0、正确性状态码、体验首包、总耗时三个层面的 CDN 健康维度且每条都给出了从指标到命令再到厂商侧动作的完整闭环可以直接作为 CDN 拨测告警的最佳实践基线。端到端使用流程综合以上内容在 Nightingale Categraf 体系中启用 CDN 拨测的完整链路如下配置采集在 Categraf 中启用 collect/cdn/cdn.toml把targets替换为要探测的 CDN 加速域名可多个按需调整超时、请求头与期望校验参数确认指标入库Categraf 采集后cdn_*系列指标经 Prometheus 协议写入 Nightingale 数据源可在指标浏览/内置指标字典中检索到integrations/HTTP_Response/metrics/categraf.json 提供了这些指标的中英文名、单位与注释导入告警在集成中心将 CDN 组件的 alerts/cdn_by_categraf.json 导入并启用服务端启动时扫描 center/integration/init.go 中的 alerts 装载逻辑会把它注册为系统内置告警模板排障闭环收到告警后按annotations.action中的 SOP 使用curl、dig、mtr逐段定位 DNS / 网络 / CDN 节点 / 源站环节的问题。常见注意事项单位一致性所有耗时类指标与超时配置项同为毫秒写告警阈值如cdn_first_byte 2000、cdn_total_cost 5000时无需单位换算期望校验要贴合实际若探测页面内容变化频繁expect_response_string建议选稳定的关键字并使用默认的substring匹配避免因页面改版误报BodyMismatch探测点即监控视角Categraf 所在机器的网络位置就是拨测视角若需多地域观测应在不同区域部署多个探测实例模板默认 UA 与真实浏览器一致可减少 CDN 对探测流量的差异化处理默认禁用内置告警规则默认disabled: 1需显式启用才会生效。【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门