其他
深度解析|基于 eBPF 的 Kubernetes 一站式可观测性系统
摘要
Cloud Native
前言
Cloud Native
无法回答当前的运行架构; 无法确定特定服务的下游依赖服务是否正常;
无法确定特定服务的上游依赖服务流量是否正常; 无法回答应用的 DNS 请求解析是否正常;
无法回答应用之间的连通性是否正确; ...
不同语言需要不同埋点方法,甚至有的语言没有现成的埋点方法; 埋点对应用性能影响无法简单评估;
不同通信协议因为不同的客户端需要不同埋点方法,甚至有的通信协议没有现成的埋点方法; 埋点对应用性能影响无法简单评估;
Deployment 的期望副本数和实际运行副本数不一致; Service 没有后端,无法处理流量;
Pod 无法创建或者调度; Pod 无法达到 Ready 状态;
Node 处于 Unknown 状态; ...
数据采集
数据传输链路
数据存储
产品核心功能介绍
Cloud Native
请求数/QPS 响应时间及分位数(P50、P90、P95、P99)
错误数 慢调用数
系统架构感知:系统架构图通常称为程序员了解一个新系统的重要参考,当我们拿到一个系统,起码我们得知道流量的入口在哪里,有哪些核心模块,依赖了哪些内部外部组件等。在异常定位过程中,有一张全局架构的图对异常定位进程有非常大的推动作用。一个简单电商应用的拓扑示例,整个架构一览无遗:
依赖分析:有一些问题是出现在下游依赖,如果这个依赖不是自己团队维护就会比较麻烦,当自己系统和下游系统没有足够的可观测性的时候就更麻烦了,这种情况下就很难跟依赖的维护者讲清楚问题。在我们的拓扑中,通过将黄金指标的上下游用调用关系连起来,形成了一张调用图。边作为依赖的可视化,能查看对应调用的黄金信号。有了黄金信号就能快速地分析下游依赖是否存在问题。下图为底层服务调用微服务发生慢调用导致应用整体 RT 高的定位示例,从入口网关,到内部服务,到 MySQL 服务,最终定位到发生慢 SQL 的语句:
高可用分析:拓扑图能方便地看出系统之间的交互,从而看出哪些系统是主要核心链路或者是被重度依赖的,比如 CoreDNS,几乎所有的组件都会通过 CoreDNS 进行 DNS 解析,所以我们进一步看到可能存在的瓶颈,通过检查 CoreDNS 的黄金指标预判应用是否健康、是否容量不足等。
无侵入:跟蚂蚁的 linkd 和集团的 eagleeye 不同的是,我们的方案是完全无侵入的。有时候我们之所以缺少某个方面的可观测性,并不是说做不到,而是因为应用需要改代码。作为 SRE 为了更好的可观测性固然出发点很好,但是要让全集团的应用 owner 陪你一起改代码,显然是不合适的。这时候就显示出无侵入的威力了:应用不需要改代码,也不需要重启。所以在接入成本上是非常低的。
静态阈值,用户只需要配置阈值即可,不需要手动写 PromQL 基于灵敏度调节的动态阈值,适合不好确定阈值的场景 兼容 PromQL,需要一定的学习成本,适合高级用户
eBPF 超能力揭秘
Cloud Native
总结
Cloud Native
代码无侵入:通过旁路技术,不需要对代码进行埋点即可获取到丰富的网络性能数据。
语言无关:在内核层面进行网络协议解析,支持任意语言,任意框架。
高性能:基于 eBPF 技术,能以极低的消耗获取丰富的网络性能数据。
强关联:通过网络拓扑,资源拓扑,资源关系从多个维度描述实体关联,与此同时也支持各类数据(可观测指标、链路、日志和事件)之间的关联。
数据端到端覆盖:涵盖端到端软件栈的观测数据。
场景闭环:控制台的场景设计,关联起架构感知拓扑、应用可观测性、Prometheus 可观测性、云拨测、健康巡检、事件中心、日志服务和云服务,包含应用理解,异常发现,异常定位的完整闭环。
图 2:
图 6: