与此同时,Sequence_Collector 通过可视化 CPU 运行时间,展示容器内各个进程或线程的 CPU 、内存使用情况。通过时间序列图,用户可以观察到 CPU 使用率随时间的变化趋势,识别出系统负载的峰值和异常波动。通过颜色深浅直观展示了各进程或线程在特定时间段内的 CPU 占用情况,帮助识别资源消耗集中的进程或线程。使得容器内的异常行为和性能瓶颈一目了然,从而优化容器的整体性能并保障系统的稳定性。
sudo ./controller -h
Usage: ./controller [options]...
-a|--start <func> activate a func
-d|--stop <func> deactivate a func
-s|--status show status of funcs
-p|--add <cid> add a container id to be monitored
-r|--rm <cid> rm a container id
-l|--ls ls id of monitered container
-b|--dump <func> dump data buffer of a func
-t|--trace <pid>,<tid> trans a tid to symbol trace
-h|--help show help information
sudo tree /sys/fs/bpf 查看已经加载成功的BPF程序,如下所示,所有的bpf程序均被加载。
基于eBPF的容器异常检测
.s
to.o
)kubernetes
部署gpass
部署(暂未实现)efk
部署monitor
部署gpass
ansible
容器化kubectl get pods
to see pods are in a ready state项目简介
项目名称:基于ebpf的容器异常检测
项目描述:
Sequence_Collector
是一款基于 eBPF 技术的容器异常检测数据采集工具,专为深入监控容器内的行为特征及相关性能指标而设计,帮助用户及时发现潜在的安全威胁和性能瓶颈。它通过捕获系统调用(如execve
、read
、write
)、网络通信行为(如sendto
、recvfrom
和 TCP 连接)以及内存管理操作(如malloc
、calloc
、realloc
),实现对容器内关键活动的细粒度监控。Sequence_Collector
利用线程 ID 追踪调用栈信息,能够快速定位每个线程在异常发生时的执行路径,精确识别导致性能瓶颈或系统错误的代码段。此外,该工具还监测进程运行时间、调度行为和 CPU 使用情况,确保容器内资源得到高效利用。通过与 Prometheus 和 Grafana 的集成,Sequence_Collector
可以收集容器中运行进程的相关数据,并在 Grafana 中实现可视化,能够实时查看容器的运行状况和异常行为,并通过自定义仪表盘轻松分析系统性能,进而优化性能并保障系统的稳定性。这里通过python的pyod库对采集数据的异常检测效果进行测试,来展示所采集数据的有效性。目标描述
本项目由三部分组成:
ebpf
自动收集容器相关元信息,并和多种指标相结合,判断异常容器行为。Sequence_Collector
集成于prometheus
和Grafana
,自动收集容器指标并实现各种数据的汇总展示以及异常容器检测时的分析流程展示。项目进度
截止初赛, 本队项目完成进度如下:
截至决赛阶段目标
功能扩充:在现有基础上,进一步扩展
Sequence_Collector
的功能,新增对容器内文件访问行为的监控,采集文件读写操作的详细指标,更精确地追踪和分析容器内的文件操作。同时,增强容器网络监控能力,增加对 TCP 流量的深入分析,采集更多的网络流量指标,以更全面地监控容器内部的网络通信行为,确保容器环境的安全性和稳定性。算法优化:通过对比现有的容器异常检测算法,选择更为合适的算法进行集成,提升在容器化环境中的异常检测准确性和效率。结合容器实际运行中的监控数据,测试和优化不同算法的表现,确保在各种复杂和高负载的容器场景下,
Sequence_Collector
都能有效识别和报告异常行为,保障容器的运行安全。工具集成与优化:进一步优化
Sequence_Collector
工具,使其在高负载容器环境中仍能保持高效运行,并减少对容器性能的影响。同时,将工具与现有的容器监控和日志管理系统(如 ELK Stack )深度集成,提供更加直观的容器异常分析和可视化能力,能够实时监控和诊断容器内的潜在问题,提升容器的整体管理效率。截止决赛, 本队项目完成进度如下:
项目设计
本项目整体架构图如上图所示,项目主要由5个部分组成,分别是 loader、controller、exporter、detector以及Alert Manager。
项目优势
Sequence_Collector
能够精确地采集和监控多个容器中的特定指标,提供详细的性能和行为数据。Sequence_Collector
能够采集从容器级别到进程级别再到调用栈级别的细粒度数据,并捕获各层级之间的关系信息,提供全面的监控视角。异常监测
支持对性能指标序列、调用栈序列、系统调用序列进行异常检测,有助于尽早发现容器内的性能异常或者容器异常。
如仅使用内存分配释放大小的时间序列,在根据业务场景推算出合适的序列向量化长度后,使用pyod中的iForest算法检测出的非业务程序造成的内存分配异常如下:
其中标红的点即为异常点。当出现与平常业务不符的内存分配行为时会被准确检测到,并获取其pid和调用栈,可执行文件路径信息。
可视化展示
Sequence_Collector
通过捕获和分析每个线程的调用栈信息,将其转化为直观的图形化展示,展示形式为火焰图、折线图等。这些图表不仅展示了函数调用的层级关系和执行路径,还通过颜色和条块宽度等方式直观呈现函数调用的频率和持续时间。当容器内发生异常时,调用栈可视化能够帮助用户精确定位异常发生的具体函数和调用路径,快速识别导致问题的代码段,便于及时排查和解决异常。prometheus可视化端
pyroscope可视化端
flamegraph
与此同时,
Sequence_Collector
通过可视化 CPU 运行时间,展示容器内各个进程或线程的 CPU 、内存使用情况。通过时间序列图,用户可以观察到 CPU 使用率随时间的变化趋势,识别出系统负载的峰值和异常波动。通过颜色深浅直观展示了各进程或线程在特定时间段内的 CPU 占用情况,帮助识别资源消耗集中的进程或线程。使得容器内的异常行为和性能瓶颈一目了然,从而优化容器的整体性能并保障系统的稳定性。grafana集成可视化端
性能测试图
数据结构简单,处理方便,性能消耗非常微小。
controller消耗
prometheus exporter消耗
loader消耗
项目运行
从gitlab上clone本项目,注意,需要添加
--recursive
以clone子模块运行编译命令
编译完成后的所有可执行文件均会出现,运行eBPF程序预加载器
具体的命令行操作方法可以使用
sudo tree /sys/fs/bpf 查看已经加载成功的BPF程序,如下所示,所有的bpf程序均被加载。
使用技巧
工具使用详情参考
./docs/
目录下的文件