syslog-ng配置

March 13th, 2012
绚丽也尘埃 Leave a comment
Go to comments

syslog-ng的配置非常简单直观,于是乎配置好看看怎么用它实时收集日志。有两台服务器,一台服务器盯着error_log文件,一旦发现其有新数据,立即将日志发到另一台收集服务器。

client服务器配置如下。

?
1
2
3
4
5
6
7
8
9
#将文件作为src
source s_blender_error_log {
file("/home/admin/kingso/logs/error_log_blender");
};
#收集到的日志发送给172.25.61.92
destination d_blender_error_log { tcp("172.25.61.92" port(514)); };
log { source(s_blender_error_log); destination(d_blender_error_log);};

server服务器配置如下。

?
01
02
03
04
05
06
07
08
09
10
11
#监听514端口
source s_kingso {
tcp(ip(0.0.0.0) port(514));
};
#设置输入文件及其相关的属性
destination d_kingso {
file("/home/admin/error.log" owner(admin) group(admin) perm(0755));
};
log { source(s_kingso); destination(d_kingso); };

最后收集到的日志如下。

?
1
Mar 13 20:32:56 s061090.cm5 moximoximoximoximoxi

syslog-ng有一个很有意思的功能,那就是在destination里面支持program,可以对符合条件的日志支持操作,比如报警等等。下面这个配置会将所有包含error的日志输出到一个指定的文件中。为了提高性能,建议这个程序从标准输入读入数据,如果没有数据就阻塞等待,不要轻易退出。

?
1
2
3
destination d_kingso {
program("grep error >> /tmp/eerroorr.log");
};

filter支持内容过滤,比如要把服务器上所有core信息都收集到一台服务器上,只要判断kern信息中是否有segfault就可以,配置如下。

?
1
2
3
4
filter f_kingso_core {
facility(kern) and
match("segfault" value("MESSAGE"));
}

如果要用syslog-ng收集大集群的日志,需要设置下max-connections这个参数,它的默认值是10,实在是太小了。如果不改这个配置,netstat会出现syslog-ng导致的大量TIME_WAIT。将其放大之后,可以算一下ESTABLISHED的链接数是不是和集群服务器数量相同。

syslog-ng服务器默认情况下收集到的日志是:”Apr 1 17:42:33 hostname blabla”。月份后面可能有一个空格(大于10号)也可能有两个空格(小于10号),这样对消息的切分就会有问题,这个时候必须通过template来规范消息的格式。syslog-ng支持定义一个template模版,以后的template都可以使用改模版,非常方便。下面这个配置就是program和file两个destination共用一个t_kingso模版。

?
1
2
3
4
5
6
template t_kingso { template("$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC\t$FULLHOST\t$MSGHDR$MSG\n"); };
destination d_kingso_blender {
program("exec python -u /home/henshao/log_monitor/log_monitor.py -c /home/henshao/log_monitor/log_monitor.conf -m blender >> /tmp/log_monitor.log 2>&1" template(t_kingso) );
file( "/home/admin/logs/blender.log.$S_YEAR-$S_MONTH-$S_DAY" create_dirs(yes) owner(admin) group(admin) perm(0755) template(t_kingso) );
};

我发现RHEL5上默认安装了syslogd、syslog-ng和rsyslog。syslogd历史最为悠久,wikipedia上的资料上讲它当初是sendmail项目的一部分,因为非常有用,所以逐渐成为所有unix-like系统的标准组件。syslog-ng则是syslogd的升级版本,是一个公司开发的,除了开源免费版还有收费的高级版,有一篇不错的文章: 专访syslog-ng 2.0开发人员Balazs Scheidler。rsyslog则最为年轻,作者想做一个log系统和syslog-ng竞争。

推荐一些不错的资料。

1、Syslog-ng

2、syslog-ng v2.0 reference manual

发表回复