如何扩展Agith:添加自定义eBPF探针与监控规则

发布时间:2026/9/29 0:48:31

如何扩展Agith:添加自定义eBPF探针与监控规则
如何扩展Agith添加自定义eBPF探针与监控规则【免费下载链接】Agithlinux command influence analysis项目地址: https://gitcode.com/openeuler/Agith前往项目官网免费下载https://ar.openeuler.org/ar/Agith是一款基于eBPF技术的Linux命令影响分析工具能够通过追踪系统调用和进程行为构建完整的系统行为依赖图。本文将详细介绍如何为Agith添加自定义eBPF探针与监控规则帮助用户根据实际需求扩展工具的监控能力。Agith系统架构概览Agith采用模块化设计核心由eBPF探针、数据收集和分析引擎组成。系统架构如图所示从架构图可以看到eBPF Probes负责在 kernel 层收集系统调用和进程行为数据通过 Traces 传输到用户空间的 Consumer 组件经 Controller 处理后存储到 Repository。这种分层设计使得添加自定义探针变得简单灵活。自定义eBPF探针开发步骤1. 准备开发环境首先需要克隆Agith项目代码git clone https://gitcode.com/openeuler/AgitheBPF探针开发需要依赖libbpf库和clang编译器。项目已提供相关配置可通过以下命令安装依赖sudo apt-get install clang libbpf-dev2. 创建eBPF程序文件在src/BPF/目录下创建新的eBPF程序文件例如custom_probe.c。该文件将包含探针逻辑和事件处理代码。eBPF程序基本结构如下#include vmlinux.h #include bpf/bpf_helpers.h #include bpf/bpf_tracing.h #include maps.h // 定义事件结构体 struct custom_event { u32 pid; u32 uid; char comm[16]; // 添加自定义字段 }; // 定义共享映射 struct { __uint(type, BPF_MAP_TYPE_RINGBUF); __uint(max_entries, 1 24); } events SEC(.maps); // 定义探针函数 SEC(tracepoint/syscalls/sys_enter_execve) int tracepoint__syscalls__sys_enter_execve(struct trace_event_raw_sys_enter *ctx) { // 事件收集逻辑 struct custom_event *e; e bpf_ringbuf_reserve(events, sizeof(*e), 0); if (!e) return 0; e-pid bpf_get_current_pid_tgid() 32; e-uid bpf_get_current_uid_gid() 32; bpf_get_current_comm(e-comm, sizeof(e-comm)); // 添加自定义数据收集逻辑 bpf_ringbuf_submit(e, 0); return 0; } // 许可证声明 char LICENSE[] SEC(license) GPL;3. 修改CMakeLists.txt编辑src/BPF/CMakeLists.txt文件添加新创建的eBPF程序到编译列表add_library(custom_probe OBJECT custom_probe.c) target_compile_options(custom_probe PRIVATE -target bpf -D__TARGET_ARCH_x86_64) set_target_properties(custom_probe PROPERTIES OUTPUT_NAME custom_probe.o)4. 实现用户空间数据处理在src/model/Consumer.cpp中添加新事件的处理逻辑解析从eBPF探针发送的数据// 添加自定义事件处理函数 int Consumer::handle_custom_event(void *data, size_t data_sz) { struct custom_event *e (struct custom_event *)data; // 处理事件数据例如存储到数据库或构建影响图 log_info(Custom event: pid%d, comm%s, e-pid, e-comm); // 调用Repository接口保存数据 m_repo-add_custom_event(e); return 0; }配置监控规则1. 修改配置文件编辑config/agith.config文件添加自定义探针配置{ bpf: { path: bpf, probes: [ file.o, process.o, socket.o, custom_probe.o // 添加自定义探针 ] }, monitor: { custom_rules: [ { name: high_cpu_process, condition: cpu_usage 80, action: log_alert } ] } }2. 实现规则引擎在src/model/Monitor.cpp中实现监控规则检查逻辑// 添加规则检查函数 void Monitor::check_custom_rules(ProcessNode *node) { for (auto rule : m_custom_rules) { if (rule.name high_cpu_process) { if (node-cpu_usage 80) { log_alert(High CPU usage: %s (pid%d), usage%.2f%%, node-comm.c_str(), node-pid, node-cpu_usage); } } // 添加更多规则检查 } }编译与测试1. 编译项目使用CMake编译修改后的项目mkdir build cd build cmake .. make -j42. 运行测试用例Agith提供了完善的测试框架可在test/case/目录下添加自定义测试用例例如创建test/case/custom/test.sh#!/bin/bash # 启动Agith ../agith --config ../../config/agith.config AGITH_PID$! # 执行测试命令 ls -l /tmp sleep 1 # 停止Agith kill $AGITH_PID运行测试并查看结果cd test/case/custom ./test.sh测试结果可通过生成的CPU和内存使用图表查看例如结果可视化Agith会将收集到的数据构建成系统影响图可通过查看doc/impact_example.png了解效果该图展示了进程间的调用关系和系统资源使用情况自定义探针收集的数据会以新的节点和边的形式添加到图中。总结通过本文介绍的方法您可以轻松扩展Agith的eBPF探针和监控规则。关键步骤包括创建eBPF程序文件、修改编译配置、实现数据处理逻辑、配置监控规则以及进行测试验证。这种扩展方式保持了Agith原有的模块化设计同时为用户提供了灵活定制的能力。如果需要更多帮助可以参考项目中的示例探针代码src/BPF/file.c、src/BPF/process.c和监控规则配置config/agith.config。【免费下载链接】Agithlinux command influence analysis项目地址: https://gitcode.com/openeuler/Agith创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

VagrantPress高级配置:自定义域名、IP和资源分配的实用指南

VagrantPress高级配置:自定义域名、IP和资源分配的实用指南

2026/8/23 0:04:05

VagrantPress高级配置:自定义域名、IP和资源分配的实用指南 【免费下载链接】vagrantpress A WordPress Development Environment With Vagrant/Puppet 项目地址: https://gitcode.com/gh_mirrors/va/vagrantpress 想要打造一个完全符合你需求的WordPress开发…

影刀RPA 数据统计基础:均值中位数与分位数

影刀RPA 数据统计基础:均值中位数与分位数

2026/9/28 6:15:38

影刀RPA 数据统计基础:均值中位数与分位数 作者:林焱 什么情况用什么 拿到一批数据,需要快速了解数据概况——平均工资多少、中位数是多少、最高的10%和最低的10%差多少、数据是否偏斜。在影刀RPA里用pandas的统计函数可以一键生成描述性统计…

Ansible Playbook 基础与流程控制--006篇

Ansible Playbook 基础与流程控制--006篇

2026/8/25 15:30:48

文章目录 交付一:企业级 Nginx Role —— HTTPS & 证书管理增强版 ✅ 一、设计目标(企业视角) 二、新增目录结构 三、defaults/main.yml(对外暴露) 四、tasks/ssl.yml(核心逻辑) 五、templates/ssl_params.conf.j2(安全复用) 六、增强后的 vhost.conf.j2(HTTP/HT…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/28 16:01:49

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/28 16:01:48

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/28 16:01:48

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…