logo
logo

Prometheus x DeepFlow:打造零插桩的指标体系

林嘉炜 2023-06-05

DeepFlow 增加了 PromQL 支持,可无缝体验 Prometheus 提供的可观测能力,同时,DeepFlow 结合 eBPF 提供了非常丰富的应用和网络性能指标,加上 PromQL 灵活强大的能力,我们可以打造一个零插桩的指标体系。

0x0: DeepFlow 零插桩指标支持 PromQL 查询

在现代可观测性体系中,Prometheus 以其简单易用、高度可扩展和强大的查询语言而闻名,它可以捕捉到系统和业务的状态和变化,并提供有价值的数据分析。在 Prometheus 生态中,PromQL 更是不可或缺的一环,其灵活易用的查询语法使得客制化的数据分析变得更加容易。DeepFlow 支持了 PromQL 查询,提供了更强大的生态整合能力,可以在 DeepFlow PromQL 文档 中了解更多细节。

DeepFlow 的零插桩能力,可以在不修改任何业务代码、不重启任何业务进程的情况下采集到所有服务的应用和网络性能指标,结合了 PromQL 查询能力之后,还可以集成到 CI/CD、HPA、标准化告警中。当然,由于 DeepFlow 设计上并不是时序存储系统,所以在 PromQL 语法使用上会有一些要求,简单来讲就是:先确定聚合方式,再求值数据趋势

我们先用一张图来简单说明下 DeepFlow 原生指标的名称构成,其中,data precision 表示数据精度,DeepFlow 会自动聚合 1m1s 精度的指标数据。

DeepFlow MetricsDeepFlow Metrics

比如,当我们想获取某个应用的平均数据传输时延:

1
avg by (auto_instance) (flow_metrics__vtap_flow_port__art__1m)

art by Clientart by Client

如果我们需要更多信息,想知道客户端服务端的数据传输时延:

1
avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_flow_edge_port__art__1m)

art from Client To Serverart from Client To Server

0x1: 利用 DeepFlow 指标构建 Dashboard

有了 DeepFlow 零插桩的指标体系,我们可以打造一个包含应用、网络层性能指标数据的面板,提供涵盖了网络层到应用层的应用请求、时延及吞吐量的指标,这就要求至少包括应用/网络层时延趋势、请求量趋势分析、吞吐趋势分析。

首先我们获取应用时延,它等于响应时间减去请求时间,即应用服务内的处理时延:

1
avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_app_edge_port__rrt__1m)

application durationapplication duration

接下来是网络时延,我们目前比较关心 TCP 建连时延数据传输时延

1
2
avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_flow_edge_port__rtt__1m)
+ avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_flow_edge_port__art__1m)

network durationnetwork duration

接着,如果我们发现应用时延或传输时延变化比较明显,可以从两个视角分析原因,首先我们加上请求量的变化趋势:

1
rate(avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_app_edge_port__request__1m)[15m:1m])

request raterequest rate

然后我们加上网络吞吐:

1
rate(avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_flow_edge_port__byte__1m)[15m:1m])

throughput ratethroughput rate

这样我们就得到了一个包含应用网络分析能力的 Dashboard。这样我们可以同时从应用视角(应用时延、应用请求量)与网络视角(网络时延、流量吞吐)来分析问题。我们从总览视角来查看这个 Dashboard,就能看到一个完整的请求概览:

overviewoverview

0x2: Prometheus Dashboard 无缝体验

从 DeepFlow v6.2.6 开始,DeepFlow 增加了内置数据源支持,只需要配置 Prometheus RemoteWrite 即可使用 DeepFlow-Prometheus 数据源无缝呈现指标,也就是说,现在 Grafana 官网上的 3700+ 个 Prometheus Dashboard 仅需要改下数据源就能直接从 DeepFlow 读取数据,无需任何其他修改。当然,你自己创建的 Prometheus Dashboard 同样也只需要切换下数据源即可。

NodeExporter DashboardNodeExporter Dashboard

0x3: AutoTagging: 丰富 Prometheus 指标的标签

更酷的是,得益于 AutoTagging 的强大能力,DeepFlow 为所有指标自动注入了丰富的标签,减少 Gap,让 Dev 与 Infrastructure 部门能在一套交流体系下对话。使用 Grafana 的编辑面板,就可以直接获取到 DeepFlow 通过 AutoTagging 能力自动注入的标签。

这时您可能会有疑惑:注入的标签会改变时序的基数吗?答案是「不会」。因为注入的标签是通过 Instance 来关联并自动注入标签,这意味着一旦一个时序数据中标记的实例标签确定了,从 DeepFlow 中注入的标签也就是确定的,不会产生额外的标签组合,所以这并不会增加时序数据的基数,而是大大扩展了时序数据的检索能力。

Auto TaggingAuto Tagging

除此以外,DeepFlow 还有很多强大的能力,比如通过 Wasm 加载自定义插件解析私有协议,基于 eBPF 实现的零侵扰分布式追踪…由这些能力,我们又可以得到更多丰富的指标信息,在 DeepFlow 的生态下会有更强大的展现,我们6月10日在深圳会有一个线下社区 meetup,会与 DeepFlow 的小伙伴们以及社区的大咖们一同讨论 DeepFlow、可观测性以及开源的方方面面,欢迎大家来参加!

0x4: 什么是 DeepFlow

DeepFlow 是云杉网络开发的一款可观测性产品,旨在为复杂的云基础设施及云原生应用提供深度可观测性。DeepFlow 基于 eBPF 实现了应用性能指标、分布式追踪、持续性能剖析等观测信号的零侵扰Zero Code)采集,并结合智能标签SmartEncoding)技术实现了所有观测信号的全栈Full Stack)关联和高效存取。使用 DeepFlow,可以让云原生应用自动具有深度可观测性,从而消除开发者不断插桩的沉重负担,并为 DevOps/SRE 团队提供从代码到基础设施的监控及诊断能力。

GitHub 地址:https://github.com/deepflowio/deepflow

访问 DeepFlow Demo,体验零插桩、全覆盖、全关联的可观测性。