高性能的Syslog日志处理和存储方法

文档序号:7653040阅读:372来源:国知局
专利名称:高性能的Syslog日志处理和存储方法
技术领域
本发明是一种高性能的Syslog日志处理和存储方法,涉及计算机系统集成及应用技术,尤其涉及网络信息安全中的syslog日志的处理和存储技术。

背景技术
随着网络环境规模的日益扩大,网络中各种设备的数量急剧增加,来自外部和内部的各种安全和攻击也在急剧增加,威胁着网络信息安全,因此安全审计变的极为重要,各种设备的日志记录了设备运行状态,各类用户执行的操作等等详细信息。在目前的网络环境中,各种设备的日志已经成为海量数据,syslog作为主要的日志类型,被各种操作系统,网络设备和安全设备广泛支持,成为日志的重要标准,对于其他类型的日志,也可以转换为syslog日志格式,便于统一分析。
由于目前的日志量极大,因此如何有效地进行处理和存储变得极为重要,在一个中型的企业中,一天的日志量可以达到几十G,而一般要求这些日志至少保持3个月,那么在一个安全审计系统中,这些日志的处理和存储成为最基础和最重要的一环。
另外由于日志量极大,对于日志的处理和接收也提出了严重的课题,因为在安全审计系统中需要对日志进行格式归一化,才能够对日志进行规则处理分析,由于目前的日志分析技术基本比较完善,性能提高的可能幅度不大,如果存在大量的规则,处理分析的时间占用不可避免,成为制约日志处理的瓶颈,但是靠单纯提高分析性能已经无法起到显著的作用。
传统的日志处理和存储技术一般采用日志文件和数据库,这两种方法各有利弊 日志文件存储快,管理方便,但是查询性能较差,由于没有索引,查询效率比较低,不便于对日志进行查询和分析。
数据库存储对数据库要求高,需要采用昂贵的商业数据库,价格高,存储速度比较慢,管理复杂,但是查询性能好,便于进行查询和分析。
因此需要找到一种更高效率的处理和存储方式,满足海量日志处理和存储的需求。


发明内容
本发明的目的正是针对现在技术中存在的问题而设计提供了一种高性能的Syslog日志处理和存储方法,该方法可以大幅度地提高日志的处理速度,同时可以很方便地进行查询和分析。本发明方法的日志处理速度可以达到6000条/秒以上。为此,本发明技术方案结合了数据库和日志文件的优点,采用异步日志处理和并发日志存储技术,这两个环节相互相承,有机协调地应对日志总量和日志并发量的问题,利用空间换时间,极大地提高了日志处理能力。
异步日志处理技术是本发明技术方案的核心,并发日志存储技术是配合的手段和补充,如果仅仅有异步日志处理技术,没有存储的技术保障,仍然不能发挥异步处理的优势,还可能造成缓存日志写满后不能及时记录和存储。
异步日志处理技术是指非阻塞的处理方式,基本原理是采用不同的线程分别进行接收和处理操作,一个线程负责接收日志,将日志写入缓存队列,一个线程负责处理日志,从缓存队列中读取日志进行处理,如果缓存队列没有数据,将会处于等待状态,一旦有新的日志写入缓存,将会触发处理线程启动开始处理日志,还可以根据需求配置缓存队列的大小,能够适应大规模的日志处理。
由于日志量极大,可能达到6000条/秒以上,平均一条日志按照0.5k计算,每秒的数据量达到3M以上,因此一般的缓存方法难于达到好的效果,传统的缓存方法一般基于内存,引用速度快,操作方便,但是对于日志处理不太适合,因为每秒的数据量达到3M以上,缓存大小是关键,按照一般的日志处理,至少需要缓存10分钟,那么数据就达到1.8G,内存作为缓存就不太合适;而采用简单的文件缓存,由于文件较大,打开和读写都比较慢。因此本发明采用循环多文件缓存,具体方式是采用多个文件缓存,对这些文件进行循环读写,每个文件可以缓存一定数量的日志,能够避免单个文件太大的弊病,又不会无限制增长,文件缓存格式采用直接存储接收的syslog日志的二进制内容,提高了读写速度。
处理完毕后的日志需要写入到存储设备上,由于单个设备毕竟存储空间有限,而且磁盘IO更是性能瓶颈,因此采用并发存储,采用不同的线程将日志写入到不同的磁盘上,一是可以扩大存储量,二是采用在不同的磁盘并发写入,发挥磁盘IO的处理性能。同时为了提高查询效率。
而日志的存储格式,借鉴关系数据库的存储方法,以时间作为索引,采用多线程并发读取,提高查询效率。由于各个厂商的设备众多,各种日志内容千差万别,所以在存储前必须进行归一化后处理,否则无法进行高效的查询和分析。
对接收的事件进行格式处理,根据配置文件,按照其配置文件中的字段定义,对事件进行归一化,配置文件采用XML配置日志的具体字段定义,可以进行扩展支持任意格式的日志内容。本系统可以支持多个配置文件,每个配置文件可以配置一种或多种日志格式。
对于日志格式的解析提取采用正则表达式进行处理,同时采用映射赋值和直接赋值进行字段统一表示,例如将不同设备的事件等级映射为标准的等级。
事件归一化采用分级归一化,首先采用正则表达式将日志中的公有字段提取出来,对于其他私有字段进行二次提取,避免了重复扫描,又具有灵活性,这种分级归一化可以较大地提高处理日志的性能。
本发明技术方案的具体技术措施如下 (1)日志接收日志服务器软件通过绑定指定的UDP端口(514),以独立线程的运行方式接收syslog的数据报文,并将数据报文直接生成syslog数据类,将syslog数据类写入到日志缓存中; (2)日志缓存日志缓存负责临时存储接收的syslog日志数据,日志缓存是在硬盘上创建一个文件数据缓存空间,按照先进先出的原则将数据存为缓存队列,缓存队列负责存储上一步聚中生成syslog数据类,每一个新接收的数据将会被存储到队尾,队列头部的数据将会等待日志归一化服务进行处理; (3)日志归一化处理以独立线程的运行方式不断地在检测日志缓存队列头部,如果日志缓存队列中有新数据,将会从缓存队列中取出数据,根据日志归一化配置文件的字段描述信息将日志内容进行归一化,然后调用日志存储模块将日志存储为统一的格式; (4)日志存储采用存储线程池将上一步骤中归一化的日志写入到日志存储文件中,每个线程负责写入日志数据到一个文件中,多个线程将可以将日志写入到不同的目录和磁盘,提高存储效率。
采用以上的处理和存储框架,日志处理性能得到极大提高。
1)存储的数据总量基本没有限制,根据用户的存储介质大小而定。
2)单个事件服务并发处理的日志性能达到6000条/秒,在某用户全国骨干网的日志审计中,取得了较好的效果。
日志归一化配置文件的基本格式如下 <config> <event Name=″ciscopix″Description=″cisco pix日志″ Match=″(^(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{2}:\d{2}:\d{2})\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s%PIX-(\d)-(\d{6}):\s([^$]+)″> Event表示日志的归一化模式,可以配置多个。
其中 Match能够区分此类日志的特征字符串,采用正则表达式,可以将日志公有字段匹配出来,其他私有部分可以提取出来进行二次提取。
<field Name=″priority″Description=″等级″Index=″3″Format=″″Value=″″> <fieldvalue Match=″^
″Value=″1″/> <fieldvalue Match=″^[2-4]″Value=″2″/> <fieldvalue Match=″^[5-7]″Value=″3″/> </field> 其中 Field基本定义如下 Name对应字段名称。
Index对应第一次提取的字段索引,对应event的Match中的正则表达式的组数,从1开始。
Format目前针对时间格式,只对时间字段有效,例如yyyy/MM/ddHH:mm:ss。
Value对于此字段直接赋值。
如果直接采用提取的结果,就不需要配置fieldvalue,如果需要根据提取的结果作二次提取,可以配置Fieldvalue。
Fieldvalue基本定义如下 Match从已经提取的字段中进行提取该字段的正则表达式。
Value字段赋值,根据Match匹配的结果赋值,如果为空,直接采用提取的结果,例如提取IP地址。
例如一个防火墙日志归一化对应的配置文件的格式如下 <config><event Name=″secgate″Description=″secgate日志″Match=″^devid=.*date=&quot;([^&quot;]+)&quot;sdname=([^s]+)slogtype=([^s]+)spri=([^s]+)smod=([^s]+)ssa=([^s]+)ssport=([^s]+)sda=([^s]+)sservice=([^s]+)sproto=([^s]+)spolicy=([^s]+)sduration=([^s]+)srcvd=([^s]+)ssent=([^s]+)ssata=([^s]+)ssatport=([^s]+)sia=([^s]+)siport=([^s]+)″><field Name=″category″Description=″事件分类″Index=″″Format=″″Value=″″/><field Name=″type″Description=″事件具体类型″Index=″3″Format=″″Value=″″/><field Name=″priority″Description=″等级″Index=″4″Format=″″Value=″″><fieldvalue Match=″^
″Value=″1″/><fieldvalue Match=″^[2-4]″Value=″2″/><fieldvalue Match=″^[5-7]″Value=″3″/></field><field Name=″occurTime″Description=″事件产生时刻″Index=″2″Format=″yyyy/MM/dd HH:mm:ss″Value=″″/><field Name=″sendTime″Description=″事件发送时刻″Index=″2″Format=″yyyy/MM/dd HH:mm:ss″Value=″″/><field Name=″duration″Description=″持续时刻″Index=″12″Format=″″Value=″″/><field Name=″send″Description=″发送字节数″Index=″14″Format=″″Value=″″/><field Name=″receive″Description=″接收字节数″Index=″13″Format=″″Value=″″/><field Name=″protocol″Description=″协议″Index=″10″Format=″″Value=″″/><field Name=″appProtocol″Description=″应用协议″Index=″″Format=″″Value=″″/><field Name=″sAddr″Description=″源地址″Index=″6″Format=″″Value=″″/><field Name=″sName″Description=″源名称″Index=″″Format=″″Value=″″/><field Name=″sport″Description=″源端口″Index=″7″Format=″″Value=″″/> <field Name=″sProcess″Description=″源进程名称″Index=″″Format=″″Value=″″/><field Name=″sUserID″Description=″源用户ID″Index=″″Format=″″Value=″″/><field Name=″sUserName″Description=″源用户名称″Index=″″Format=″″Value=″″/><field Name=″stAddr″Description=″源地址转换″Index=″15″Format=″″Val ue=″″/><field Name=″stPort″Description=″源地址转换端口″Index=″16″Format=″″Value=″″/><field Name=″dAddr″Description=″目的地址″Index=″8″Format=″″Value=″″/><field Name=″dName″Description=″目的名称″Index=″″Format=″″Value=″″/><field Name=″dPort″Description=″目的端口″Index=″9″Format=″″Value=″″/><field Name=″dProcess″Description=″目的进程名称″Index=″″Format=″″Value=″″/> <field Name=″dUserID″Description=″目的用户ID″Index=″″Format=″″Value=″″/><field Name=″dUserName″Description=″目的用户名称″Index=″″Format=″″Value=″″/><field Name=″dtAdrr″Description=″目的地址转换″Index=″17″Format=″″Value=″″/><field Name=″dtPort″Description=″目的地址转换端口″Index=″18″Format=″″Value=″″/><field Name=″devAddr″Description=″设备地址″Index=″″Format=″″Value=″″/><field Name=″devName″Description=″设备名称″Index=″1″ Format=″″Value=″″/></config> 日志存储文件的构成 日志存储文件采用时间进行索引,提高分析和查询功能,每个日志存储文件分为数据文件和索引文件,数据文件存储日志数据,索引文件存储按照时间存储数据在数据文件中的位置。
数据文件格式 数据文件存储每个日志数据分为两个部分,数据大小和数据内容,首先采用int数据类型的4个字节存储数据大小,然后存储数据内容,基本格式如下 数据大小(int)数据内容(byte[]) 数据大小(int)数据内容(byte[]) …… 索引文件格式 索引文件按照时间(采用long型数据表示时间)存储数据文件中数据的位置(采用long型数据表示数据所在的字节位置),基本格式如下 日志时间(long)数据位置(long) 日志时间(long)数据位置(long) ……


图1是本发明技术方案中日志处理和存储流程图 图2是本发明技术方案中事件处理主从式部署图
具体实施例方式 应用于某安全审计系统中的本发明技术方案完成其系统的日志处理工作。由于用户是该部门系统的全国骨干网络,日常访问量很大,因此日志数据量极大,日志峰值可以达到6000条/秒以上,每天可达50G的日志数据总量。在这个安全审计系统中,用户处安装日中审计软件,负责审计两台千兆防火墙,2台骨干网路由器,4台三层交换机。日志审计系统基本配置如下 硬件 CPU4个Intel至强处理器 内存4G 软件 Windows 2003 Enterprise Server 采用本发明技术方案能够顺利完成日志接收和处理工作,没有发生死机和无法接收的情况。日志处理和存储部分包括以下四个步骤日志接收、日志缓存、日志归一化处理、日志存储。
1)日志接收作为独立的线程运行,绑定指定的UDP端口,主要负责接收syslog的数据报,将数据报文解析成为标准格式,生成syslog数据类,将数据类写入到日志缓存队列。
2)日志缓存是一个可配置大小的数据缓存池,具备先进先出的特性,采用循环文件缓存,负责缓存写入的尚未处理的数据类,等待日志归一化服务进行处理,根据不同的需求和用户环境,可以调节缓存队池的大小。
3)日志归一化处理作为独立的线程运行,不断地在检测日志缓存队列,如果日志缓存队列中有数据,将会读取数据进行归一化,归一化服务将会根据配置文件对日志内容进行格式归一化,处理完毕后调用日志存储服务,按照标准的日志格式写入到日志文件中,整个处理过程完毕后会向日志缓存队列读取下一条数据,如果日志缓存队列为空,则日志归一化服务处于等待状态。
4)日志存储是一个可配置的线程池,每个线程负责写入日志数据到一个文件中,多个线程将可以写入到不同的目录和磁盘,提高写入效率,日志文件每天存储一个文件,文件以时间作为每行存储的字段头和索引,提高检索速度。存储服务还有一个守护线程,可以根据配置的信息检测日志数据文件的大小,可以根据设置的阈值进行报警,可以根据配置信息压缩备份日志文件,采用高比率的压缩算法,可以达到40-100的压缩比,极大地节省了存储空间。
对于某些大型企业,需要采集日志的设备众多,单个服务器无论从空间,还是性能上都无法满足需求。为了能够适应大规模的事件处理,采用主从式的方案解决负载均衡和级联,事件服务可以独立成为集中处理的服务,也可以作为分布式处理的事件收集服务。
主从式部署,参见附图2所示。采用大集中的分析处理,由一个事件服务作为主要核心处理服务,其他分布式部署的事件服务作为事件收集的服务,将收集和处理过的事件转发到核心服务器中,可以适应大规模的日志处理,事件分析仍然在核心服务器上进行。
主从式部署可以分担负载,提高性能,同时对于某些特殊的日志和环境,例如一些难于识别的日志,可以采用一个事件服务专门解析此类日志,将解析过的日志发送到集中管理的服务器上。
权利要求
1.高性能的Syslog日志处理和存储方法,其特征在于该方法的步骤为
(1)日志接收日志服务器软件通过绑定指定的UDP端口(514),以独立线程的运行方式接收syslog的数据报文,并将数据报文直接生成syslog数据类,将syslog数据类写入到日志缓存中;
(2)日志缓存日志缓存负责临时存储接收的syslog日志数据,日志缓存是在硬盘上创建一个文件数据缓存空间,按照先进先出的原则将数据存为缓存队列,缓存队列负责存储上一步聚中生成syslog数据类,每一个新接收的数据将会被存储到队尾,队列头部的数据将会等待日志归一化服务进行处理;
(3)日志归一化处理以独立线程的运行方式不断地在检测日志缓存队列头部,如果日志缓存队列中有新数据,将会从缓存队列中取出数据,根据日志归一化配置文件的字段描述信息将日志内容进行归一化,然后调用日志存储模块将日志存储为统一的格式;
(4)日志存储采用存储线程池将上一步骤中归一化的日志写入到日志存储文件中,每个线程负责写入日志数据到一个文件中,多个线程将可以将日志写入到不同的目录和磁盘。
2.根据权利要求1所述的高性能的Syslog日志处理和存储方法,其特征在于日志归一化配置文件的基本格式如下
<config>
<event Name=″ciscopix″Description=″cisco pix日志″
Match=″(^(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{2}:\d{2}:\d{2})\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s%PIX-(\d)-(\d{6}):\s([^$]+)″>
Event表示日志的归一化模式,可以配置多个。
其中
Match能够区分此类日志的特征字符串,采用正则表达式,可以将日志公有字段匹配出来,其他私有部分可以提取出来进行二次提取。
<field Name=″priority″Description=″等级″Index=″3″Format=″″Value=″″>
<fieldvalue Match=″^
″Value=″1″/>
<fieldvalue Match=″^[2-4]″Value=″2″/>
<fieldvalue Match=″^[5-7]″Value=″3″/>
</field>
其中
Field定义如下
Name对应字段名称。
Index对应第一次提取的字段索引,对应event的Match中的正则表达式的组数,从1开始。
Format目前针对时间格式,只对时间字段有效,例如yyyy/MM/ddHH:mm:ss。
Value对于此字段直接赋值。
如果直接采用提取的结果,就不需要配置Fieldvalue,如果需要根据提取的结果作二次提取,可以配置Fieldvalue。
Fieldvalue定义如下
Match从已经提取的字段中进行提取该字段的正则表达式。
Value字段赋值,根据Match匹配的结果赋值,如果为空,直接采用提取的结果,例如提取IP地址。
3.根据权利要求l所述的高性能的Syslog日志处理和存储方法,其特征在于日志存储文件的构成是
存储的日志存储文件采用时间进行索引,每个日志存储文件分为数据文件和索引文件,数据文件存储日志数据,索引文件存储按照时间存储数据在数据文件中的位置;
数据文件格式
数据文件存储每个日志数据分为两个部分,数据大小和数据内容,首先采用int数据类型的4个字节存储数据大小,然后存储数据内容,基本格式如下
数据大小(int)数据内容(byte[])
数据大小(int)数据内容(byte[])
……
索引文件格式
索引文件按照时间(采用long型数据表示时间)存储数据文件中数据的位置(采用long型数据表示数据所在的字节位置),基本格式如下
日志时间(long)数据位置(long)
日志时间(long)数据位置(long)
……
通过索引文件能够提高数据查询效率,优于普通的文件存储。
全文摘要
本发明是一种高性能的Syslog日志处理和存储方法,其步骤为(1)日志接收日志服务器软件通过绑定指定的UDP端口(514),以独立线程的运行方式接收syslog的数据报文,并将数据报文直接生成syslog数据类,将syslog数据类写入到日志缓存中;(2)日志缓存日志缓存负责临时存储接收的syslog日志数据;(3)日志归一化处理以独立线程的运行方式不断地在检测日志缓存队列头部,如果日志缓存队列中有新数据,将会从缓存队列中取出数据,根据日志归一化配置文件的字段描述信息将日志内容进行归一化,然后调用日志存储模块将日志存储为统一的格式;(4)日志存储采用存储线程池将上一步骤中归一化的日志写入到日志存储文件中,每个线程负责写入日志数据到一个文件中,多个线程将可以将日志写入到不同的目录和磁盘,提高存储效率。本发明技术方案采用异步日志处理和并发日志存储技术,这两个环节相互相承,有机协调地应对日志总量和日志并发量的问题,利用空间换时间,极大地提高了日志处理能力。
文档编号H04L29/02GK101087210SQ20071010316
公开日2007年12月12日 申请日期2007年5月22日 优先权日2007年5月22日
发明者文华, 朱震, 王新华 申请人:网御神州科技(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1