本文档为决赛报告的目录,包含了主要的设计思路和创新点展示,以及一些比赛的相关信息。细节实现部分请参考每个部分列举的附加文档。
网站上的代码文档部分采用 doxygen 自动生成,因此不存在过时问题,但图片链接有些小问题。可以结合网站进行阅读: https://yunwei37.github.io/Eunomia/
Eunomia
是一个使用 C/C++ 开发的基于 eBPF的轻量级,高性能云原生监控工具框架,旨在帮助用户了解容器的各项行为、监控可疑的容器安全事件,力求提供覆盖容器全生命周期的轻量级开源监控解决方案。
它使用 Linux
eBPF
技术在运行时跟踪您的系统和应用程序,并分析收集的事件以检测可疑的行为模式。目前,它包含性能分析、容器集群网络可视化分析*、容器安全感知告警、一键部署、持久化存储监控等功能,提供了多样化的 ebpf 追踪点,并可以轻松拓展。其核心导出器/命令行工具最小仅需要约 4MB 大小的二进制程序,即可在支持的 Linux 内核上启动。
- 开箱即用:以单一二进制文件或镜像方式分发,一次编译,到处运行,一行代码即可启动,包含多种 ebpf 工具和多种监测点,支持多种输出格式(json, csv, etc) 并保存到文件;
- 轻量级,高性能:编译成的二进制大小仅
4MB
; - 通过
ebpf
自动收集容器和 k8s 相关元信息,并和多种指标相结合; - 可集成
prometheus
和Grafana
,作为监控可视化和预警平台;也可作为OpenTelemetry
的 collector 使用; - 可自定义运行时安全预警规则, 并通过 prometheus 等实现监控告警;
- 可以自动收集进程行为并通过
seccomp
/capability
进行限制; - 提供远程的 http API 进行控制,实现 ebpf 跟踪器的热插拔、一键分发和热更新,也可自行定制插件进行数据分析;
- 其核心框架高度可扩展,可以非常轻松地集成其他的 libbpf ebpf C 程序;
请参考:容器监控工具赛题调研.md
请参考:云原生可观测性工具调研.md
请参考:系统框架与ebpf探针设计.md
请参考:容器追踪模块设计.md
请参考:安全告警规则设计.md
请参考:ebpf追踪器跟踪点设计.md
- 文档网站:使用 doxygen 部署 https://yunwei37.github.io/Eunomia/
- eBPF介绍与 libbpf 基础教程
- ebpf 跟踪器源码解析与使用教程
-
如何设计高效的,可扩展的数据结构来支持我们的 Eunomia 框架?
- 在用户态提供了一套统一的 handler 和处理流水线机制,以及 tracker 接口;
- 请参考:系统框架与ebpf探针设计.md
-
如何做到高效、轻量级?
- 基于 C/C++ 和 libbpf
- 使用现代的C++标准,给编译器提供更强的优化语义;
- 使用了 LTO(链接时优化),以编译时间为代价降低二进制大小并提升性能;
- 性能优化请参考:性能优化和benchmark.md
-
如何做到轻松接入新的 libbpf ebpf 追踪器程序?
- 在初赛之后,我们增强、完善了一下 eunomia 的追踪器框架部分,提供了更通用的接口;
- 除了旧的使用多线程运行的检查器之外,新增的检查器可以选择使用多线程运行,并且通过字符串参数控制;
- 关于如何添加新的检查器,请参考:如何添加新的检查器.md
-
如何感知容器中进程的执行,将进程信息和容器元信息进行关联?
- 我们在进程追踪器的基础上额外获取了进程的 cgroups、namespace 等信息,并且通过 docker API/k8s API 和容器信息相关联;
- 请参考:容器追踪模块设计.md
-
如何实现 ebpf 追踪器通过 http API 的热插拔、分发和热更新?
- 分发和热更新, 请参考 ebpf代码热更新实现原理.md
- 可插拔:我们使用统一的 tracker manager 进行管理,启动和退出; server 和 tracker manager 进行交互。请参考:http-API-文档.md,
-
使用了什么策略来保证 C/C++ 开发的 Eunomia 追踪器的稳定性?为什么不用 rust?
- 启用了 github CI 进行自动构建, 并使用了大量的静态分析和动态分析工具,如 clang tidy、cppcheck、AddressSanitizer、Clang Static Analyzer 等来保证代码质量和风格;
- rust 的安全性更强,但是 libbpf 绑定落后于 libbpf 主线开发进程,并且生态较少;
- 功能测试请参考:测试.md
- 性能测试请参考:性能优化和benchmark.md
请参考:目录结构.md
请参考:比赛和项目进展相关其他资料.md
请参考:参考资料.md
请参考:使用手册.md
请参考:http-API-文档.md
请参考:开源集成.md
请参考:OSPP开源项目申请书-基于 ebpf 的性能分析工具.md
请参考:develop_doc