基于eBPF技术的云原生可观测实践

news2024/11/6 3:16:42

**

基于eBPF技术的云原生可观测实践

**
eBPF技术是Linux内核3.15版本中引入的全新设计,自从2014年发布以来,一直都备受瞩目。在过去几年中,基于eBPF技术的实践和工程落地层出不穷,出现了爆发式的增长。2015年微软、Google、Facebook、Netflix 和 Isovalent 也共同宣布在 Linux 基金会下成立了一个新的 eBPF 基金会,以帮助支持该技术的发展,并促进正在发展的许多基于 eBPF 的开源项目之间的合作。
eBPF技术已然成为基础设施世界中最有影响力的技术之一。

| 什么是eBPF?

我们知道操作系统分为用户空间和内核空间,内核是操作系统的核心,它独立于常规的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安全,现在的操作系统一般都强制用户进程不能直接操作内核。而应用程序通常是在用户空间中运行,每当这些应用程序想要以任何方式与硬件交互时,都必须向内核发出请求来获得访问权限,同时,内核还负责调度各个应用程序,以确保多个进程同时运行。
eBPF的强大与神奇之处,就是在内核和用户空间之间架起了“桥梁”,改变了操作系统和基础设施服务的设计方式,将原先的BPF发展成一个指令集更复杂、应用范围更广的“内核虚拟机”,以提供更多的可编程性、可扩展性和敏捷性。
eBPF程序能在操作系统的内核中运行,并在不更改内核源代码的情况下对内核进行检测。为了避免注入的代码导致内核崩溃,eBPF会对注入的代码进行严格检查,拒绝不合格的代码的注入,保证eBPF程序运行的稳定性和安全性。

| 可观测性体系构建

在云原生可观测体系构建中,业界通常将指标(Metrics)、链路(Tracing)和日志(Logging)称为可观测性的“三大支柱”。而在具体实践中,这三个监测维度与其说是“支柱”,更像是三条相互交织、相互关联的“线”,在各自侧重自身领域能力建设的基础上又要实现互联——以“链路”能力串起所有应用系统的依赖拓扑关系,补充“指标”能力实时掌控链路上各个节点的健康状况,兼以“日志”能力实现深度的业务分析与错误定位。
在这里插入图片描述

针对可观测性体系所需要的这三个方面能力的构建,行业内分别都有比较成熟的开源项目可以直接使用,比如云原生运行指标数据的采集与展示基本采用Prometheus + Grafana来构建,链路追踪有Skywalking、Zipkin等APM工具,也有基于交换机镜像通过网络旁路进行采集分析的NPM类产品,而日志体系使用的比较多的有ELK。

在这里插入图片描述

针对这些产品的组合,我们也可以比较快速地搭建一个可观测性系统,但是从业界实践来看,这样组装的系统普遍存在几类痛点。

  • 缺乏全局性的系统和网络拓扑关系。不管是采用APM还是NPM来绘制链路,受限于采集方式,无法完整覆盖所有应用系统、主机、负载均衡器等维度的网络调用链路拓扑,无法构建全面的链路拓扑。
  • 数据采集方式不具备普适性。Skywalking与Zipkin等APM类产品需要采用SDK集成或Agent等方式,随着应用部署运行,采集特定埋点的指标数据,这两类方式都都要依赖应用方进行适配改造,埋点的数据采集又局限于特定语言和技术栈。而在云原生环境中,多语言应用、不同通信协议共存的情况下,存在适配工作量极大、应用感知明显的问题;而NPM由于是通过交换机镜像采集网络流量,一方面随着云原生应用在虚拟网络上运行,流量不经过物理交换机,单从物理交换机采集流量并不能有效支持上云业务的监测分析需要,另一方面,未将抓取的网络信息与云资源信息结合,无法呈现应用容器间、网络关键组件的网络拓扑。

| 基于eBPF技术的可观测实践探索

如上文所诉,eBPF技术在用户空间和内核空间之间架起了“桥梁”,通过将eBPF程序加载到trace points、内核、及用户空间应用,使得我们可以从内核空间获取应用程序的运行时行为(runtime behavior)和系统事件(system event)。应用端与系统端的这种观测能力结合,能在排查系统性能问题时提供更强大的能力和独特的信息。
在这里插入图片描述

同时,相比于操作系统提供的静态计数器(counters、gauges),eBPF能在内核中收集和聚合自定义metric,并能从不同数据源来生成可观测数据,这既扩展了可观测性的深度,也显著减少了整体系统开销,因为通过eBPF可选择只收集必要的数据,这也极大地提高了在大规模生产环境中构建可观测性能力的可行性。
相比于传统监测数据采集与分析技术,基于eBPF技术的可观测系统有着显著的优势。

  • 零侵入式,eBPF采集端程序与应用系统运行在不同的进程中,不会对应用系统运行带来影响;
  • 语言无关性,无论待监测的应用系统采用的是什么开发语言或技术框架,都可实现覆盖,构建全面的链路拓扑和可观测图谱;
  • 多环境适配,不管应用系统运行的基础环境是采用Kubernetes或Open Shift等云原生平台、虚拟机集群、物理机、还是科创环境,都可实现适配,采用一套采集方式来实现多环境覆盖

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

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

相关文章

浏览器里的任意一个请求通过postman生成对应的代码

大多数情况下,我们都是不知道某个网站的get或者post请求以及其他请求(比如说PUT请求等)是该加哪些headers和cookie才能用代码请求成功,这时就需要下面的操作了。 浏览器里的任意一个请求通过postman生成对应的代码: …

外观模式的学习与使用

1、外观模式的学习 当你在开发软件系统时,系统内部的子系统可能会变得非常复杂,包含了许多相互关联的类和接口。在使用这些子系统时,你可能需要调用多个类和方法才能完成所需的功能。这样的复杂性可能导致代码难以维护、理解和使用。外观模式…

NSQ 实现逻辑探秘

1 什么是 NSQ NSQ 是一个消息队列中间件,用 go 实现,有如下特点: 分布式: 它提供了分布式的、去中心化且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和高可用特性。 易于扩展&#xf…

【Echarts】echarts饼图、圆环图配置代码详解

前言 简介:本文将从头开始,带你快速上手 echarts最常用图例—饼图 准备:请自行先将echarts图例引入你的项目,本文不多介绍。(引入 echarts教程:http://t.csdn.cn/mkTa4) 心得:echar…

递归函数:

含义&#xff1a;自己调自己 递归三要素&#xff1a;定义函数、终止条件和等价关系式 小案例&#xff1a;排序 let arr1 [8, 8, 9, 13, 45, 8, 0, 1, 9, 66];//定义函数function quickSort(arr) {//终止条件if (arr.length < 1) return arr;const baseIndex Math.floor(…

十五、docker学习-docker核心docker数据卷

什么是数据卷 当我们在使用docker容器的时候&#xff0c;会产生一系列的数据文件&#xff0c;这些数据文件在我们删除docker容器时是会消失的&#xff0c;但是其中产生的部分内容我们是希望能够把它给保存起来另作用途的&#xff0c;Docker将应用与运行环境打包成容器发布&…

【游戏逆向】D3D HOOK实现透视讲解

实现目的: 目前大部分游戏通过Direct3D实现3D效果,通过挂钩相应函数,可以实现3D透视,屏幕挂字效果。而透视,屏蔽特定效果,设置透明在很多游戏(特别是FPS)中发挥着巨大的作用! 实现思路: [D3D] DirectX的功能都是以COM组件的形式提供的。在Direct3D中,主要通过采…

Unity新输入系统

1、导入新输入系统 &#xff08;1&#xff09; 这里改成.NET Framework&#xff0c;下面改成input system package(New) 2、使用新系统 &#xff08;1&#xff09; 在你的player物体上添加Player Input组件&#xff0c;然后CreateAction &#xff08;2&#xff09; 创建出…

连接器信号完整性仿真教程 五

本文将详细介绍CST电磁仿真的激励源&#xff08;Excitation Source&#xff09;及其设置。CST微波工作室根据具体应用和结构类型提供多种不同的激励源&#xff0c;总得来说包含激励端口&#xff08;Excitation Port&#xff09;和场源&#xff08;Field Sources&#xff09;。 …

3.Mysql子查询练习

1.子查询概述 子查询指一个查询语句嵌套在另一个查询语句内部的查询&#xff0c;内部的查询是外部查询的条件&#xff0c;这个特性从MySQL4.1开始引入 子查询(内查询)在主查询之前执行完成 子查询的结果被主查询(外查询)使用 注意事项&#xff1a; 子查询要包含在括号内 将子查…

Vue 时间格式转换

文章目录 将秒转换成简单时间格式方式一 表格渲染方式二 js转换 将时间转换为字符串方式一 年、月、日、时、分、秒、星期等信息方式二 返回多久之前的时间 将秒转换成简单时间格式 方式一 表格渲染 element-ui 表格为例&#xff0c;duration 单位为秒 <el-table-column …

逻辑回归精讲

一、从线性回归到逻辑回归 对于分类问题&#xff0c;我们该如何解决 可以通过线性回归阈值解决吗&#xff1f; 就上面的这张图而言&#xff0c;横轴蓝色的那条线是可以将正负样本区分开的。那我们再看一个例子 就上面的图而言&#xff0c;横轴蓝色的那条线无法将正负例正确划…

基于springboot的垃圾分类网站的设计与实现

系统设计 本垃圾分类网站主要包括三大功能模块&#xff0c;即用户功能模块和管理员功能模块、垃圾分类管理员功能模块。源码下载 &#xff08;1&#xff09;管理员模块&#xff1a;系统中的核心用户是管理员&#xff0c;管理员登录后&#xff0c;通过管理员功能来管理后台系统…

SpringMVC (四) 数据处理及跳转

学习回顾&#xff1a;SpringMVC &#xff08;三&#xff09; RestFul和控制器 现在我们来看看SpringMVC参数接收处理和结果跳转处理吧&#xff01; 结果跳转方式 一、ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . 页面 : {视图解析器前…

测试员该如何向七大姑八大姨解释你的工作?

过年回家&#xff0c;走亲访友带来了一年未见的七大姑八大姨们&#xff0c;必不可少会出现一系列“灵魂拷问”&#xff0c;比如“二狗&#xff0c;在做啥工作呢&#xff1f;” 相比“有对象了么&#xff1f;”、“啥时候生娃&#xff1f;”等硬核话题&#xff0c;合理地向七大姑…

如果只能推荐3本关于python的书,你会推荐哪3本?

如果只能推荐3本Python书的话&#xff0c;我推荐这3本。 第一本&#xff1a;Python编程快速上手 让繁琐工作自动化 第2版  豆瓣评分8.9 本书是一本面向初学者的Python编程实用指南。本书不仅介绍了Python语言的基础知识&#xff0c;而且通过案例实践教读者如何使用这些知识和…

css自学框架之栅格化12格布局、flex布局下两端对齐,不满左对齐

flex基础知识 1.flex-direction 容器内元素的排列方向(默认横向排列) flex-direction:row; 沿水平主轴让元素从左向右排列flex-direction:column; 让元素沿垂直主轴从上到下垂直排列flex-direction:row-reverse;沿水平主轴让元素从右向左排列 2.flex-wrap 容器内元素的换行(…

java feign的使用详细步骤及okhttp的使用

1、首先创建一个feign的模块并配置依赖&#xff0c;如图&#xff1a; 1、引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency&g…

kali换源

sudo vim /etc/apt/sources.list&#xff08;打开sources.list 文件&#xff09; 官方源 deb http://http.kali.org/kali kali-rolling main non-free contrib deb-src http://http.kali.org/kali kali-rolling main non-free contrib 中科大源 deb http://mirrors.ustc.edu.cn…

小主机折腾记15

海鲜市场买到个华硕的h61主板&#xff0c;支持笔记本内存又带独显插槽&#xff0c;40大洋包邮…… 到货后把老笔记本上拆下来的两根威刚2g 1066的内存条安上&#xff0c;上集提到的i5 2390t安上&#xff0c;之前买的gt440安上&#xff0c;最后安上了之前买的惠普侧吹风散热器&…