深度解析:自动检测应用与依赖服务间的网络问题)
Coroot 网络巡检Network Inspection深度解析自动检测应用与依赖服务间的网络问题【免费下载链接】corootCoroot is an open-source observability and APM tool with AI-powered Root Cause Analysis. It combines metrics, logs, traces, continuous profiling, and SLO-based alerting with predefined dashboards and inspections.项目地址: https://gitcode.com/GitHub_Trending/co/corootCoroot 的网络巡检Network Inspection是一套内置于审计报告体系中的自动化网络诊断能力它基于分布式系统模型自动识别每个应用所依赖的上游服务持续监测 RTT、TCP 连接成功率、活跃连接数、重传与流量等指标并对照可覆盖的阈值给出巡检结论。读完本文你将理解网络巡检的五大检查项、上游依赖的分类规则、底层连接数据模型的判定逻辑以及如何在应用界面和总览页中定位高延迟、连接失败、断连三类典型网络问题。网络巡检是什么Coroot 官方文档对网络巡检给出了一个精炼的定义This inspection detects network issues between the application and the services on which it depends.该巡检用于检测应用与其所依赖服务之间的网络问题。正如 Inspections 总览 所述Coroot 将传统的指标分析方式做了反转它使用分布式系统模型在每个应用的上下文中评估各项巡检而不是让运维人员面对海量告警自行筛选。网络巡检正是这一理念的典型体现——它不需要你手动挑选哪条链路而是自动遍历当前应用的每一个上游依赖逐一评估网络质量。从 UI/UX 层面看每个应用级仪表盘的状态就是由对应检查项计算而来的见 docs/docs/inspections/overview.md网络巡检的状态最终也会汇总到应用总览页面的 Network 状态栏中。网络巡检报告按上游依赖逐一展示 RTT、TCP 连接与流量指标并对超阈值项给出巡检结论。网络巡检的五大检查项网络巡检的实现集中在 auditor/network.go其检查项定义在 model/check.go 中。当应用存在上游依赖Upstreams非空时审计器会创建一份名为Net的网络审计报告见 model/audit_report.go并注册以下五个检查检查项Check标题默认阈值单位触发条件模板NetworkRTTNetwork RTT within the cluster0.01secondRTT between services within the cluster exceeds thresholdNetworkRTTExternalNetwork RTT to external services0.2secondRTT to an external service exceeds thresholdNetworkRTTOtherClustersNetwork RTT to services in other clusters0.1secondRTT to a service in another cluster exceeds thresholdNetworkConnectivityNetwork connectivity0—the number of unavailable upstream services thresholdNetworkTCPConnectionsTCP connections0—the number of upstream services to which the app failed to connect threshold五个检查项覆盖了网络排障的两个核心维度延迟RTTNetworkRTT、NetworkRTTExternal、NetworkRTTOtherClusters分别针对集群内、外部服务、其他集群三类链路默认阈值从 0.01s集群内到 0.2s外部服务差异明显——这正是因为不同链路的物理距离与网络拓扑决定了其合理的延迟基线不同。连通性与连接NetworkConnectivity关注连不上连通性中断NetworkTCPConnections关注连接失败连接尝试失败两者都是 ItemBased 类型检查只要存在一个受影响的上游服务检查即被标记。以NetworkRTT为例检查配置中还带有消息模板用于在巡检报告中生成可读的结论文本model/check.gohigh in-cluster network latency: {{.Items service}} affected, max RTT: {{.ValueDuration}}当某个上游的 RTT 超过阈值时审计器会调用AddItem把该上游服务加入受影响列表Calc()随后渲染出类似high in-cluster network latency: 2 services affected, max RTT: 15ms的结论渲染逻辑见 model/check.go。上游依赖如何分类集群内 / 外部 / 跨集群网络巡检最巧妙的地方在于对上游依赖的自动分类。在 auditor/network.go 中每一个上游连接u.RemoteApplication都会按以下优先级被归入三类之一switch { case u.RemoteApplication.Id.Kind model.ApplicationKindExternalService: rttCheck rttCheckExternal // 外部服务 → 使用 0.2s 阈值 case a.app.Id.ClusterId ! u.RemoteApplication.Id.ClusterId: rttCheck rttCheckOtherClusters // 其他集群 → 使用 0.1s 阈值 default: rttCheck rttCheckInCluster // 集群内 → 使用 0.01s 阈值 }这一分类逻辑直接决定了哪个检查项会被触发、采用哪个阈值也意味着同一个应用如果同时依赖集群内的数据库、云上的外部 API 和另一个集群的 KafkaCoroot 会分别用各自合理的基线去评估而不会用集群内 10ms 的标准去误报公网链路。RTT 检查的取值逻辑是取最大值if last rttCheck.Value() { rttCheck.SetValue(last) }即检查的最终值等于所有受影响上游中最大的 RTT任何一条链路超阈值都会通过AddItem被记录auditor/network.go。底层数据模型AppToAppConnection 的判定逻辑网络巡检的指标来自应用间连接数据模型AppToAppConnection定义在 model/connection.go。每个连接维护以下时间序列TimeSeriesRtt往返时延Round-trip timeSuccessfulConnections/FailedConnections成功 / 失败的连接次数Active活跃连接数ConnectionTime连接建立累计耗时用于计算平均连接延迟BytesSent/BytesReceived出站 / 入站流量RetransmissionsTCP 重传段数两个关键的判定方法直接服务于上述检查项HasConnectivityIssues()model/connection.go连接是真实存在的IsActual即存在成功连接、活跃连接或失败连接且 RTT 时间序列尾部为空Rtt.TailIsEmpty()——即曾经有流量现在突然没有了这是断连packet loss / connectivity lost的典型特征。HasFailedConnectionAttempts()model/connection.go连接真实存在且最新的FailedConnections大于 0。Status()方法model/connection.go将上述判定汇总为最终状态未激活返回UNKNOWN连通性问题或连接失败返回CRITICAL否则为OK。审计器正是基于这两个方法为NetworkConnectivity和NetworkTCPConnections检查添加受影响的上游列表auditor/network.go。值得一提的是AppToAppConnection还通过Endpoints记录连接外部服务所用的IP:PORT对model/connection.go这使 Coroot 在多集群模式下也能把外部连接正确归属到实际服务——这也是跨集群 RTT 检查能独立成类的原因之一。界面呈现九类网络图表与总览状态在详细模式下网络巡检会渲染以下图表auditor/network.go图表内容Network RTT (in-cluster) / (external) / (cross-cluster), seconds按上游依赖分系列的三组 RTT 曲线TCP connection latency, seconds平均连接建立耗时ConnectionTime / SuccessfulConnectionsActive TCP connections活跃连接数TCP connection attempts, per second每秒成功连接尝试数Failed TCP connections, per second每秒失败连接数Traffic inbound / outbound, bytes/second按依赖方向拆分的堆叠流量图TCP retransmissions, segments/second每秒 TCP 重传段数每条曲线的图例均以→或←前缀标明方向与上游服务名如→auth-service、←postgres便于快速定位是哪条链路出了问题。在应用总览页网络状态还会被汇总成一行api/views/overview/applications.go来自NetworkRTT检查状态非UNKNOWN时沿用其状态若 SLO 未被违反则强制为 OK数值展示为格式化后的延迟如15ms来自NetworkConnectivity状态达到WARNING及以上时展示为packet loss来自NetworkTCPConnections状态达到WARNING及以上时展示为failed conns。也就是说你无需点进应用详情就能在总览页一眼看出延迟高还是断连/连接失败从而决定排障方向。阈值配置与覆盖机制网络巡检的五个检查项均支持按应用或按整个项目覆盖默认阈值。阈值查找逻辑位于CheckConfigs的getRaw方法model/check.go先精确匹配应用 ID再按 glob 模式匹配最后回退到项目级默认ApplicationId{}。前端表单 api/forms/forms.go 中的CheckConfigForm接收[]*model.CheckConfigSimple即每个检查只需一个threshold字段即可完成覆盖{ configs: [ { threshold: 0.05 } ] }在 Inspections 界面中你可以对特定应用或整个项目逐项覆盖阈值对应 Inspections 总览 中描述的 inspection config 能力。实际生效的阈值由CreateCheck在创建检查时通过checkConfigs.GetSimple(cfg.Id, app.Id)解析得到model/audit_report.go未配置时自动回退到 model/check.go 中定义的内置默认值。此外检查配置还预留了CheckConfigSourceKubernetesAnnotations来源model/check.go表明阈值同样可以从 Kubernetes 注解体系注入具体键名以部署版本的实际文档为准。结合源码的排障工作流综合上述实现用网络巡检排障可以遵循这样的思路看总览在应用总览页观察 Network 状态列——packet loss表示连通性中断对应NetworkConnectivityfailed conns表示 TCP 连接失败对应NetworkTCPConnections具体延迟数值来自 RTT 检查。看分类进入应用的Net审计报告按集群内 / 外部 / 跨集群三组 RTT 图区分问题范围。若只有 external 曲线超标优先检查出站防火墙、DNS、公网链路若 in-cluster 超标则重点排查节点网络与负载。看连接细节结合Active TCP connections与TCP connection attempts判断是连接数被打满还是新建连接失败TCP retransmissions升高通常意味着链路丢包流量图则帮助确认是否突然出现流量中断。确认断连HasConnectivityIssues的RTT 尾部为空语义意味着断连是曾经有流量、现在归零的事件型问题配合时间轴可准确判断中断发生时刻。调整阈值如果某个外部依赖的基线天然偏高如跨地域 API可在 Inspections 配置中为该项目或该应用覆盖NetworkRTTExternal阈值避免误报。小结Coroot 网络巡检把应用与依赖服务之间的网络质量变成了一套自动化的、可配置的、带上下文结论的检查体系五个检查项覆盖延迟与连通性两个维度上游依赖按集群内/外部/跨集群自动分类并采用不同基线底层AppToAppConnection模型提供了 RTT、连接、流量、重传等完整指标最终通过审计报告与总览页状态呈现。相关核心实现可继续查阅 auditor/network.go、model/check.go、model/connection.go 以及 api/views/overview/applications.go官方文档入口为 docs/docs/inspections/network.md 与 Inspections 总览。【免费下载链接】corootCoroot is an open-source observability and APM tool with AI-powered Root Cause Analysis. It combines metrics, logs, traces, continuous profiling, and SLO-based alerting with predefined dashboards and inspections.项目地址: https://gitcode.com/GitHub_Trending/co/coroot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考