擎创技术流 | 一文读懂eBPF对kubernetes可观测的重要性

news2024/12/28 5:33:54

一、云原生技术发展的背景与问题

当前,云原生技术主要是以容器技术为基础围绕着 Kubernetes的标准化技术生态,通过标准可扩展的调度、网络、存储、容器运行时接口来提供基础设施,同时通过标准可扩展的声明式资源和控制器来提供运维能力。两层标准化推进了细化的社会分工,各领域进一步提升规模化和专业化,全面达到成本、效率、稳定性的优化。

在这样的背景下,大量公司都使用云原生技术来开发和运维应用。正因为云原生技术带来了更多可能性,当前业务应用出现了微服务众多、多语言开发、多通信协议的特征,同时云原生技术本身将复杂度下移,给可观测性带来了许多挑战。

1.复杂微服务架构的挑战

难以获得系统的整体动态拓扑,难以确定特定服务的上下游服务质量。

2.多语⾔的挑战

传统可观测⽅法需要对不同语⾔使⽤不同的⽅法进行可观测。不同语⾔需要不同埋点⽅法,甚⾄有的语⾔没有现成的埋点⽅法,埋点对应⽤性能影响⽆法简单评估。

3.多通信协议的挑战

基础设施(Kafka, MySQL, Redis等)、微服务套件(Spring, gRPC, Bubbo等)采用了不同的通信协议。传统可观测⽅法通常是在应⽤层特定通信接⼝进⾏埋点。埋点⽅法多种多样,有的通信协议没有现成的埋点⽅法,同理埋点对应⽤性能影响⽆法简单评估。

二、解决方案

通常与可观测性相关联紧密的数据便是“指标”、“⽇志”和“链路追踪”。然⽽,这些数据源中的每⼀项都有不同的收集⽅法。除此,针对这些数据项进行采集可能需要多种不同的产品和代理。

eBPF可以以⼀种⾮侵⼊性、安全且跨系统⼀致的⽅式收集遥测数据以实现可观测性,并且对当前系统性能和资源使⽤影响⼩。

三、什么是eBPF?

eBPF 是⼀种⽆需更改Linux内核代码,便能让程序在内核中运⾏的技术。开发者可以通过执⾏eBPF程序,给运⾏中的操作系统添加额外的能⼒。这催⽣了很多基于eBPF 的项⽬,涵盖了⼴泛⽤例,包括云原⽣⽹络、安全和可观测性。

例如:当下正流⾏的 Cilium ,是基于eBPF 实现数据转发的 CNI ⽹络插件;

Falco 是CNCF 开源孵化的运⾏时安全⼯具,专⻔为 Kubernetes 、Linux 和云原⽣构建;

Pixie 使⽤ eBPF ⾃动收集遥测数据,也已开源应⽤,并进⼊了 CNCF 沙箱的可观测项⽬;同时⼀些服务⽹格产品也在探索使⽤ eBPF。

四、eBPF与可观测性的关系

传统意义上的观测性,是指在外部洞悉应⽤程序运⾏状况的能⼒。⽽ eBPF 是⼀种无需入侵应用代码,直接⾯向操作系统内核层添加黑盒代码的⾰命性技术。这种查看内核中的操作,却不会 “⼲扰” 应⽤程序或内核本身的技术,从⽽使得 eBPF 获得可观测性强⼤能⼒。

因此使⽤ eBPF,即使不依赖操作系统公开的固定指标,我们也能直接从内核中收集和聚合⾃定义指标,并根据各种可能性来源,⽣成可⻅性事件。通过这种⽅式,我们将可见性扩展到内核,甚⾄可以通过仅收集所需的可见性数据,实现整体系统开销的降低。

eBPF 与其他收集遥测数据的⼿段相⽐,有以下优点:

1.低侵入性:它不需要业务系统埋点,也不修改内核源代码,从⽽减⼩了监测系统与业务系统、内核之间的耦合。

2.安全:它不会改变任何内核源代码。eBPF 程序在转换为字节码后会经过验证阶段以防⽌资源泄漏、⽆限循环等意外情况。它运⾏在沙盒环境以访问有限的内核辅助函数。

3.方便:与任何其他 Linux 监控替代⽅案相⽐,您可以获得更精细的细节和内核上下⽂。还可以⾃由导出监控数据并将其摄取到第三⽅可视化⼯具中。

五、基于 eBPF 技术的可观测方案实践

实践一:主机、服务、POD 级别的动态⽹络性能监控

在每个被监测 kubernetes 节点上都部署⼀个探针,这个探针通过 hook 内核的 accept, connect, send, recv 等L4(TCP、UDP)相关的系统调⽤,可以获取进程与绑定地址的关系、通信双⽅的地址、各连接收发的流量统计(字节数、RTT等)。

探针会去获取当前 k8s 集群的 metadata 数据(pid, container, pod, service, node等)并把它们保存在内存中,⽤来实现原始 eBPF 数据的丰富。

服务端在收集到通信双⽅的 ebpf 数据后可以进一步丰富数据,例如将对端 ip:port 对应的k8s metadata 丰富到本端 ebpf 数据中,并存⼊数据库。查询时,根据指定的时间范围、主机/服务/pod等筛选条件查询数据库,从⽽构造出该时段的各级别的动态拓扑图。

实践二:微服务监控

探针在 hook 点获得⽹络报⽂之后,可以进一步解析 L7 内容,包括 HTTP、HTTPS、gRPC 等。探针将微服务的各个会话(⼀次请求和响应)的 URL、latency、错误码关联到 ip:port 或者特定 pid。探针定期将会话聚合信息推送到服务端进一步丰富数据。如此可以构造出特定时段的微服务的动态拓扑图、服务质量⻩⾦指标等。

实践三:Profiling

借助 eBPF 可以获得系统级别或者特定进程的 oncpu 和 offcpu 事件。oncpu 是指定时采样(⼀般100Hz),⽤于分析程序的 cpu 热点,为减少占⽤ CPU 指明⽅向。offcpu 是指内核调度线程的事件,⽤于分析线程由于锁、IO等原因被剥夺 CPU,为充分利⽤ CPU、减少锁抢占指明⽅向。

基于 oncpu 事件可以绘制⽕焰图,直观地展示各个调⽤栈所占时间⽐例。

六、结论

eBPF 是⼀个令⼈印象深刻的可观测性⼯具,与传统的可观测性解决⽅案相⽐,它可以提供更深⼊的洞察⼒。

其收集整个系统遥测数据的安全、⾮侵⼊性等优势是过去没有许多产品、应⽤程序级代理和⾮常复杂的操作所⽆法获得的。eBPF 正在发展成为可观测性的标准基础。


​擎创科技,Gartner连续推荐的AIOps领域标杆供应商。公司致力于协助企业客户提升对运维数据的洞见能力,优化运维效率,充分体现科技运维对业务运营的影响力。

行业龙头客户的共同选择

​了解更多运维干货与技术分享

可以右上角一键关注

我们是深耕智能运维领域近十年的

连续多年获Gartner推荐的AIOps标杆供应商

下期我们不见不散

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Servlet【最复杂的hello world】

目录 一、Hello World 1.创建项目 2.引入依赖 3.创建目录 4.编写代码 4.1 继承 HttpServlet 父类,重写 doGet 方法 4.2 在 doGet 中编写代码,打印 hello world 4.3 给 HelloServlet 加上注解 4.4 完整代码 5.打包代码 6.部署 7.验证程序 二…

分享一个403界面给大家

先看效果图&#xff08;说明&#xff1a;小鬼影会飘来飘去&#xff0c;长时间停留会有小惊喜&#xff0c;具体大家跑一下就知道&#xff09;&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UT…

depends_on 解决 docker 容器依赖问题

如果你经常使用docker-compose启动服务的话&#xff0c;可能会遇到下面的问题&#xff1a;服务 B 依赖服务 A&#xff0c;需要服务 A 先启动&#xff0c;再启动服务 B 举个例子&#xff0c;在部署 kafka 集群的时候&#xff0c;需要启动两个kafka&#xff0c;并使用zookeeper做…

基于云计算和物联网技术开发的智慧校园云平台源码

智慧校园系统是利用物联网和云计算&#xff0c;强调对教学、科研、校园生活和管理的数据采集、智能处理、为管理者和各个角色按需提供智能化的数据分析、教学、学习的智能化服务环境。它包含“智慧环境、智慧学习、智慧服务、智慧管理”等层面的内容。 文末获取联系 它描绘的是…

准备搞个大动作!

目前我们的会员群的同学越来越多&#xff0c;然后我们提供的内容已经从起步篇&#xff0c;趣味篇&#xff0c;工具篇到高级篇了。但是到了高级篇很多内容都跟编程相关&#xff0c;有一点门槛&#xff0c;如果单单看文字是肯定无法满足大家的需求。为了更好的服务大家&#xff0…

跃升数字生产力,九州云受邀出席闵行国际人才月

5月22日&#xff0c;由闵行人才工作领导小组办公室指导、中共闵行区马桥镇委员会及闵行区马桥镇人民政府主办、上海人工智能研究院协办的首届“大零号湾”国际人才月马桥人工智能周成功召开。 本届大会以“AI才共赢 智敬未来”为主题&#xff0c;探讨科技创新的最新动态和趋势&…

如何使用Linux Top命令

Linux中的top命令允许您监视当前正在运行的进程及其使用的系统资源。作为系统管理员&#xff0c;它可能是工具箱中最有用的工具&#xff0c;特别是如果您知道如何使用它的话。所有Linux发行版都预装了top实用程序。通过这个交互式命令&#xff0c;您可以自定义如何浏览进程列表…

电脑蓝屏该如何给电脑重装系统

电脑蓝屏问题是让人头疼的常见故障之一&#xff0c;而重装系统是解决蓝屏问题的有效方法。本文将为您详细介绍如何在电脑蓝屏的情况下进行系统重装&#xff0c;轻松摆脱蓝屏困扰。 工具/原料&#xff1a; 系统版本&#xff1a;windows10系统 品牌型号&#xff1a;华为MateBoo…

常见的黄金期货交易风险包含哪些内容?

黄金期货交易作为受市场欢迎的投资理财方式&#xff0c;兼具高风险和高收益并存的特性。黄金期货交易风险也同样存在&#xff0c;那常见的黄金期货交易风险包含哪些内容&#xff1f; 黄金期货交易风险一、市场风险 投资者在黄金期货交易中&#xff0c;主要的风险来源于市场价格…

快来试试!免费用上GPT-4 !!!

GPT-4 简介 GPT-4是OpenAI上个月推出的最新人工智能语言模型&#xff0c;它可以根据给定的文本或关键词生成各种类似于人类语言甚至超越人类语言的文本&#xff0c;例如文章、故事、诗歌、代码、对话等。 GPT-4拥有1750亿个参数&#xff0c;是目前最大的语言模型之一&#xf…

红米8a,刷机到安卓调用之路

什么是BL锁&#xff1f; https://baijiahao.baidu.com/s?id1614459630284912892&wfrspider&forpc bl锁简单来说&#xff0c;就是厂商为了自己的目的&#xff0c;为了避免刷机&#xff0c;而人为设置的一道障碍&#xff0c;我的第一步就需要等待168小时&#xff0c;经…

随想011:关于编程

1945 年时&#xff0c;刚开始有计算机&#xff0c;那时候使用二进制数编程到了40年代末期&#xff0c;出现了汇编器&#xff0c;可以自动将汇编程序转换为二进制数序列1951 年 Grace Hopper 发明了编译器1957 年&#xff0c;Fortran&#xff0c;第一个高级语言&#xff0c;首次…

npm 无法下载 win32-x64-72_binding.node

使用npm安装node-sass时&#xff0c;其依赖了win32-x64-72_binding.node&#xff0c;但是一直提示“cannot download http://xxx/win32-x64-72_binding.node”&#xff0c;有两种方案可以解决&#xff0c;一种是在有私服的情况下&#xff0c;可以通过设置 SASS_BINARY_SITE 环境…

百度云原生数据库GaiaDB的HTAP与多地多活技术实践

​摘要&#xff1a;云原生数据库在使用存算分离技术后&#xff0c;可以在完全兼容MYSQL协议和语法的情况下&#xff0c;极大提升单实例所能承载的数据规模与吞吐能力上限。但除了对客户端兼容外&#xff0c;对整个数据生态&#xff08;地域容灾&#xff0c;数据分析&#xff0c…

javaWebssh旅游论坛系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh旅游论坛系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Mye…

机器学习中四类进化算法的详解(遗传算法、差分进化算法、协同进化算法、分布估计算法)

1、遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09; GA算法原理 首先我们来介绍进化算法的先驱遗传算法&#xff0c;遗传算法&#xff08;Genetic Algorithm&#xff0c;简称GA&#xff09;是一种最基本的进化算法&#xff0c;它是模拟达尔文生物进化理论的…

牛牛截图控件与利洽远程控制产品升级-支持证书自动升级

今天我们来聊一聊浏览器控件的一个痛点&#xff01;看看我们是如何解决他的。 背景信息 目前市面上存在多种浏览器&#xff0c;IE、Chrome、Firefox、Edge以及一众国产浏览器&#xff0c;这些浏览器中&#xff0c;IE支持ActiveX&#xff0c;部分国产浏览器支持npapi&#xff…

vscode开发小程序项目并在微信开发者工具运行

需求&#xff1a;vscode开发uniapp之后在微信开发者工具运行&#xff0c;更改的时候微信开发者也同步更改 1.创建小程序命令 这里的uniapp-vue是项目名称&#xff0c;不能大写 vue create -p dcloudio/uni-preset-vue uniapp-vue 2.选择uni-app模版 有几种模版选择&#x…

Ubuntu TDengine 集成 EMQX 通过规则引擎实现设备数据直接入库

背景 曾使用过 IoTDB 自带的 MQTT Broker 实现了设备数据入库&#xff0c;那么使用 TDengine 时&#xff0c;我们可以借助 EMQX &#xff08;一款优秀的国产开源 MQTT Broker &#xff09;的规则引擎结合 TDengine 的 RESTful API 完成设备数据的路由与入库。 用到的工具 TD…

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

作者&#xff1a;段忠杰&#xff08;终劫&#xff09;、刘冰雁&#xff08;伍拾&#xff09;、汪诚愚&#xff08;熊兮&#xff09;、黄俊&#xff08;临在&#xff09; 背景 以Stable Diffusion模型为代表&#xff0c;AI生成内容&#xff08;AI Generated Content&#xff…