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

发布时间:2026/7/17 15:11:37

如何扩展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/7/17 15:01:36

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

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

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

2026/7/17 15:01:36

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

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

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

2026/7/17 15:01:36

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

电商设计师求职进阶:从简历包装到面试谈薪,高薪offer实战指南

电商设计师求职进阶:从简历包装到面试谈薪,高薪offer实战指南

2026/7/17 16:41:40

# 电商设计师求职进阶:从简历包装到面试谈薪,高薪offer实战指南## 引言在电商行业竞争白热化的今天,设计师的求职早已不是“会PS就能拿offer”的时代。HR和设计总监每天浏览成百上千份简历,如何在3秒内抓住眼球?作品集…

AI手机自动打金:单日50+稳定收益,千人经验共享,批量矩阵操作指南

AI手机自动打金:单日50+稳定收益,千人经验共享,批量矩阵操作指南

2026/7/17 16:41:40

# AI全自动手机打金:单日50稳定收益,千人经验共享,批量矩阵操作指南在手游经济蓬勃发展的今天,通过游戏内资源获取收益的“打金”行为已从纯手工操作演变为技术驱动的自动化流程。本文将深入探讨一种基于AI技术的全自动手机打金方…

勋章!生物信息学6大技术时代

勋章!生物信息学6大技术时代

2026/7/17 16:41:40

要点生物信息学历经75年演变,各技术时代均由生物数据指数增长、计算革新共同驱动;每代技术降低使用门槛,同时带来透明度、可信度、严谨性新问题。本文按时间划分6大技术时代:命令行、图形界面与DNA测序、大数据与互联网…

90分钟实战:用AI写手自动生成广告、销售邮件与落地页

90分钟实战:用AI写手自动生成广告、销售邮件与落地页

2026/7/17 16:41:40

# 90分钟实战:用AI写手自动生成广告、销售邮件与落地页在内容营销日益激烈的今天,企业需要快速产出高质量文案来抢占用户注意力。然而,聘请专业文案写手成本高昂,内部团队又常面临创意枯竭的困境。本文将介绍如何利用AI写作工具&a…

Python Ray 分布式计算:从单机到集群的 AI 任务调度升级

Python Ray 分布式计算:从单机到集群的 AI 任务调度升级

2026/7/17 16:41:40

Python Ray 分布式计算:从单机到集群的 AI 任务调度升级 一、单机训练 8 小时,集群 40 分钟——为什么要分布式 一个图文模型的微调任务,单机 A100 要跑 8 小时。数据预处理(图片解码、裁剪、归一化)占了一半时间。问题…

【2026最新】网络安全从0到进阶教程,看这篇就够了!

【2026最新】网络安全从0到进阶教程,看这篇就够了!

2026/7/17 16:31:40

前言:想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客!1.什么是网络安全1.1 网络安全的定义: 网络安全指网络系统中的硬件、软件以及系统中的数据受到保护,不因偶然或恶意的原因…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/17 10:50:47

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/16 14:29:31

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/16 14:18:17

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

2026/7/17 0:00:57

更多请点击: https://intelliparadigm.com 第一章:Cursor终端插件生态避坑指南概览 Cursor 作为基于 VS Code 内核构建的 AI 原生编辑器,其终端插件生态虽活跃,但存在兼容性断层、权限策略突变与调试链路断裂等典型风险。开发者常…

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

2026/7/17 0:00:57

更多请点击: https://codechina.net 第一章:ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 提示词工程已从经验试错迈入变量驱动的科学阶段。实证研究表明,影响…

DeepSeek V4替换Codex底座模型的实践与优化

DeepSeek V4替换Codex底座模型的实践与优化

2026/7/17 0:00:57

1. 为什么选择用DeepSeek V4替换Codex的底座模型去年我在开发一个智能代码补全工具时,发现Codex的默认底座模型在复杂业务逻辑场景下表现不尽如人意。经过多次测试对比,DeepSeek V4在以下几个关键指标上展现出明显优势:代码补全准确率&#x…