当前位置: 首页 > 科技观察

Linux系统行为实时监控新技术

时间:2023-03-22 11:18:38 科技观察

万物互联和大数据技术的发展让我们的生活更加热闹,离不开一个安全、稳定、可靠的服务器系统。为了保证服务器系统资源能够被用户正常使用,避免被恶意行为劫持,我们需要记录服务器系统资源的使用情况、系统行为事件信息、I/O流量,为运行提供信息服务器系统的维护和安全。可靠的数据支持。这里主要分享一个系统,可以满足在线部署,进程或文件的创建,网络连接,网络I/O,文件I/O,shell操作,数据库操作,telnet操作,httpLinux行为监控技术收集和存储系统-实时访问、系统调用(syscall)和系统资源信息等相关行为信息。传统监控技术现有系统行为监控的实现技术主要采用以下几种方法:1.LinuxKprobes调试技术Kprobes调试技术是专门为Linux内核跟踪调试而设计的API。Kprobes允许内核开发人员为任何内核指令安装预处理器和后处理器,以及可以访问和更改寄存器的函数入口和函数返回处理程序。这允许内核开发人员监控系统调用相关的工作流程和簿记。使用Kprobes技术,内核开发者可以在内核的大部分指定函数中动态插入探测点,以收集所需的调试状态信息;correctandwhataretheinputparametersandreturnvaluesofthefunction”等疑惑可以轻松解决。另外,这些信息可以输出到屏幕或dump到日志文件。2.Tracepoints(跟踪点)技术Linuxkernel内核的tracepoint是一种轻量级的hooks技术,利用高效的系统调用行为跟踪和相关的性能计算,对系统本身的性能只损失很小的时间和空间。通过注册自定义探测函数如syscall_enter_probe,发生系统调用相关行为后,内核找到探测函数,将参数等信息传递给探测函数,只要输出探测函数中记录的相关行为信息,即可达到监控目的。在现有的Linux系统行为监控工具中,使用LinuxKprobes调试技术和Linux内核跟踪点(tracepoints)技术的工具有:strace,ftrace,tcpdump,lsof,htop,iftop,systemTap,perf...以上工具通常都可以仅作为日常内核开发调试或日常运维分析的工具使用。主要用于开发调试或问题定位等简单的信息输出。但是这些工具在使用上都存在一些缺陷,归纳起来有以下几点:1.只适合内核开发人员调试或者运维人员现场调试。每个工具都有不同的特点,很难满足对系统进行全面监控的需要。2.没有为行为数据提供良好的存储能力,仅提供简单的输出或日??志存储。由于没有数据缓存功能,容易造成行为数据丢包,不能很好地支持事后数据回放或分析。3、无法实时部署线上运营,只能在活动结束后或活动中开启,无法满足运维或安全监控的自动化要求。在高吞吐量、高并发的服务器上,增加了服务器运行的负担。新型实时监控缓存技术解决方案针对现有技术不能满足在线实时部署、影响服务器性能、行为数据没有很好的存储和缓存功能的缺点,我们将与大家分享一个技术解决方案具有实时监控和缓存功能。该方案主要采用层次结构模型进行构建,具体分为内核探测层、基于内存映射mmap技术的缓冲层和基于本地数据库的用户态缓存层。具体结构如下图所示:业务流程描述下面以系统行为事件信息收集-缓存的具体例子来说明三层之间的业务流关系:首先,当用户发起网络连接服务主机运行后,服务宿主系统的socketaccpet系统调用会被中断,服务进程会进入内核态,进入系统调用例程。其次,通过Linux内核tracepoints机制,内核搜索系统调用tracepoint的探测函数;此时内核找到已经挂载的内核探测层的探测函数,将相应的accpet系统调用参数信息传递给探测函数。接下来,内核探测层的探测函数将传入的系统调用相关信息进行分类序列化,然后将相关参数信息转换为系统行为事件信息写入mmap缓冲层。最后,用户态缓存层进程通过mmap映射技术从mmap缓冲层中读取具体的系统行为事件信息,将系统行为事件信息重新格式化为便于读取和分析的字符串信息,并选择一个本地或分布式一种缓存技术,用于持久存储系统行为事件信息。通过以上业务流程的分析,可以总结出以上三层的主要作用是:内核探测层收集系统调用信息,mmap缓冲层转换系统行为事件信息,用户态缓存层持久化系统行为事件信息。如下图所示:由上可知,该方案与目前已有的工具或方案的主要区别在于,该方案体现了以下两个方面:实时性和缓存持久化。实时“实时”是指可以实时感知系统运行行为(系统调用)信息,并“零丢失”地采集信息。我们知道,系统行为信息的收集是由“内核探测层”完成的,它主要利用了Linux内核字符设备驱动技术+Linuxtracepoints机制。通过开发Linux内核字符设备驱动来驱动probe模块,probe模块中挂载tracepoint函数,用于收集每次系统调用的相关信息。为了实现系统调用信息从内核探测层到用户态缓存层的“零拷贝”高效传递,探测中采用了Linux内核驱动与用户态进程地址共享的mmap缓冲区技术方案层和用户态缓存层。CachePersistence内核探测层收集的系统行为事件信息存储在mmap缓冲层。为了实时高效地持久化和存储这些事件信息,本方案采用开源高效的本地文件数据库引擎,占用资源。更少,无需安装和管理配置,数据吞吐率可达每秒数万条记录。这样一个轻量级的持久化模块,可以以“零损失”的方式部署到在线服务器上,不占用服务器资源。系统行为事件信息从mmap缓冲层读取,一些数据处理和分析,如格式化、过滤等,可以根据具体的业务需求在用户态缓冲层进行。最后存入文件数据库,实现系统行为事件信息的持久化缓存。具体流程如图:如需转载,请注明原文地址。