APP下载

基于rsyslog系统日志的收集与分析

2012-08-06朱晓亮陈云芳陆有为

网络安全技术与应用 2012年12期
关键词:应用层配置文件队列

朱晓亮 陈云芳 陆有为

南京邮电大学物联网学院 江苏 210003

0 引言

本文研究一种基于rsyslog系统日志处理系统,通过收集*nix系统里产生的各种log,分析并确定系统中的问题所在,最终以Web方式展示出来,方便的进行检索和分析,具有较高的理论和实用价值。

1 *nix的日志处理

1.1 *nix平台下的日志

对于*nix平台来说,log主要包括应用层的log、系统层的log以及虚拟机的log。

应用层的log:大部分应用层的log默认会存储在/var/log/下面,如果通过ls列出/var/log/下面的目录文件,我们会看到很多熟悉的名字,比如/var/log/apache2,则代表是由apache2服务产生的log文件;再比如/var/log/samba则代表是由Samba服务产生的log文件。

系统层的log:系统的log信息主要是跟Ubuntu的系统信息相关,跟应用层的log关系不是很紧密,常见的包括用户的认证机制的日志信息,系统的daemon,系统的messages,以及系统所有的压缩文件也就是其本身syslog。

虚拟机的log:对于虚拟机来说,目前主流的包括xen以及KVM,其中前者使用范围更为广泛,同样,在/var/log/下有xen/目录,该目录下会包含console/目录,记录通过console登录的信息,domain-builder-ng.log文件记录domU的信息,xen-debug文件以记录xen虚拟机的debug信息等。而对于KVM来说,则包含/var/log/libvirt/目录,该目录下面的文件记录的是KVM相关的log信息。

1.2 Rsyslog日志处理协议

Syslog是一个很著名的网络协议,是一种在Unix和类Unix的计算机系统上使用的协议,它用于转发以太网络中的日志消息。它实施了基本的syslog协议,并且为syslog协议扩增了基于内容的过渡、丰富的过滤功能和灵活的配置选项,还增添了一些重要功能,比如使用TCP进行传输。

(1) rsyslog的功能

Rsyslog通过队列来耦合两个动作,在队列中,一方作为生产者,一方作为消费者,生产者会生产一些东西,一般,“一些东西”通常是syslog信息,当然,队列也可以用于其他的目的。

Rsyslog有一个主队列和多个action(动作)队列,消息输入模块把消息pass到主队列,再由主队列根据rules分给各个action队列。

在配置文件里,可以通过MainMsg和Action分别用来设定主队列和aciton队列的参数。在队列创建前,相同的参数可以指定多次,最后指定的优先。

主队列,在解析完配置文件后,开始创建。Action队列,在每次动作选择时被创建。

Rsyslog支持多种模式,在配置文件里通过$queuetype来指定。目前有下面三种:

① 直接队列,不排队或缓存任何队列元素,直接传递元素到下一个处理机制;

② 内存队列,将队列缓存到内存中,等到一定的触发条件再传递;

③ 磁盘辅助内存队列,将队列缓存到磁盘中,等到一定的触发条件再传递。

(2) rsyslog的使用

在实际的使用过程中,我们可以通过配置文件和查看相应的日志文件来使用rsyslog。然而,在许多应用场景下,我们往往需要通过程序产生输出信息并进行记录,也就是说要把一些信息写成日志文件。正常情况下运行程序的人不用关心日志里的内容,只有在出现问题的时候才会查看日志文件里的内容以确定问题所在。

因此,下面设计通过rsyslog日志系统提供的API调用接口,来使用程序实现对rsyslog的使用。

常用的rsyslog系统调用包括如下四个:

① void openlog(const char *ident, int option, int facility):打开日志设备;

② void syslog(int priority, const char *format,...):写入日志;

③ void closelog(void):关闭日志设备;

④ vsyslog:它和syslog功能类此,只是有不同的参数。

增加一条log信息的过程(如图1):

图1 rsyslog系统调用

我们可以通过下面一小段程序来熟悉这几个系统调用:

2 大规模日志收集系统的设计

一个好的日志系统,不但需要一个鲁棒性很高的后端,还需要一个体验很高的前端。对于写操作要求很高的日志系统,我们选用 MySQL 作为我们log存储的数据库系统,而使用 PHP 这门全球最流行的脚本语言来构成前端。

同时我们使用 MyISAM 作为数据库的存储引擎,也就是默认的引擎,因为这里的应用是不需要事务的,处理的基本的CRUD操作,而且以 insert 为主。

接下来我们需要建立业务相关的数据库了。数据库的名字命名为 Syslog。这里需要建立表1、表2。

SystemEvents,该表存放log的实际信息,包括惟一标识号 ID,log到达logserver 的时间,Facility级别,Priority级别,log的内容 Message 等。

SystemEventsProperties,该表存放 SystemEvents 的相关属性,包括一个惟一的表示,同时也作为该表的主键 ID 号,以及一些保留的字段等。

表1 Syste5mEvents 表部分条目

表2 SystemEventsProperties 表部分条目

在完成建立表格之后,需要通知rsyslog以数据库的方式来收集log信息:

在完成了数据库的设计之后,开始Web的设计,这里主要包括6大模块。它们分别是如下的:

用户登录登出(Login/Logout);

数据检索(Search);

事件展示(Show Events);

数据分析报告(Statistics);

用户管理(Admin Center);

数据库读写 (DB I/O)。

用户管理则是对登录该系统用户的日常的操作维护,包括用户以及用户组的权限等问题;数据检索主要是通过关键词来准确匹配需要的搜索的内容;事件展示是该log收集分析系统的主要界面,也就是进入该系统的首页面,会根据默认的情况展示log收集的数据,以及相应的log信息的分类、划分的等级等;报告生成主要是对log信息的分类统计。

3 测试结果与分析

3.1 log的收集测试

这里通过手动的测试,来测试写入 /var/log/messages 的情况,我们需要一个简单 logger 命令来测试(如图2):

$ logger -p local3.info "Msg"

图2 rsyslog测试示例

第一行日志显示: May 22 17:10:09 lvs-1 yunbg: 11其表示意思如下:第一列:日志产生时间;第二列:产生此日志的主机名称;第三列:产生此日志的应用程序或用户名称;第四列:日志的内容。正如前面所说的,应用程序的日志级别是由应用程序所决定的。部分应用程序可通过配置,定义其日志级别。例如,/etc/ssh/sshd_config。

3.2 Web界面下log的检索和展示

这里根据“Other filters”包括“Syslog Facility”“Syslog Severity”等类别来进行搜索,通过关键词加上符号的形式来实现,比如“facility:local0 severity: warning”这个则是搜索Facility为local0而severity为warning级别的内容。检索界面如图3所示。

图3 log检索

通过检索生成的报告中,包括 Date、Facility、Severity、Host、Syslogtag、Messagetype、Message 几个栏目,分别表示日志到达的时间、其 Facility的值、严重等级程度、来自于哪台主机、其 syslog 的 tag、信息的类型以及最重要的一项其显示的消息,即如图4所示。

图4 数据报告展示

对于 Message 这一栏,如果点击,可以得到更加详细的消息信息。整个界面根据时间进行排序,时间越早的排在前面,偏晚的则排在后面,这也符合我们的需求,设计日志系统的主要目的是用来发现问题解决问题的,因此我们可以通过查找过滤关键字来找到我们需要的日志信息。

4 结束语

本文介绍了 *nix 平台下的log,归纳了应用层、系统层以及虚拟机的log文件。熟悉rsyslog的功能以及其核心功能——队列。在此基础上,将log内容收集到数据库中并以Web的方式展现出来。保证了数据库的读写效率和在出现系统问题的情况下,能很快通知并及时解决系统故障。同时,文章也存在可以改进和拓展的方面。在log的分析方面并不是很完善,可以通过一定的匹配算法实现自动化的过滤、展示以及根据预定的阈值进行报警,以便及时通过log发现系统中存在的问题,更好的体现log的作用。

[1] 乃密斯.Linux系统管理技术手册.人民邮电出版社.2008.

[2] 马修.Linux程序设计-(第3版).人民邮电出版社.2007.

[3] Rainer Gerhards, Adiscon GmbH. rsyslog: going up from 40K messages per second to 250K.

[4] 张文江,吴庆波.Linux日志文件系统研究.计算机工程与应用.2006.

[5] 刘丹,赖锋.系统安全中Linux日志的实用研究.世界电信.2003.

[6] 李燕南,刘新等.主机日志分析与研究[J].中国高新技术企业.2010.

[7] R. Gerhards. The Syslog Protocol. RFC 5424 (Proposed Standard),March 2009.

猜你喜欢

应用层配置文件队列
队列里的小秘密
基于多队列切换的SDN拥塞控制*
互不干涉混用Chromium Edge
在队列里
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
为View桌面准备父虚拟机
丰田加速驶入自动驾驶队列
基于分级保护的OA系统应用层访问控制研究
新一代双向互动电力线通信技术的应用层协议研究