作者:李煌东、炎寻
摘要
阿里云现在推出了面向 Kubernetes 的一站式可观测性体系,旨在处理 Kubernetes 环境下架构杂乱度高、多言语&多协议并存带来的运维难度高的问题,数据收集器采用当下火出天边的 eBPF 技能,产品上支撑无侵入地收集运用黄金目标,构建成大局拓扑,极大地降低了公有云用户运维 Kubernetes 的难度。
前言
布景与问题
当时,云原生技能首要是以容器技能为根底围绕着 Kubernetes 的规范化技能生态,经过规范可扩展的调度、网络、存储、容器运转时接口来供给根底设施,一同经过规范可扩展的声明式资源和控制器来供给运维才能,两层规范化推进了细化的社会分工,各范畴进一步提高规模化和专业化,全面到达本钱、功率、稳定性的优化,在这样的布景下,大量公司都运用云原生技能来开发运维运用。正因为云原生技能带来了更多或许性,当时事务运用呈现了微服务很多、多言语开发、多通信协议的特征,一同云原生技能自身将杂乱度下移,给可观测性带来了更多应战:
1、混沌的微服务架构
事务架构因为分工问题,简略呈现服务数量多,服务联系杂乱的现象(如图 1)。
图 1 混沌的微服务架构(图片来历见文末)
这样会引发一系列问题:
无法回答当时的运转架构; 无法确认特定服务的下流依靠服务是否正常; 无法确认特定服务的上游依靠服务流量是否正常; 无法回答运用的 DNS 恳求解析是否正常; 无法回答运用之间的连通性是否正确; …
2、多言语运用
事务架构里边,不同的运用运用不同的言语编写(如图 2),传统可观测办法需求对不同言语运用不同的办法进行可观测。
图 2 多言语(图片来历见文末)
这样也会引发一系列问题:
- 不同言语需求不同埋点办法,乃至有的言语没有现成的埋点办法;
- 埋点对运用功用影响无法简略评价;
3、多通信协议
事务架构里边,不同的服务之间的通信协议也不同(如图 3),传统可观测办法一般是在运用层特定通信接口进行埋点。
图 3 多通信协议
这样也会引发一系列问题:
- 不同通信协议因为不同的客户端需求不同埋点办法,乃至有的通信协议没有现成的埋点办法;
- 埋点对运用功用影响无法简略评价;
4、Kubernetes 引进的端到端杂乱度
杂乱度是永久的,咱们只能找到办法来办理它,无法消除它,云原生技能的引进尽管减少了事务运用的杂乱度,但是在整个软件栈中,他仅仅将杂乱度下移到容器虚拟化层,并没有消除(如图 4)。
图 4 端到端软件栈
这样也会引发一系列问题:
- Deployment 的希望副本数和实际运转副本数不一致;
- Service 没有后端,无法处理流量;
- Pod 无法创建或许调度;
- Pod 无法到达 Ready 状况;
- Node 处于 Unknown 状况;
- …
处理思路与技能计划
为了处理上面的问题,咱们需求运用一种支撑多言语,多通信协议的技能,而且在产品层面尽或许得覆盖软件栈端到端的可观测性需求,经过调研咱们提出一种立足于容器界面和底层操作体系,向上相关运用功用观测的可观测性处理思路(如图 5)。
数据收集
图 5 端到端可观测性处理思路
咱们以容器为中心,收集相关的 Kubernetes 可观测数据,与此一同,向下收集容器相关进程的体系和网络可观测数据,向上收集容器相关运用的功用数据,经过相相联系将其串联起来,完成端到端可观测数据的覆盖。
数据传输链路
咱们的数据类型包括了目标,日志和链路,采用了 open telemetry collector 计划(如图 6)支撑一致的数据传输。
图 6 OpenTelemetry Collector(图片来历见文末)
数据存储
背靠 ARMS 已有的根底设施,目标经过 ARMS Prometheus 进行存储,日志/链路经过 XTRACE 进行存储。
产品中心功用介绍
中心场景上支撑架构感知、错慢恳求剖析、资源耗费剖析、DNS 解析功用剖析、外部功用剖析、服务连通性剖析和网络流量剖析。支撑这些场景的根底是产品在规划上遵从了从全体到个别的原则:先从大局视图入手,发现反常的服务个别,如某个 Service,定位到这个 Service 后检查这个 Service 的黄金目标、相关信息、Trace等进行进一步相关剖析。
图 7 中心事务场景
永不过期的黄金目标
什么是黄金目标?用来可观测性体系功用和状况的最小调集:latency、traffic、errors、saturation。以下引自 SRE 圣经 Site Reliability Engineering 一书:
The four golden signals of monitoring are latency, traffic, errors, and saturation. If you can only measure four metrics of your user-facing system, focus on these four.
为什么黄金目标十分重要?一,直接了然地表达了体系是否正常对外服务。二,面向客户的,能进一步评价对用户的影响或事态的严重性,这样能大量节约SRE或研制的时刻,幻想下假如咱们取 CPU 运用率作为黄金目标,那么 SRE 或研制将会奔于疲命,因为 CPU 运用率高或许并不会造成多大的影响,尤其在运转平稳的 Kubernetes 环境中。所以 Kubernetes 可观测性支撑这些黄金目标:
- 恳求数/QPS
- 呼应时刻及分位数(P50、P90、P95、P99)
- 过错数
- 慢调用数
图8 黄金目标
首要支撑以下场景:
1、功用剖析 2、慢调用剖析
大局视角的运用拓补
不谋大局者,缺乏谋一域 。–诸葛亮
跟着当下技能架构、部署架构的杂乱度越来越高,产生问题后定位问题变得越来越棘手,进而导致 MTTR 越来越高。另一个影响是对影响面的剖析带来十分大的应战,一般顾得了这头顾不了那头。因此,有一张像地图一样的大图十分必要。大局拓扑具有以下特色:
- 体系架构感知:体系架构图一般称为程序员了解一个新体系的重要参考,当咱们拿到一个别系,起码咱们得知道流量的进口在哪里,有哪些中心模块,依靠了哪些内部外部组件等。在反常定位过程中,有一张大局架构的图对反常定位进程有十分大的推动作用。一个简略电商运用的拓扑示例,整个架构一览无遗:
图 9 架构感知
- 依靠剖析:有一些问题是呈现在下流依靠,假如这个依靠不是自己团队维护就会比较费事,当自己体系和下流体系没有足够的可观测性的时分就更费事了,这种情况下就很难跟依靠的维护者讲清楚问题。在咱们的拓扑中,经过将黄金目标的上下流用调用联系连起来,形成了一张调用图。边作为依靠的可视化,能检查对应调用的黄金信号。有了黄金信号就能快速地剖析下流依靠是否存在问题。下图为底层服务调用微服务产生慢调用导致运用全体 RT 高的定位示例,从进口网关,到内部服务,到 MySQL 服务,终究定位到产生慢 SQL 的语句:
图 10 依靠剖析
- 高可用剖析:拓扑图能便利地看出体系之间的交互,然后看出哪些体系是首要中心链路或许是被重度依靠的,比如 CoreDNS,简直一切的组件都会经过 CoreDNS 进行 DNS 解析,所以咱们进一步看到或许存在的瓶颈,经过检查 CoreDNS 的黄金目标预判运用是否健康、是否容量缺乏等。
图 11 高可用剖析
- 无侵入:跟蚂蚁的 linkd 和集团的 eagleeye 不同的是,咱们的计划是完全无侵入的。有时分咱们之所以缺少某个方面的可观测性,并不是说做不到,而是因为运用需求改代码。作为 SRE 为了更好的可观测性当然起点很好,但是要让全集团的运用 owner 陪你一同改代码,显然是不合适的。这时分就显示出无侵入的威力了:运用不需求改代码,也不需求重启。所以在接入本钱上是十分低的。
协议 Trace 便利根因定位
协议 Trace 区别于分布式追寻,只盯梢一次调用。协议 Trace 同样是无侵略、言语无关的。假如恳求内容中存在分布式链路 TraceID,能主动识别出来,便利进一步下钻到链路追寻。运用层协议的恳求、呼应信息有助于对恳求内容、回来码进行剖析,然后知道详细哪个接口有问题。
图 12 协议概况
开箱即用的告警功用
任何一个可观测性体系不支撑告警是不合适的。
1、默许模板下发,阈值经过业界最佳实践。
图 13 告警
2、支撑用户多种装备方式
静态阈值,用户只需求装备阈值即可,不需求手动写 PromQL 根据灵敏度调理的动态阈值,合适不好确认阈值的场景 兼容 PromQL,需求必定的学习本钱,合适高档用户
丰厚的上下文相关
datadog 的 CEO 在一次采访中直言 datadog 的产品战略不是支撑越多功用越好,而是思考怎样在不同团队和成员之间架起桥梁,尽或许把信息放在同一个页面中(to bridge the gap between the teams and get everything on the same page)。产品规划上咱们将关键的上下文信息相关起来,便利不同布景的工程师了解,然后加速问题的排查。
现在咱们相关的上下文有告警信息、黄金目标、日志、Kubernetes 元信息等,一同不断新增有价值的信息。比如告警信息,告警信息主动相关到对应的服务或运用节点上,明晰地看到哪些运用有反常,点击运用或告警能主动打开运用的概况、告警概况、运用的黄金目标,一切的动作都在一个页面中进行:
图 14 上下文相关
其他
一、网络功用可观测性:
网络功用导致呼应时刻变长是经常遇到的问题,因为 TCP 底层机制屏蔽了一部分的杂乱性,运用层对此是无感的,这对丢包率高、重传率高这种场景带来一些费事。Kubernetes 支撑了重传&丢包、TCP 衔接信息来表征网络状况,下图展现了重传高导致 RT 高的例子:
图 15 网络功用可观测性
eBPF 超才能揭秘
图 16 数据处理流程
eBPF 相当于在内核中构建了一个履行引擎,经过内核调用将这段程序 attach 到某个内核事情上,做到监听内核事情;有了事情咱们就能进一步做协议推导,筛选出感兴趣的协议,对事情进一步处理后放到 ringbuffer 或许 eBPF 自带的数据结构 Map 中,供用户态进程读取;用户态进程读取这些数据后,进一步相关 Kubernetes 元数据后推送到存储端。这是全体处理过程。
eBPF 的超才能体现在能订阅各种内核事情,如文件读写、网络流量等,运转在 Kubernetes 中的容器或许 Pod 里的一切行为都是经过内核体系调用来实现的,内核知道机器上一切进程中产生的一切事情,所以内核简直是可观测性的最佳观测点,这也是咱们为什么挑选 eBPF 的原因。另一个在内核上做监测的优点是运用不需求改变,也不需求重新编译内核,做到了真实意义上的无侵入。当集群里有几十上百个运用的时分,无侵入的处理计划会帮上大忙。
eBPF作为新技能,人们对其有些担忧是正常的,这里别离作简略的回答:
1、eBPF 安全性怎么?eBPF 代码有许多限制,如最大仓库空间当时为 512、最大指令数为 100 万,这些限制的目的就是充分确保内核运转时的安全性。
2、eBPF探针的功用怎么?大约在 1% 左右。eBPF 的高功用首要体现在内核中处理数据,减少数据在内核态和用户态之间的复制。简略说就是数据在内核里算好了再给用户进程,比如一个 Gauge 值,以往的做法是将原始数据复制到用户进程再核算。
总结
产品价值
阿里云 Kubernetes 可观测性是一套针对 Kubernetes 集群开发的一站式可观测性产品。根据 Kubernetes 集群下的目标、运用链路、日志和事情,阿里云 Kubernetes 可观测性旨在为 IT 开发运维人员供给全体的可观测性计划。
阿里云 Kubernetes 可观测性具备以下特性:
-
代码无侵入:经过旁路技能,不需求对代码进行埋点即可获取到丰厚的网络功用数据。
-
言语无关:在内核层面进行网络协议解析,支撑恣意言语,恣意结构。
-
高功用:根据 eBPF 技能,能以极低的耗费获取丰厚的网络功用数据。
-
强相关:经过网络拓扑,资源拓扑,资源联系从多个维度描绘实体相关,与此一同也支撑各类数据(可观测目标、链路、日志和事情)之间的相关。
-
数据端到端覆盖:涵盖端到端软件栈的观测数据。
-
场景闭环:控制台的场景规划,相关起架构感知拓扑、运用可观测性、Prometheus 可观测性、云拨测、健康巡检、事情中心、日志服务和云服务,包括运用了解,反常发现,反常定位的完整闭环。
点击此处,前往阿里云可观测专题页检查更多概况!
图片来历:
图 1: www.infoq.com/presentatio…
图 2: www.lackuna.com/2013/01/02/…
图 6: opentelemetry.io/docs/collec…
欢迎我们扫码或搜索钉钉群号(31588365)参加答疑沟通群进行沟通。
发布云原生技能最新资讯、汇集云原生技能最全内容,定时举行云原生活动、直播,阿里产品及用户最佳实践发布。与你并肩探究云原生技能点滴,共享你需求的云原生内容。
关注【阿里巴巴云原生】大众号,获取更多云原生实时资讯!