集中日志管理服务 rsyslog 安装配置


介绍

  • 一般syslog,syslog-ng,rsyslog用于收集系统日志,scribe和fluentd用于收集业务日志,rsyslog和syslog-ng也可以收集业务日志,并可定制和过滤、筛选。LogAnalyzer和LogZilla是分析系统日志,并用web界面展示的的工具,一般只用在syslog,syslog-ng,rsyslog日志系统中。
  • rsyslog可以理解为增强版的syslog,在syslog的基础上扩展了很多其他功能,如数据库支持(Mysql, PostgreSQL、Oracle等)、日志内容筛选、定义日志格式模板等。除了默认的udp协议外,rsyslog还支持tcp协议来接收日志。

    下载

rsyslog:wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-7.2.6.tar.gz
需要的库libestr:wget http://libestr.adiscon.com/files/download/libestr-0.1.4.tar.gz
需要的库libee:wget http://www.libee.org/files/download/libee-0.4.1.tar.gz
需要的库json-c:wget https://github.com/json-c/json-c/archive/master.zip
yum install libuuid-devel

安装

先手动指定下lib库和PKG_CONFIG_PATH
vi /etc/ld.so.conf,加入/usr/local/lib
运行ldconfig生效。
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig

解压libestr,进入解压目录:./configure;make;make install
解压libee,进入解压目录:./configure;make;make install
解压json-c,进入解压目录:sh autogen.sh;./configure;make;make install
解压rsyslog,进入解压目录:./configure --prefix=/usr/local/rsyslog --enable-mysql;make;make install

配置

把源文件目录下的platform/redhat/rsyslog.conf 复制到/usr/local/rsyslog/etc
vi /usr/local/rsyslog/etc/rsyslog.conf
#开启集中日志服务器功能(SYSLOGD_OPTIONS="-m 0 -r" 该方式新版本已经无效)
module(load="imudp")
input(type="imudp" port="514")
#定义自己的输出格式模板(时间格式类似2011-10-01 23:11:29 ,显示IP)
$template sl,"[%$NOW% %TIMESTAMP:8:15%] %FROMHOST-IP% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\\n"
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat  #系统默认的输出格式
#详细定义官方文档:doc\\rsyslog_conf_templates.html,doc/property_replacer.html
#使用模板
local6.*                 /var/log/test.log;sl

启动

停止系统的syslog:service syslog stop;chkconfig syslog off
启动rsysloig:/usr/local/rsyslog/sbin/rsyslogd -f /usr/local/rsyslog/etc/rsyslog.conf -x    #-f指定配置文件 -x 不做dns解析
关闭rsyslog:pkill rsyslogd

客户端配置

只要在客户端配置文件中:相应日志类型中的输出地址改为日志服务器即可,如下:
local6.*        @192.168.1.210    #@192.168.1.210 使用udp    @@192.168.1.210 使用tcp

输出到服务器后存放的位置是由服务器端的rsyslog的配置决定的。

例子

服务端存放位置例子:
:fromhost-ip, isequal, "192.168.1.220" /var/log/rsyslog/192.168.1.220.auth.log;sl
:fromhost-ip, isequal, "192.168.1.220" ~
local6.*                 /var/log/test.log
local4.info                            /var/log/rsyslog/192.168.1.221.squid.log;sl  (squid使用LOCAL4 syslog设备)
:fromhost-ip, isequal, "192.168.1.221" /var/log/rsyslog/192.168.1.221.auth.log;sl
:fromhost-ip, isequal, "192.168.1.221" ~

#或者这样:

if $fromhost-ip == '192.168.1.221' and $syslogtag startswith 'squid' then /var/log/rsyslog/192.168.1.221.squid.log;sl
if $fromhost-ip == '192.168.1.221' and ( $syslogtag startswith 'sshd' or $syslogtag startswith 'sudo' ) then /var/log/rsyslog/192.168.1.221.auth.log;sl
if $fromhost-ip == '192.168.1.221' then ~

#$fromhost-ip $syslogtag 这类标签就是前面模板sl定义的 执行操作可以是:contains,isequal,startswith. 详细:man rsyslog.conf