解决好公司的好问题,一直是自己从业的准则,我认为这是一件十分幸福的事情。

一、定位问题

datadog system-probe 模块打开network-tracer后出现问题:

ERROR | (cmd/system-probe/api/module/loader.go:60 in Register) | new module `network_tracer` error: error guessing offsets: could not load bpf module for offset guessing: load BTF maps: section .maps: map tracer_status already exists

offset-guess.o 模块是偏移量猜想的一个模块,我估计datadog这么做的原因是处于linux内核兼容性的原因,但是这种兼容性的代码为什么会在这里出现问题呢?

查找代码位置,出现问题位置:

 if err := ec.loadBTFMaps(maps); err != nil {return nil, fmt.Errorf("load BTF maps: %w", err)}

loadBTFMaps

            v, ok := vs.Type.(*btf.Var)if !ok {return fmt.Errorf("section %v: unexpected type %s", sec.Name, vs.Type)}name := string(v.Name)// The BTF metadata for each Var contains the full length of the map// declaration, so read the corresponding amount of bytes from the ELF.// This way, we can pinpoint which map declaration contains unexpected// (and therefore unsupported) data._, err := io.Copy(internal.DiscardZeroes{}, io.LimitReader(rs, int64(vs.Size)))if err != nil {return fmt.Errorf("section %v: map %s: initializing BTF map definitions: %w", sec.Name, name, internal.ErrNotSupported)}if maps[name] != nil {return fmt.Errorf("section %v: map %s already exists", sec.Name, name)}

会发现出现这个问题是因为btf里面的ebpf的.maps 出现了两次,那么我进一步定位elf文件看下里面的.maps情况

readelf -x .maps -r  /opt/datadog-agent/embedded/share/system-probe/ebpf/offset-guess.o

发现.maps出现了两次,正常情况下不应该这样

Hex dump of section '.maps':0x00000000 00000000 00000000 00000000 00000000 ................0x00000010 00000000 00000000 00000000 00000000 ................0x00000020 00000000 00000000                   ........Hex dump of section '.maps':0x00000000 00000000 00000000 00000000 00000000 ................0x00000010 00000000 00000000 00000000 00000000 ................0x00000020 00000000 00000000                   ........

定位到出问题的文件是/opt/datadog-agent/embedded/share/system-probe/ebpf/offset-guess.o

进一步这个文件出问题的阶段可能是在编译时期,那么我们回顾ebpf 模块的整个编译周期,发现有一个错误出现了

[19/33] clang -MD -MF pkg/ebpf/bytecode/build/offset-guess-debug.bc.d -emit-llvm -D__KERNEL__ -DCONFIG_64BIT -D__BPF_TRACING__ -DKBUILD_MODNAME=\"ddsysprobe\" -Wno-unused-value -Wno-pointer-sign -Wno-compare-distinct-pointer-types -Wunused -Wall -Werror -include pkg/ebpf/c/asm_goto_workaround.h -O2 -fno-stack-protector -fno-color-diagnostics -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-jump-tables -fmerge-all-constants -Ipkg/ebpf/c -isystem/usr/src/linux-headers-5.15.0-52-generic/include -isystem/usr/src/linux-headers-5.15.0-52-generic/include/uapi -isystem/usr/src/linux-headers-5.15.0-52-generic/include/generated/uapi -isystem/usr/src/linux-headers-5.15.0-52-generic/arch/x86/include -isystem/usr/src/linux-headers-5.15.0-52-generic/arch/x86/include/uapi -isystem/usr/src/linux-headers-5.15.0-52-generic/arch/x86/include/generated -Ipkg/network/ebpf/c -g -DDEBUG=1 -c pkg/network/ebpf/c/prebuilt/offset-guess.c -o pkg/ebpf/bytecode/build/offset-guess-debug.bc
[20/33] cd pkg/network/http && CC=clang go tool cgo -godefs -- -fsigned-char http_types.go | go run /home/zhanglei/data/datadog-agent/pkg/ebpf/cgo/genpost.go > http_types_linux.go
cgo-builtin-prolog:1:10: fatal error: 'stddef.h' file not found
#include <stddef.h> /* for ptrdiff_t and size_t below */

看到这个错误一切就变得非常简单了,意味着clang 版本很低和操作系统并不兼容,因为data-dog依赖genpost生成cgo文件,用于运行时编译

datadog里面的system-probe 使用的clang版本是12明显和主机的不兼容,断定关键点的位置:

    if clang_version_str != CLANG_VERSION:# download correct version from dd-agent-omnibus S3 bucketclang_url = f"https://dd-agent-omnibus.s3.amazonaws.com/llvm/clang-{CLANG_VERSION}.{arch}"ctx.run(f"{sudo} wget -q {clang_url} -O /opt/datadog-agent/embedded/bin/clang-bpf")ctx.run(f"{sudo} chmod 0755 /opt/datadog-agent/embedded/bin/clang-bpf")if llc_version_str != CLANG_VERSION:llc_url = f"https://dd-agent-omnibus.s3.amazonaws.com/llvm/llc-{CLANG_VERSION}.{arch}"ctx.run(f"{sudo} wget -q {llc_url} -O /opt/datadog-agent/embedded/bin/llc-bpf")ctx.run(f"{sudo} chmod 0755 /opt/datadog-agent/embedded/bin/llc-bpf")

datadog运行的clang版本是12,但是和我主机不兼容

二、解决问题

我是ubuntu系统,所以我只需要安装和我主机兼容的clang 和llvm版本就行了

apt install clang

我安装的是clang-14,所以我需要把/usr/bin下面的clang 替换为和我的主机兼容的

cp /usr/bin/clang-14 /usr/bin/clang

重新编译datadog的system-probe模块

invoke system-probe.build

发现没有任何报错,再次运行system-probe ,没有任何报错,发现ebpf层的网络数据可以正常采集了

datadog ebpf模块 offset-guess.o 问题排查解决相关推荐

  1. 使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题)

    使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题) 参考文章: (1)使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题) (2)https://www.cn ...

  2. springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题

    springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题 参考文章: (1)springboot集成swagger2多模块中文配 ...

  3. Python中import导入上一级目录模块及循环import问题的解决

    Python中import导入上一级目录模块及循环import问题的解决 参考文章: (1)Python中import导入上一级目录模块及循环import问题的解决 (2)https://www.cn ...

  4. Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决

    Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决 参考文章: (1)Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决 (2)https://www.cnblog ...

  5. Java进程占用内存过高,排查解决方法

    Java进程占用内存过高,排查解决方法 参考文章: (1)Java进程占用内存过高,排查解决方法 (2)https://www.cnblogs.com/eeexu123/p/10913389.html ...

  6. Redis性能问题排查解决手册(值得收藏)

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:今天给大家推荐 6 个 Spring Boot 项目,拿来就可以赚钱! 个人原创100W+访问量博客:点击前往, ...

  7. Pycharm中无法导入各种Python模块,pip不能更新的解决办法

    一.Pycharm中无法导入各种Python模块,pip不能更新的解决办法 1.先用python -m pip uninstall pip 将之前版本的pip卸载 2.在官网上下载pip压缩包,记得下 ...

  8. Redis性能问题排查解决手册(七)

     阅读目录: 性能相关的数据指标 内存使用率used_memory 命令处理总数total_commands_processed 延迟时间 内存碎片率 回收key 总结 性能相关的数据指标 通过Red ...

  9. Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续)

    Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续) 参考文章: (1)Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续) (2)https://www. ...

最新文章

  1. 零基础入门学习Python(26)-文件1
  2. 一群热爱python运维的精英们!
  3. VC6.0下opencv1.0的环境配置
  4. 【OpenCV 例程200篇】01. 图像的读取(cv2.imread)
  5. 浅析ASP.NET 2.0的用户密码加密机制
  6. powerpoint(ppt) 的制作
  7. Linux 常用解压缩命令
  8. linux ns级定时器_linux 用户空间获得纳秒级时间ns
  9. gimp 抠图_gimp软件如何实现抠图?
  10. LaTex 论文排版(1): Win10 下 LaTex所需软件安装 (Tex live 2018 + Tex studio)
  11. 微信小程序input组件里,自动聚焦focus没反应
  12. 2019最新第三方支付牌照公司名单「完整」
  13. 怎样将vob格式转换成avi高清视频格式
  14. android辅助功能失效,如果其他应用的辅助功能服务处于开启状态,则Android无障碍服务无法正常工作...
  15. html如何设置提示收到消息,从零开始实现一个消息提示框
  16. 关于示波器探头的输入容抗问题解决
  17. 那些年,我开发过的软件
  18. python代码画大白_Python turtle 画个大白
  19. tar .........
  20. 交通银行上海分行信息部总经理吴宇:大数据助力”互联网+金融”发展

热门文章

  1. 线程池、volatile、原子性、并发工具类
  2. python 十进制转二进制
  3. Scratch案例——切西瓜
  4. (附源码)springboot奖助学金评审系统 毕业设计 031035
  5. Ubuntu 14.04 LTS 安装配置搜狗拼音输入法
  6. Kubernetes 污点与容忍
  7. java计算机毕业设计教务管理系统源程序+mysql+系统+lw文档+远程调试
  8. 电脑网络正常,浏览器无法打开怎么办?
  9. 如何解决flex:1撑开父元素问题
  10. 大华摄像头,NVR取流规则