log日志远程统一记录。

1、面临的问题

1、多个server后,日志分别存储在每个server的log目录下,管理起来不方便。
2、日志会引起的磁盘寻道及io会消耗系统性能

2、解决方案

初步设想了以下几种方案:
1、每个server生成的log每天定时上传至一个统一接收日志的服务器。但该方案无法解决以上中的问题2。
2、使用log4j2中的SocketAppender将日志输出到远程socket,在远程socket进行接收。看起来同时解决掉了问题1和2,但是未找到对应的远程接收服务器中间件,还需要自己来进行code。
3、在方案2的基础上,查找现成的可远程接收日志的中间件,有apache flume及linux系统自带的rsyslog入围。apache flume需要安装进行维护等,rsyslog在centos自带的组件,可以方便配置即可启用。而且rsyslog支持将日志写入文件或写入db中,配 置方便,如果以后需要日志存入db,修改也非常方便。

以上决定采用方案3。

3、具体操作过程

1、打开rsyslog的远程接收接口

vi rsyslog.conf

注释掉以下语句前面的’#’号:

$ModLoad imudp

$UDPServerRun 514

重启 rsyslog:
service rsyslog restart

2、配置日志发送至rsyslog。

最初采用的是log4j2,但发现log4j2中暂时不支持SyslogAppender中的pattern。
于是项目转为使用logback。

以下是一个logback的例子配置:

<appender name="default" class="ch.qos.logback.classic.net.SyslogAppender">
		<syslogHost>192.168.17.17</syslogHost>
		<port>514</port>
		<suffixPattern>A</suffixPattern>
		<facility>LOCAL7</facility>
		<suffixPattern>%date ${MODULE} igame.log [%thread] %logger{0}\(%L\) %p %msg
		</suffixPattern>
	</appender>

	<appender name="default_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
		<queueSize>1024</queueSize>
		<appender-ref ref="default" />
	</appender>

需要注意的是结点suffixPattern,MODULE 是从环境变量取出的值,igame.log标志存储的文件名。
3、配置rsyslod对日志进行router

 $template DynFile,"/var/log/router-log/%msg:F,32:3%/%timegenerated:1:10:date-rfc3339%/%msg:F,32:4%"

:source , \!isequal , "localhost" ?DynFile

:source , \!isequal , "localhost" ~

以上代表接收到的日志存储在 /var/log/router-log/MODULE/日期/指定的文件名
重启rsyslog.
以上测试OK。

4、可改进的地方

tomcat7中的access log不支持直接发往rsyslog,改为logback输出access.log,成功,但用logback输出到rsyslog时出问题,一直无法接收到日志。
这里可以考虑下使用log4j2把日志输出到rsyslog中

现在遇到第二个问题了,我需要logback内的更多属性来router日志。现在的情况是exception日志,无法router.

5、小贴士

$EscapeControlCharactersOnReceive off

可以避免\t被转换为#011

2013.08.21记:centos中rsyslog是v5版本,最新版本是v7版本,怪不得遇到各种奇怪的问题,升级为最新的v7版本:http://www.rsyslog.com/rhelcentos-rpms/

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>