Linux日志管理Rsyslog之模块

Linux ginotang 2467℃ 0评论

模块(Modules)

Rsyslog是基于模块化的设计,在rsyslog的执行过程,背后都有一系列模块的功能支撑,例如输入模块、输出模块、消息修改模块等。输入模块用于把系统或程序产生的日志输入到队列中去,而输出模块则是把日志从队列中输出到其他指定的地方。消息修改模块可以对队列中的消息进行修改,例如消息的格式化。不同的模块提供了不同的设置参数,模块使用前必须先导入。

除了上面提到的三个模块,Rsyslog还提供了其他一些模块,例如解析模块,库模块等,由于输入输出模块是Rsyslog中比较重要且常用的模块,所以这篇文章重点讲解的是这两个模块。

输入模块(Input Module)

输入模块都是以字母im开头,常见的输入模块有:imfile、imtcp、imudp、imuxsock、imjournal。它们的作用如下:

  • imfile:把文件导入到rsyslog中,例如web服务器产生的日志文件
  • imtcp:把以tcp作为协议传输的日志导入到rsyslog,例如把日志转发到远程服务器的时候需要用到
  • imudp:同上,不同的只是传输协议
  • imuxsock:把unix socket作为日志的输入点
  • imjournal:把journald(另一种日志系统)的日志导入到rsyslog

文本文件输入模块(imfile)

此模块可以把普通的文本文件导入到rsyslog,文本中的内容由可打印的字符组成,以LF结尾。文本以行的形式输入,空白行不会被处理。由于部分程序不会通过rsyslog管理日志,例如nginx、httpd等,那么我们可以把这些程序生成的日志先导入到rsyslog,然后由rsyslog作后续处理:发送到远程服务器或写入到数据库等等。例如:

例子中导入了nginx的访问信息,然后添加了一条规则,把它写入到硬盘的另一个位置(只是一个例子,可能有点多余)。$InputFileStateFile指令用于追踪文件的状态,即哪一个部分已经被处理,哪些还没有被处理。这个指令依赖$InputFilePersistStateInterval指令,只有定义了这个指令,$InputFileStateFile才会生成追踪文件。

tcp协议输入模块(imtcp)

当客户端需要把日志转发给远程日志服务器的时候,服务器需要打开这个模块,rsyslog才能接收客户端的日志。忽略其他非必要的设置,imtcp模块是使用起来最简单的的一个模块。

服务器只需要打开两个指令,就可以使用这个模块:

这个,一个可用的远程日志服务器就搭建完毕,不过,请注意添加端口到防火墙的白名单上

如果要为服务器指定一个Ruleset,可以使用$InputTCPServerBindRuleset指令。例如:

客户端只需要指定接收日志的目标服务器地址即可:

如果希望了解更多imtcp模块的相关配置,请看imtcp: TCP Syslog Input Module

输出模块(Output Module)

和输入模块的作用相反,输出模块用于日志的输出(消费),所有的日志最后都会被输出模块处理。常用的输出模块有:omfile、omfwd、omjournal、ommysql等。

鉴于omfile模块是一个内建的模块,它的作用就是把日志输出为普通的文本文件。rsyslog默认会导入这个模块,我们基本上不需要过多去配置它,因此这里不讨论这个模块。同样地,omfwd也是一个内建模块,我们也不需要手动去加载它,它的作用就是使日志可以通过udp协议或者tcp协议转发到远程服务器,简单的使用上面的客户端设置已经列出,不再详细描述。如果希望了解更多omfile和omfwd的配置参数,请看下面两个链接:

omfile: File Output Module

omfwd: syslog Forwarding Output Module

输出数据库模块(ommysql)

有时候我们可能需要把日志储存到数据库中,ommysql模块就可以帮助我们。其实除了ommysql之外,还有另一个提供同样作用的模块,那就是omlibdbi,但是ommysql的性能更优于omlibdbi,因此我们选择了前者。

在centos7中,ommysql需要另外安装,它包含在rsyslog-mysql软件包中。可以使用下面的命令安装:

下面是ommysql的实际使用案例。

第一步:安装rsyslog-mysql

这个包就是提供ommysql模块的软件包,如果还没有安装的请先安装,已安装的可以忽略这一步。

第二步,创建数据库

ommysql提供了一些默认的行为,例如,数据库和表名称,写入模板(template)。在使用ommysql之前,我们需要把数据库创建好,模块提供了创建数据库的脚本,可以在/usr/share/doc/rsyslog-8.24.0/目录下找到(不同的rsyslog版本可能位置不同)。如果没有安装rsyslog-mysql软件包,这个脚本是不存在的。

mysql-createDB.sql就是创建数据库的脚本,找到后可以通过下面的命令使用这个脚本(为了简化步骤,使用了root操作这个数据库,生产环境中不建议):

这个脚本会创建一个名称为Syslog的数据库,里面包含两张表:SystemEvents和SystemEventsProperties。通常日志都会被写入到SystemEvents表中。

第三步:配置rsyslog

我们说过,通常在一些慢操作上,可以使用队列加快rsyslog的操作效率,因此,我们在这里可以配合队列使用,在rsyslog.conf的最后添加下面的设置:

第四步:重启rsyslog服务,这也是最后一个步骤。

如果没有错误,就可以登录mysql查看是否工作正常:

由于ommysql模块使用了一个默认的模板,因此我们不需要自己编写sql语句,一般默认的模板如下:

使用自定义模板

虽然rsyslog提供了默认的数据库和模板,我们也可以使用自定义的模板。如果也希望使用自定义的数据库,创建一个就可以。例如自己创建rsyslog的数据库,里面有一个表events:

然后就是配置rsyslog.conf文件:

当然,测试之前别忘了重启rsyslog服务。

注意自定义模板后面添加了一个模板选项:SQL,添加这个选项可以有效防止sql注入。

如果希望了解更多ommysql模块的配置,请看:ommysql: MySQL Database Output Module

转载请注明:Pure nonsense » Linux日志管理Rsyslog之模块

喜欢 (1)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x