通过观测云 eBPF Tracing 实现无埋点的全链路追踪

前言

随着微服务架构的普及和系统复杂度的增加,对应用程序的可观测性要求也越来越高。传统的监控方法通常需要在应用程序中添加代码来记录和追踪重要信息,这种方法可能会增加系统的负担,并且在复杂系统中维护难度较大。

eBPF(Extended Berkeley Packet Filter)是一种内核技术,能够在不修改应用程序代码的前提下,收集应用程序的运行时信息并进行分析。通过结合 eBPF 和 DataKit,我们可以实现对任何编程语言,任何技术栈应用程序的无埋点全链路追踪,从而提高系统的整体可观测性。

eBPF Tracing 概述

eBPF 是一种强大的内核技术,允许在内核中安全地执行自定义代码。通过 eBPF,开发者可以在不修改内核源码的情况下,对内核功能进行扩展和监控。eBPF Tracing 利用这一技术,对系统调用、内核函数等进行跟踪,从而实现对应用行为的深入洞察。

与传统的监控方式相比,eBPF Tracing 具有以下优势:

  • 无侵入性:无需修改应用代码即可进行监控。
  • 高性能:在内核层面执行,减少了对应用性能的影响。
  • 细粒度:可以精确到单个系统调用或内核函数的监控。

如何实现 eBPF 无埋点全链路追踪

部署 eBPF Trace 链接器

eBPF Trace 链接器负责接收来自采集器的 eSpan 数据,并进行链接,生成完整的 Trace。

安装方式
  • 主机安装

可以通过在安装命令中添加 DK_ELINKER 环境变量来安装用于 eBPF Span 的连接和 eBPF Trace 生成的 DataKit ELinker 版本。

DK_DATAWAY=https://openway.guance.com?token=<TOKEN> DK_ELINKER=1 bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"

参考文档:主机安装 - 观测云文档

  • Kubernetes 安装
wget https://static.guance.com/datakit/datakit-elinker.yaml

修改 ENV_DATAWAY 环境变量

- name: ENV_DATAWAYvalue: https://openway.guance.com?token=<TOKEN> # Fill your real Dataway server and(or) workspace token

执行安装

kubectl apply -f datakit-elinker.yaml
开启 ebpf trace 采集器
  • 主机安装方式
cd /usr/local/datakit/conf.d/ebpftrace
cp ebpftrace.conf.sample ebpftrace.conf
datakit service -R
  • Kubernetes 安装方式

Kubernetes 方式安装的 DataKit ELinker 已默认开启 ebpf trace 采集器,可按需配置采样率,等待窗口时间等配置。

部署 eBPF 采集器

首先,需要在目标主机或集群上部署 eBPF 采集器。观测云提供的 ebpf 采集器能够收集 eSpan 数据,这些数据是构建全链路追踪的基础。

安装 DataKit
  • 主机安装
  • k8s 安装
开启 ebpf 采集器
  • 主机方式
cd /usr/local/datakit/conf.d/host
cp ebpf.conf.sample ebpf.conf

其中 trace_server 为 eBPF Trace 连接器 DataKit ELinker 地址。

[[inputs.ebpf]]enabled_plugins = ["ebpf-net","ebpf-trace",]l7net_enabled = ["httpflow",]trace_server = "x.x.x.x:9529"trace_all_process = falsetrace_env_list = ["DK_BPFTRACE_SERVICE","DD_SERVICE","OTEL_SERVICE_NAME",]trace_env_blacklist = []trace_name_list = []trace_name_blacklist = [## The following two processes are hard-coded to never be traced,## and do not need to be set:### "datakit",# "datakit-ebpf",]

重启 DataKit

datakit service -R
  • Kubernetes 方式

在 datakit.yaml 中添加如下 ConfigMap 配置文件。

apiVersion: v1
kind: ConfigMap
metadata:name: datakit-confnamespace: datakit
data:ebpf.conf: |-[[inputs.ebpf]]enabled_plugins = ["ebpf-net","ebpf-trace",]l7net_enabled = ["httpflow",]trace_server = "datakit-elinker-service.datakit-elinker:9529"trace_all_process = falsetrace_env_list = ["DK_BPFTRACE_SERVICE","DD_SERVICE","OTEL_SERVICE_NAME",]trace_env_blacklist = []trace_name_list = []trace_name_blacklist = [## The following two processes are hard-coded to never be traced,## and do not need to be set:### "datakit",# "datakit-ebpf",]

挂载 ebpf.conf 配置文件至 DataKit 中。

apiVersion: apps/v1
kind: DaemonSet
metadata:labels:app: daemonset-datakitname: datakitnamespace: datakit
spec:...template:...spec:...containers:...volumeMounts:...- mountPath: /usr/local/datakit/conf.d/host/ebpf.confname: datakit-confsubPath: ebpf.conf...

应用 datakit.yaml 至集群中。

kubectl apply -f datakit.yaml

eBPF Tracing 无埋点全链路追踪效果展示

配置完成后,eBPF 会自动采集所用应用的网络请求,以及数据库请求,Datakit 会自动生成链路数据,DataKit ELinker 链接 eSpan 后上报至观测云平台,就可以对无埋点的链路进行分布式追踪。

除此之外,观测云 eBPF Tracing 也会自动关联应用的 OpenTelmetry 和 DDTrace 的链路,作为互相补充,可以提供从应用内部函数到接口级的端到端追踪,帮助开发者获得更全面的系统视图。

总结

eBPF Tracing 能够为云原生应用提供一种高效、无侵入的监控手段,开发者可以在不修改代码的情况下灵活选择最适合的监控方案,深入了解应用的运行状态,从而快速定位和解决问题。观测云 eBPF Tracing 也会持续进步,提供对更多协议的解析,持续跟进 eBPF 在监控领域的更广泛应用。

参考文档

#demo地址:
https://github.com/GuanceDemo/guance-go-ginvueblog-demo?tab=readme-ov-file
#datakit文档:
https://docs.guance.com/datakit/datakit-daemonset-deploy/
#ebpf文档:
https://docs.guance.com/integrations/ebpf/
#ebpftrace文档:
https://docs.guance.com/integrations/ebpftrace/#ebpftrace-config

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

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

相关文章

告别PDF格式困扰,2024年PDF转换器推荐

PDF现在已经逐渐成为了文件传输的主流格式了&#xff0c;它有保存文件页面版式的优点&#xff0c;但是这个格式编辑对大部分人来说还是不那么方便&#xff0c;日常我们还是习惯将它们转换成我们常见的 文本格式来操作。今天我分享一下可以实现PDF格式转换的pdf转换器有哪些吧。…

SX_c语言字符串赋值 “multiple definition of .. first defined here”问题_21

字符串赋值问题&#xff1a; #include <stdio.h> #include <string.h>char* my_string_cat(int position, int slot, char* content){char* gnsst NULL;static char retvalue[50];memset(retvalue, \0, sizeof(retvalue));if(position 0){//头部if(slot 0){//卡…

【视频讲解】SMOTEBoost、RBBoost和RUSBoost不平衡数据集的集成分类酵母数据集、治癌候选药物|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p37502 分析师&#xff1a;Zilin Wu 在当今的大数据时代&#xff0c;科研和实际应用中常常面临着海量数据的处理挑战。在本项目中&#xff0c;我们拥有上万条数据&#xff0c;这既是宝贵的资源&#xff0c;也带来了诸多难题。一方面&a…

【递归回溯之floodfill算法专题练习】

1. 图像渲染 class Solution {int dx[4] {0, 0, -1, 1};int dy[4] {1, -1, 0, 0};int m, n;int oldcolor; public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {oldcolor image[sr][sc]; // 保存原…

MySQL数据库MVCC机制底层原理详解

mvcc机制即多版本并发控制 当在事务中使用了写操作&#xff08;增删改&#xff09;语句时会给当前事务生成一个事务id&#xff0c;事务id是递增的 同时&#xff0c;对于被修改的行的数据会创建一个数据版本 &#xff0c;这个数据版本除了包含原有的字段还会包含一个事务id和一…

Linux驱动开发—创建总线,创建属性文件

文章目录 1.什么是BUS&#xff1f;1.1总线的主要概念1.2总线的操作1.3总线的实现 2.创建总线关键结构体解析2.1注册总线到系统2.2 struct bus_type *bus 解析 3.实验结果分析1. devices 目录2. drivers 目录3. drivers_autoprobe 文件4. drivers_probe 文件5. uevent 文件 4.在…

【力扣】划分为k个相等的子集

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 给定一个整数数组 …

【qt】锁

线程安全问题. 多线程程序太复杂了. 加锁 把多个线程要访问的公共资源&#xff0c;通过锁保护起来.>把并发执行变成串行执行. Linux mutex 互斥量. C11引入std::mutex Qt 同样也提供了对应的锁&#xff0c;来针对系统提供的锁进行封装.QMutex 多个线程进行加锁的对象&…

【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】

室内告白表白祝福布置霓虹灯生日视频制作教程AE模板改字生成器 怎么如何做的【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

Signac R|如何合并多个 Seurat 对象 (1)

引言 在本文中演示了如何合并包含单细胞染色质数据的多个 Seurat 对象。为了进行演示&#xff0c;将使用 10x Genomics 提供的四个 scATAC-seq PBMC 数据集&#xff1a; 500-cell PBMC 1k-cell PBMC 5k-cell PBMC 10k-cell PBMC 实战 在整合多个单细胞染色质数据集的过程中&…

SAP与生产制造MPM系统集成案例

一、需求介绍 某公司为保证企业内部生产管理系统的多项基础数据的同步更新&#xff0c;确保各模块间信息的一致性和准确性&#xff0c;对后续的生产计划和物料管理打下基础&#xff0c;该公司将MPM系统和SAP系统经过SAP PO中间件集成平台进行了集成。MPM全称为Manufacturing…

超实用的8个无版权、免费、高清图片素材网站整理

不管是设计、文章配图&#xff0c;还是视频制作&#xff0c;图片都至关重要。但是图片版权一直都是困扰很多设计、自媒体以及企业的大问题。现在&#xff0c;因为图片侵权被告的案例已经是司空见惯了&#xff0c;有的公众号甚至因为图片版权问题遭受致命打击。 1. Pexels Pexe…

Spring框架:开发者的得力伙伴,魅力何在?

目录 一. Spring介绍 二. Spring搭建 三. Spring Bean管理 ▐ 管理方式 ▐ 依赖注入 四. Spring数据访问层管理 五. Spring集成MyBatis 海漫浩浩,我亦苦作舟!大家一起学习,一起进步! 一. Spring介绍 Spring是什么? Spring 是一个轻量级的, IOC 和 AOP 的一站式 J…

如何使用ssm实现基于java web的计算机office课程平台设计与实现+vue

TOC ssm277基于java web的计算机office课程平台设计与实现vue 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利…

博弈论(Nim游戏的扩展)

公平组合游戏ICG 若一个游戏满足: 1.由两名玩家交替行动; 2.在游戏进程的任意时刻&#xff0c;可以执行的合法行动与轮到哪名玩家无关; 3.不能行动的玩家判负; 则称该游戏为一个公平组合游戏。 NIM博弈属于公平组合游戏&#xff0c;但城建的棋类游戏&#xff0c;比如围棋&…

大刀阔斧改革之后,阅文距离“东方迪士尼”更近了吗?

当前&#xff0c;网文IP的确是“富矿”。中国社会科学院文学研究所发布的《2023中国网络文学发展研究报告》显示&#xff0c;截至2023年底&#xff0c;网络文学IP市场规模2605亿元&#xff0c;同比增长近百亿元。 近日&#xff0c;网文产业中的头部企业阅文集团也披露数据称&a…

虚拟内存和linux(操作系统part1)

一个操作系统的虚拟内存和linux部分知识点的笔记整理&#xff0c;资料大多参考于&#xff1a;小林coding和Javaguide。 虚拟内存的作用 第一&#xff0c;虚拟内存可以使得进程运行内存超过物理内存大小&#xff0c;因为程序运行符合局部性原理&#xff0c;CPU 访问内存会有很…

【iOS安全】iPhone8 iOS14.4.2 越狱教程

环境配置 iPhone 8&#xff1a; 固件版本 iOS 14.4.2 (18D70) 产品类型 iPhone10,1 (A1906) 销售型号 MQ862J/A MacBook Pro&#xff1a; macOS 10.15.7 装有CheckRa1n beta 0.12.4 概述 尝试了几个版本的unc0ver和Taurine&#xff0c;发现都不好使 unc0ver显示unsupported…

95.SAP MII功能详解(08)Workbench-Transaction介绍

目录 1.Transaction 2.Properties of transaction 1.Transaction You use transactions to access data from multiple sources and execute processes, which are triggered synchronously or asynchronously.您可以使用事务从多个源访问数据并执行同步或异步触发的流程。…

代码随想录——两个字符串的删除操作(Leetcode 583)

题目链接 动态规划 思路&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结尾的字符串word2&#xff0c;想要达到相等&#xff0c;所需要删除元素的最少次数。 确定递推公式 当…