什么是革命性技术eBPF?为什么可观测性领域都得用它
公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。
如果有一种技术可以监控和采集任何应用信息,支持任何语言,并且应用完全无感知,零侵入,想想是不是很激动,那么这个技术是什么呢?就是eBPF,它应该是最近一两年非常热门的技术名词,我相信你或多或少都看到过,但可能不知道它能做什么,今天我们来讲讲这个革命性的技术eBPF,以及它在可观测领域的应用eBPF是什么?
eBPF 是什么?

eBPF(extended Berkeley Packet Filter)是在 Linux 内核中运行的虚拟机技术,2014 年它首次出现在 Linux 内核中,并经过这几年迭代,目前已经成熟。它提供了一种灵活并且安全的方式来扩展内核功能。eBPF 最初是为网络数据包过滤而设计的,但现在已经扩展到其它领域,如安全监控、性能分析和系统跟踪等。
eBPF允许用户在不修改内核源代码的情况下,通过加载和执行自定义的eBPF程序来扩展内核功能。这些eBPF程序通过Hook 机制与内核交互,它们可以对进入和离开内核的事件进行过滤和处理,以实现网络数据包的监控、性能统计和安全审计等功能。
如下图,eBPF可以在文件写入和读取进行拦截处理,网络的发送和接受进行拦截处理

这段代码是一个 eBPF 过滤器程序,用于在网络数据包通过时打印源 IP 地址和目标 IP 地址。它使用 bpf_printk 函数来输出信息到内核日志。
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/in.h>
SEC("filter")
int print_ip(struct __sk_buff *skb) {
struct ethhdr *eth = bpf_hdr_pointer(skb);
struct iphdr *ip = (struct iphdr *)(eth + 1);
if (eth->h_proto == htons(ETH_P_IP)) {
bpf_printk("Source IP: %u.%u.%u.%u\n",
ip->saddr & 0xFF,
(ip->saddr >> 8) & 0xFF,
(ip->saddr >> 16) & 0xFF,
(ip->saddr >> 24) & 0xFF);
bpf_printk("Destination IP: %u.%u.%u.%u\n",
ip->daddr & 0xFF,
(ip->daddr >> 8) & 0xFF,
(ip->daddr >> 16) & 0xFF,
(ip->daddr >> 24) & 0xFF);
}
return XDP_PASS;
}
eBPF 能做什么?
动态编程内核以实现高效的网络、可观测性、追踪和安全性。
1.可观测性
eBPF 程序是事件驱动的,当内核或用户程序经过一个 eBPF Hook 时,对应 Hook 点上加载的 eBPF 程序就会被执行。从而可以采集相关信息,而且它是完全无侵入,对应用系统来说完全无感知。
想想以前我们用的监控系统Cat、SkyWalking或多或少都有侵入,只是代码多少的问题,有了它完全不用关心,而且它能对所有运行在 linux 上面应用进行监控,比如
redis、kafka等
2.安全监控和审计
eBPF可以用于实时监控系统的安全事件和异常行为。它可以检测恶意软件、网络攻击、未经授权的访问等安全威胁,并触发警报或采取相应的防御措施。
3.自定义功能扩展
如数据包处理、协议解析、数据转换等。
eBPF 在可观测性方案的应用
可观测性,也是近几年非常热门的话题,因为目前互联网公司应用大部分都基于 k8s 部署,而 k8s 的网络模型比较复杂,如果系统出现异常,无法快速定位问题,所以需要有一个的平台可以去做系统故障定位、性能优化、以及监控等工作,而可观测性提供了更深入的洞察力和更好的理解,使得在复杂的分布式系统中构建、部署和维护应用程序更加可靠和高效
如何做好一个可观测性系统,那么eBPF技术是绕不开的,下面看下eBPF是如何抓取应用数据
eBPF 是如何抓取应用数据的
可能有人会问eBPF是怎么抓取数据,因为进入系统内核都是二进制数据,如何知晓是kafka或者mongodb的数据,答案是基于通信协议,每个中间件都是属于自身的通信协议,比如 redis、mysql、mongodb等,以下为mongodb的原始通信报文,这个报文每几位代表什么含义,在mongodb官方文档都有定义

引用于:郑志聪老师在 2023 云原生+可观测性广州 Meeup 分享
mongodb 消息解析
由于作者本人的电脑为MAC M系列芯片,对eBPF不怎么兼容,所以我们下面只讲原理,如下图是mongodb通信协议,基于这个协议,可以知晓消息内容、操作类型、响应码等。

struct MsgHeader {
int32 messageLength; // total message size, including this
int32 requestID; // identifier for this message
int32 responseTo; // requestID from the original request
// (used in responses from the database)
int32 opCode; // message type
}
https://www.mongodb.com/docs/manual/reference/mongodb-wire-protocol/
基于这个消息协议,eBPF就可以完成数据解析和抽取

基于 eBPF 构建的可观测性平台
目前很多公司都基于 eBPF技术在构建自己的可观测性平台,下面介绍一些相关产品
阿里云应用监控 eBPF 版
它是一套针对 Kubernetes 集群开发的一站式可观测性产品,它能做到:
- 代码无侵入:阿里云应用监控 eBPF 版通过旁路技术,不需要对代码进行埋点即可获取到丰富的网络性能数据。
- 语言无关:阿里云应用监控 eBPF 版在内核层进行网络协议解析,支持任意语言,任意框架。
- 高性能:阿里云应用监控 eBPF 版基于 eBPF 技术,能以极低的消耗获取丰富的网络性能数据。
- 资源关联:阿里云应用监控 eBPF 版通过网络拓扑,资源拓扑展示相关资源的关联。
- 数据多样:阿里云应用监控 eBPF 版支持可观测的各种类型数据(监控指标、链路、日志和事件)。
- 整体性:阿里云应用监控 eBPF 版通过控制台的场景设计,关联起架构感知拓扑、Prometheus 监控、告警配置。
部分效果图
dashboard

拓扑图

开源监控系统 deepFlow
DeepFlow 开源项目旨在为复杂的云基础设施及云原生应用提供深度可观测性。DeepFlow 基于 eBPF 实现了零侵扰(Zero Code)的指标、分布式追踪、调用日志、函数剖析数据采集,并结合智能标签(SmartEncoding)技术实现了所有观测数据的全栈(Full Stack)关联和高效存取,核心特性如下:
- 任意 Service 的全景图:利用 eBPF 零侵扰绘制生产环境的全景图。
- 任意 Request 的分布式追踪:基于 eBPF 的零侵扰分布式追踪能力,支持任意语言的应用程序,并完整覆盖网关、服务网格、数据库、消息队列、DNS、网卡等各类基础设施。
- 任意 Function 的持续性能剖析:以低于 1% 的开销零侵扰采集生产环境进程的性能剖析数据。
- 无缝集成流行的可观测性技术栈:可作为 Prometheus、OpenTelemetry、SkyWalking、Pyroscope 的存储后端。
- 存储性能 10x ClickHouse:基于 SmartEncoding 机制,向所有观测信号注入标准化的、预编码的元标签,相比 ClickHouse 的 String 或 LowCard 方案均可将存储开销降低 10x。
部分效果图
redis 监控

请求日志

分布式链路追踪

sql 监控

https://github.com/deepflowio/deepflow/blob/main/README-CN.md
SkyWalking
众多周知SkyWalking基于agent方式采集可观测性数据,比如java用java agent相关api编写,其它语言则编写对应语言的agent,这种方式可行,但是对技术人员要求较高。如果使用eBPF就不存在这种问题,目前看到SkyWalking也有往eBPF方向发展
部分效果图


引用于吴晟老师 SkyWalking2023 峰会演讲 PPT
Cilium
Cilium 是一个开源项目,为 Kubernetes 集群和其它容器编排平台等云原生环境提供网络、安全和可观测性,它主要使用的技术就是eBPF

总结
以上我们介绍了eBPF是什么,以及它有哪些优势,同时讲解了它在可观测性领域的一些应用,希望对你有所帮助。
扫描下面的二维码关注我们的微信公众帐号,在微信公众帐号中回复◉加群◉即可加入到我们的技术讨论群里面共同学习。

什么是革命性技术eBPF?为什么可观测性领域都得用它的更多相关文章
- 未来-区块链-Micron:区块链永远不会忘记:内存对这项革命性技术的推动作用
ylbtech-未来-区块链-Micron:区块链永远不会忘记:内存对这项革命性技术的推动作用 1.返回顶部 1. 俗话说,大象永远不会忘记.区块链亦是如此. 内存是区块链的核心,它是一种以关键方式构 ...
- 从Chat-GPT看爆火技术概念及医疗领域科技与应用场景
作者:京东健康 陈刚 一.前言 最近OpenAI在官网上宣告了多模态大模型 GPT-4 的诞生,它可能是迄今为止最好的多模态模型. 主要更新内容如下: 1. 逻辑分析能力更加全面.「考试」能力大幅提升 ...
- 一个会学习(观察->活学->求变)的人,在任何领域都能变得强大无比
开始今天的话题之前,我说个小故事. 很早以前有一部美剧,叫<Hero>. 大概讲的是正反两派都是一群有超能力的人,彼此为了某个巨大的阴谋互相撕逼了十多集.虽然剧情很老套,但是让 ...
- 我收藏的技术知识图(每张都是大图)关于XX背后的知识、技术图,例如:Linux、Nginx架构、PHP知识卡、机会、HTML5移动、Android系统架构、YII架构的典型流程、Css知识表
我收藏的技术知识图(每张都是大图) HTML5Linux/Unix系统设计思想读书笔记 LinuxMVCJava线程MVCSpring MVCCSS3Nginx架构VimCliCommandsPHP知 ...
- 干货!4大实验项目,深度解析Tag在可观测性领域的最佳实践!
Opentelemetry协议,是CNCF(Cloud Native Computing Foundation-云原生计算基金会)定义的最新一代的可观测规范(目前还在孵化中),该规范定义了可观测性的三 ...
- 身边好几个技术一般的程序员都面上了,阿里P7门槛降低?
经常在网上的论坛里看到讨论程序员的级别,尤其在跳槽类的信息里可以看到对标阿里P7,百度T6,腾讯3.1等字眼,似乎大厂的级别俨然可以成为业内的通用货币,类似于高考分数一样,哪一档就对应着什么样的待遇. ...
- 没有技术说明文档的开源都是耍流氓:微软Roslyn编译即服务在CIIP中具体应用(上)
前段时间我发布了 github开源:企业级应用快速开发框架CIIP WEB+WIN+移动端,很多园友们都表示支持并与我探讨相关技术问题,上篇中我也承诺会写相关的技术文章,本篇就来介绍一下建模模块中使用 ...
- 2020年度综合大盘点:火爆IT业的7大Java技术,每一项都是大写的“牛逼”!
关注"Java这点事",每天与你分享Java技术.IT资讯 JAVA语言作为历史最为悠久的编程语言,从95年5月开始历经数十年依然盘踞在编程榜前三的位置,与它强大的功能和广泛的运用 ...
- eKing Cloud基础云平台演进之路
出口转内销.首发于公司微信公众号,作者本人,现转载到此.本来写得比较技术,还算有点干货,但是结果被编辑咔咔咔,就只剩下下面这些内容. 大型企业如何开启自己的快速上云之路? 2017-12-08 易建科 ...
- 实时中文语音克隆——开源项目MockingBird体验
[引子] 在今年大型网络攻防演练前不久,笔者接到一个公司的座机号码来电,上来就问防守准备得怎么样了,哪里还有不足等.等等,这声音不认识,笔者第一反应就是蓝军(Red Team)来进行社会工程攻击,于是 ...
随机推荐
- yum&二进制安装PostgreSQL 12
一.yum安装&配置PostgreSQL 12 目录 一.yum安装&配置PostgreSQL 12 一.前言 1.本文主要内容 2.本文环境信息与适用范围 二.PostgreSQL安 ...
- 二叉树(binary tree)
二叉树(binary tree) 二叉树(Binary Tree)是一种常见的树状数据结构,它由一组节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点.二叉树具有以下特点: 每个节点最多有 ...
- @Async注解详解 以及 可能遇到的各种问题
一.简介1)在方法上使用该@Async注解,申明该方法是一个异步任务:2)在类上面使用该@Async注解,申明该类中的所有方法都是异步任务:3)方法上一旦标记了这个@Async注解,当其它线程调用这个 ...
- 音频格式轻松转 - foobar2000
一.foobar2000简介 foobar2000 是一款免费的专业级别音频解码播放器,支持的诸多音频格式,可加载附加组件扩展更多支持. 除了解码以外,可轻松实现对音频格式的转换,支持几乎所有主流格式 ...
- Spring框架中的设计模式(重点学习!!!)
Spring中的设计模式 Spring框架中用到的设计模式有很多,以下是一些常见的设计模式: 依赖注入(DI)和控制反转(IoC):这是Spring框架最核心的设计模式,它允许开发人员将对象之间的依赖 ...
- destoon运行流程二次开发必看
<?php 代码首先包含common.inc.php文件 在common.inc.php文件中,首先定义常量. define('IN_DESTOON', true); define('IN_AD ...
- 前端三件套系例之HTML——HTML文档结构、文档声明、主体结构标签、HEAD头部标签、meta元信息、Body内常用标签、6 其他了解
文章目录 HTML文档结构 1. 文档声明 2.主体结构标签 3.HEAD头部标签 4.meta元信息 5 Body内常用标签 5.1 基本标签(块级标签和内联标签) 5.2 div标签和span标签 ...
- CCF PTA编程培训师资认证
考试费用: 双会员500元,任意一方单会员750元,报名考试同时成为CCF专业会员850元,非会员1000元. P/T2补考费用:双会员200元,任意一方单会员300元,非会员400元. T1补考费用 ...
- ECS搭建FTP服务
实验云账号,创建资源后生成收起 子用户名称: u-7ngohee5@1111971854401817 子用户密码: Jp1Ho5Aj5Ek5Yx1P AK ID: LTAI5tGc6fVMJj44H4 ...
- C#归并排序算法
前言 归并排序是一种常见的排序算法,它采用分治法的思想,在排序过程中不断将待排序序列分割成更小的子序列,直到每个子序列中只剩下一个元素,然后将这些子序列两两合并并排序,最终得到一个有序的序列. 归并排 ...