DeepFlow 增加了 PromQL 支持,可无缝体验 Prometheus 提供的可观测能力,同时,DeepFlow 结合 eBPF 提供了非常丰富的应用和网络性能指标,加上 PromQL 灵活强大的能力,我们可以打造一个零插桩的指标体系。
01 | DeepFlow 零插桩指标支持 PromQL 查询
在现代可观测性体系中,Prometheus 以其简单易用、高度可扩展和强大的查询语言而闻名,它可以捕捉到系统和业务的状态和变化,并提供有价值的数据分析。在 Prometheus 生态中,PromQL 更是不可或缺的一环,其灵活易用的查询语法使得客制化的数据分析变得更加容易。DeepFlow 支持了 PromQL 查询,提供了更强大的生态整合能力,可以在 DeepFlow PromQL 文档[1] 中了解更多细节。
DeepFlow 的零插桩能力,可以在不修改任何业务代码、不重启任何业务进程的情况下采集到所有服务的应用和网络性能指标[2],结合了 PromQL 查询能力之后,还可以集成到 CI/CD、HPA、标准化告警中。当然,由于 DeepFlow 设计上并不是时序存储系统,所以在 PromQL 语法使用上会有一些要求[3],简单来讲就是:先确定聚合方式
,再求值数据趋势
。
我们先用一张图来简单说明下 DeepFlow 原生指标的名称构成,其中,data precision
表示数据精度,DeepFlow 会自动聚合 1m
与 1s
精度的指标数据。
DeepFlow Metrics
比如,当我们想获取某个应用的平均数据传输时延:
avg by (auto_instance) (flow_metrics__vtap_flow_port__art__1m)
art by Client
如果我们需要更多信息,想知道客户端到服务端的数据传输时延:
avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_flow_edge_port__art__1m)
art from Client To Server
02 | 利用 DeepFlow 指标构建 Dashboard
有了 DeepFlow 零插桩的指标体系,我们可以打造一个包含应用、网络层性能指标数据的面板,提供涵盖了网络层到应用层的应用请求、时延及吞吐量的指标,这就要求至少包括应用/网络层时延趋势、请求量趋势分析、吞吐趋势分析。
首先我们获取应用时延,它等于响应时间减去请求时间,即应用服务内的处理时延:
avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_app_edge_port__rrt__1m)
application duration
接下来是网络时延,我们目前比较关心 TCP 建连时延
与数据传输时延
:
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 duration
接着,如果我们发现应用时延或传输时延变化比较明显,可以从两个视角分析原因,首先我们加上请求量的变化趋势:
rate(avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_app_edge_port__request__1m)[15m:1m])
request rate
然后我们加上网络吞吐:
rate(avg by (auto_instance_0, auto_service_1) (flow_metrics__vtap_flow_edge_port__byte__1m)[15m:1m])
throughput rate
这样我们就得到了一个包含应用、网络分析能力的 Dashboard。这样我们可以同时从应用视角(应用时延、应用请求量)与网络视角(网络时延、流量吞吐)来分析问题。我们从总览视角来查看这个 Dashboard,就能看到一个完整的请求概览:
overview
03 | Prometheus Dashboard 无缝体验
从 DeepFlow v6.2.6 开始,DeepFlow 增加了内置数据源支持,只需要配置 Prometheus RemoteWrite[4] 即可使用 DeepFlow-Prometheus 数据源无缝呈现指标,也就是说,现在 Grafana 官网上的 3700+ 个 Prometheus Dashboard 仅需要改下数据源就能直接从 DeepFlow 读取数据,无需任何其他修改。当然,你自己创建的 Prometheus Dashboard 同样也只需要切换下数据源即可。
NodeExporter Dashboard
04 | AutoTagging: 丰富 Prometheus 指标的标签
更酷的是,得益于 AutoTagging[5] 的强大能力,DeepFlow 为所有指标自动注入了丰富的标签,减少 Gap,让 Dev 与 Infrastructure 部门能在一套交流体系下对话。使用 Grafana 的编辑面板,就可以直接获取到 DeepFlow 通过 AutoTagging 能力自动注入的标签。
这时您可能会有疑惑:注入的标签会改变时序的基数吗?答案是「不会」。因为注入的标签是通过 Instance[6] 来关联并自动注入标签,这意味着一旦一个时序数据中标记的实例标签确定了,从 DeepFlow 中注入的标签也就是确定的,不会产生额外的标签组合,所以这并不会增加时序数据的基数,而是大大扩展了时序数据的检索能力。
Auto Tagging
除此以外,DeepFlow 还有很多强大的能力,比如通过 Wasm 加载自定义插件解析私有协议,基于 eBPF 实现的零侵扰分布式追踪…由这些能力,我们又可以得到更多丰富的指标信息,在 DeepFlow 的生态下会有更强大的展现,我们6月10日在深圳会有一个线下社区 meetup,会与 DeepFlow 的小伙伴们以及社区的大咖们一同讨论 DeepFlow、可观测性以及开源的方方面面,欢迎大家来参加!
05 | 什么是 DeepFlow
DeepFlow[7] 开源项目旨在为复杂的云原生应用提供深度可观测性。DeepFlow 基于 eBPF 实现了零插桩(Zero Code)、全覆盖(Full Stack)的指标、追踪、日志采集,并通过智能标签技术实现了所有观测数据的全关联(Universal Tagging)和高效存取。使用 DeepFlow,可以让云原生应用自动具有深度可观测性,从而消除开发者不断插桩的沉重负担,并为 DevOps/SRE 团队提供从代码到基础设施的监控及诊断能力。
GitHub 地址:https://github.com/deepflowio/deepflow
访问 DeepFlow Demo[8],体验零插桩、全覆盖、全关联的可观测性。
参考资料
[1] DeepFlow PromQL 文档: https://deepflow.io/docs/zh/server-integration/query/promql/
[2] 应用和网络性能指标: https://deepflow.io/docs/zh/auto-metrics/metrics-without-instrumentation/
[3] 基于 PromQL 查询 DeepFlow 指标: https://deepflow.io/docs/zh/server-integration/query/promql/#%E5%9F%BA%E4%BA%8E-promql-%E6%9F%A5%E8%AF%A2-deepflow-%E6%8C%87%E6%A0%87
[4] Prometheus RemoteWrite: https://deepflow.io/docs/zh/agent-integration/metrics/prometheus/
[5] AutoTagging: https://deepflow.io/docs/zh/auto-tagging/elimilate-data-silos/
[6] Instance: https://prometheus.io/docs/concepts/jobs_instances/
[7] DeepFlow: https://github.com/deepflowio/deepflow
[8] DeepFlow Demo: https://deepflow.io/docs/zh/install/overview/