Rsyslog日志服务器搭建

1、rsyslog简介

1.1 rsyslog是什么

    rsyslog是比syslog功能更强大的日志记录系统,可以将日志输出到文件,数据库和其它程序。
    ryslog 是一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计。rsyslog 是syslog 的升级版,它将多种来源输入输出转换结果到目的地,并可定制和过滤、筛选。据官网介绍,现在可以处理100万条信息。
特性:
       1、可以直接将日志写入到数据库。
       2、日志队列(内存队列和磁盘队列)。
       3、灵活的模板机制,可以得到多种输出格式。
       4、插件式结构,多种多样的输入、输出模块。
       5、可以把日志存放在Mysql ,PostgreSQL,Oracle等数据库中

1.2 rsyslog工作流程

    从这个图当中可以看出来rsyslog的工作方式非常简单,就是一个server端对多个client端,基于514端口的tcp、udp通信协议。

1.3 Rsyslog日志服务器的优势

    1. 日志统一,集中式管理
    2. 日志实时传送到一个更加安全的远端服务器上,真正记录用户行为,使日志的2次更改可能性大大降低,从而能够对日志进行真实回放,便于问题追踪。

2、系统环境

    Rsyslog Server OS:CentOS 6.8
    Rsyslog Server IP:10.10.16.253
    Rsyslog 版本:rsyslog-8.30.0-8.el6.i686
    防火墙已关闭/iptables: Firewall is not running.
    SELINUX=disabled
    Rsyslog Client OS:RHEL 6.4
    Rsyslog Client IP:10.10.16.254

2.1 升级rsyslog

    操作系统是Centos 6.8,默认安装的Rsyslog版本是5.8.10,可通过rsyslogd -v命令查看:

# rsyslogd -v
rsyslogd 5.8.10, compiled with:
    FEATURE_REGEXP:                Yes
    FEATURE_LARGEFILE:            No
    GSSAPI Kerberos 5 support:        Yes
    FEATURE_DEBUG (debug build, slow code):    No
    32bit Atomic operations supported:    Yes
    64bit Atomic operations supported:    Yes
    Runtime Instrumentation (slow code):    No
See http://www.rsyslog.com for more information.

使用yum对rsyslog进行升级(需要root权限)

# cd /etc/yum.repos.d
# wget http://rpms.adiscon.com/v8-stable/rsyslog.repo    
# yum update rsyslog
# rsyslogd -v
rsyslogd 8.30.0, compiled with:
    PLATFORM:                x86_64-redhat-linux-gnu
    PLATFORM (lsb_release -d):        
    FEATURE_REGEXP:                Yes
    GSSAPI Kerberos 5 support:        No
    FEATURE_DEBUG (debug build, slow code):    No
    32bit Atomic operations supported:    Yes
    64bit Atomic operations supported:    Yes
    memory allocator:            system default
    Runtime Instrumentation (slow code):    No
    uuid support:                Yes
    Number of Bits in RainerScript integers: 64
See http://www.rsyslog.com for more information.
升级完成之后,版本为8.30.0

注意:Rsyslog服务端和客户端都进行升级。

2.2 客户端配置

  一、防火墙配置
    如果启用了iptables防火墙,注意开放默认的514端口,也可以配置文件使用其他端口。
    iptables -A INPUT -m state --state NEW -m udp -p udp -i eth0 --dport 514 -j ACCEPT
    iptables -A INPUT -m state --state NEW -m tcp -p tcp -i eth0 --dport 514 -j ACCEPT
   说明:rsyslog可以通过tcp协议传输日志,也可以通过udp协议传输。有些服务器采用的tcp协议,有些用了udp协议,想对比看看哪种更适合我们的环境,因此所有服务器都建立了以上两条规则。
  二、配置rsyslog
    编辑配置文件/etc/rsyslog.conf,去掉以下配置项前的注释,如果没有就添加该配置项。
    module(load="imuxsock")
    module(load="imklog")
    module(load="imfile") #添加文件输入模块

# 以上为基本配置,必须要有

2.3 服务端配置

   防火墙配置与客户端一致
   开启相关日志模块

module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

#允许514端口接收使用UDP和TCP协议转发过来的日志

# Provides TCP syslog reception

# for parameters see http://www.rsyslog.com/doc/imtcp.html

module(load="imtcp" MaxSessions="500") # needs to be done just once

input(type="imtcp" port="514")

 

# /etc/init.d/rsyslog restart  #修改完记得重启rsyslog服务

# 以上是系统环境的默认配置

3、收集多台tomcat应用日志

3.1 客户端配置

    配置rsyslog:编辑配置文件/etc/rsyslog.conf,去掉以下配置项前的注释,如果没有就添加该配置项。

module(load="imuxsock")
module(load="imklog")
module(load="imfile")   #文本文件输入模块,只针对客户端
#新增配置
ruleset(name="remote"){
action(type="omfwd"
target="202.106.149.226"   #远程rsyslog server ip 生产环境需要做端口映射202.106.149.226:514----10.10.16.253:514
port="514" #端口:
protocol="tcp" #使用协议
queue.type="linkedList" #使用异步处理 
queue.spoolDirectory="/home/yaoduwww/rsyslog" #队列目录,需在客户端创建
queue.fileName="remoteQueue_10_10_16_225" #队列名称
queue.maxDiskSpace="5g" #队列占最大磁盘空间
queue.saveOnShutdown="on" #保存内存数据如果rsyslog关闭
action.resumeRetryCount="-1" #无限重试插入失败
    )
stop
}

  新增子配置文件:/etc/rsyslog.d/tomcat-8080.conf  #可以增加多个分别对不同应用实例的日志进行收集

[root@web rsyslog]# cat /etc/rsyslog.d/tomcat-8080.conf
$WorkDirectory /home/yaoduwww/rsyslog  #默认为/var/lib/rsyslog,这里可以自己定义

input(type="imfile"
        File="/usr/local/tomcat/logs/catalina.out"  #日志路径
        #StateFile="catalina.out-8080"  #新版本中不需要设置
        Facility="local1"
        Severity="info"
        Tag="catalina-10.10.16.254-8080" #定义日志标签,重要,服务端根据这个标签可以识别日志
        PersistStateInterval="1" #回写偏移量数据到文件间隔时间(秒),根据实际情况而定
        Ruleset="remote" #rsyslog.conf中定义的rule名称
        )
#########################################################################

input(type="imfile"
        File="/usr/local/tomcat/logs/localhost_access_log.2017-11-08.txt"
        #StateFile="localhost-8080"
        Facility="local3"
        Severity="info"
        Tag="access-10.10.16.254-8080"
        PersistStateInterval="1"
        Ruleset="remote"
        )

    【注意】:根据实际情况,可以在/etc/rsyslog.d添加多个配置文件,如果服务器上面有两个tomcat实例,因此还有一个配置文件是tomcat-8090.conf,跟上面类似,只是应用不同,日志路径,端口不同。

     最后在/etc/rsyslog.conf中修改匹配项目

*.info;mail.none;authpriv.none;cron.none;               /var/log/messages
修改为:
*.info;mail.none;authpriv.none;cron.none;local1.none;local2.none;local3.none;local4.none;local5.none;local6.none /var/log/messages
#
作用:为不将自定义的日志记录到/var/log/message文件中,不然的话日志量大很容将/根目占满,后果可想而知。

3.2 服务端配置

    编辑/etc/rsyslog.conf,去掉以下配置项前的注释,如果没有就添加该配置项。注意:服务端/home/yaoduwww目录无须创建,自己会生成。

$PreserveFQDN on #用于正确的获取主机名,暂时应该没用到
#$FileOwner developer #存储的文件属主,需创建用户useradd devloper
#$FileGroup yaodu  #文件属组,需创建groupadd yaodu
$FileCreateMode 0644 #生成的文件权限
$DirCreateMode 0755 #生成的目录权限
$Umask 0022
$PrivDropToUser root #可以删除日志的用户
$PrivDropToGroup root #可以删除日志的用户组
#### MODULES ####

module(load="imuxsock") # provides support for local system logging (e.g. via logger command)
module(load="imklog")   # provides kernel logging support (previously done by rklogd)
#module(load"immark")  # provides --MARK-- message capability

# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp" MaxSessions="500") # needs to be done just once
input(type="imtcp" port="514")
#以下为部分配置,可自己定义模板
$template  SpiceTmpl,"%msg:2:$%\n" #定义一个模块,去掉开头的空格
$template  ChannelmanageCatalinaDynaFile,"/home/yaoduwww/rsyslog/%fromhost-ip%/channelmanage/catalina_%$YEAR%-%$MONTH%-%$DAY%.log" #>定义>文件存储路径及名称,%%中间的为变量
$template  ChannelmanageInfoDynaFile,"/home/yaoduwww/rsyslog/%fromhost-ip%/channelmanage/channelmanage_%$YEAR%-%$MONTH%-%$DAY%.log" #定义文件存储路径及名称,%%中间的为变量
$template  ChannelmanageAcessDynaFile,"/home/yaoduwww/rsyslog/%fromhost-ip%/channelmanage/access_%$YEAR%-%$MONTH%-%$DAY%.log"
:rawmsg,contains,"catalina-10.10.16.254-8080" ?ChannelmanageCatalinaDynaFile;SpiceTmpl #contains过滤tag为catalina-10.139.54.53-8080日>志存>储到ChnnelmanageCatalinaDynaFile模板定义的日志中去
:rawmsg,contains,"channe-10.10.16.254-8080" ?ChannelmanageInfoDynaFile;SpiceTmpl
:rawmsg,contains,"access-10.10.16.254-8080" ?ChannelmanageAcessDynaFile;SpiceTmpl

3.3 重启服务,收集日志

    先重启服务端Rsyslog,然后重启客户端。命令:/etc/init.d/rsyslog restart

    服务端会生成日志目录及日志,当然首次会比较慢,有一个传输的过程。

    在客户端/home/yaoduwww/rsyslog目录下回发现传输的状态文件和队列文件

[root@web rsyslog]# ls -l
total 8
-rw------- 1 root root 271 Nov  3 16:58 imfile-state:-usr-local-tomcat-logs-catalina.out
-rw------- 1 root root 292 Nov  3 17:00 imfile-state:-usr-local-tomcat-logs-localhost_access_log.2017-11-03.txt

    state文件以imfile-state:开头,后面为日志路径,路径中的/以-替代。

[root@db01 ~]# tree /home/yaoduwww/rsyslog/
/home/yaoduwww/rsyslog/
└── 10.10.16.254
    └── channelmanage
        ├── access_2017-11-07.log
        ├── access_2017-11-08.log
        ├── catalina_2017-11-07.log
        └── catalina_2017-11-08.log

2 directories, 4 files

    服务端配置文件有一个规律,能接收到日志的tag定义的比较短,不能接收的tag定义的字符串都很长。通过将tag改短,重启服务后就能收到了日志。

    通过不断刷新浏览器,可以看到服务端业务成功日志收集:tailf /var/log/messages

    

 

    通过修改客户端/etc/rsyslog.d/tomcat-8080文件可以自定义针对不同目录下的日志文件进行收集

3.4 用户及用户权限管理

    创建 一个用户developer和用户组yaodu,使其有某个目录的执行权限

    创建用户组:#groupadd yaodu

    创建用户developer 并将其纳入 yaodu 用户组 : #useradd -G yaodu developer 

    设置developer用户的密码 :#passwd developer 

    更改developer用户的登录目录 #usermod -d /home/yaoduwww developer 

    改变目录yaoduwww 的 所属 用户和用户组 #chown -R developer:yaodu /home/yaoduwww/  #此处不需要手动授权,在rsyslog配置文件中配置模板即可自定义修改好权限。

    可以添加多个标签用于收集客户端的日志:

    

3.5 编写定时任务,自动根据日期进行日志采集

mkdir /server/scripts -p
vim /server/scripts/rsyslog.sh
#!/bin/bash
sed -i s"#/usr/local/tomcat/logs/localhost_access_log.*.txt#/usr/local/tomcat/logs/localhost_access_log.$(date +%Y-%m-%d).txt#g" /etc/rsyslog.d/tomcat-8080.conf
/etc/init.d/rsyslog restart
##此日志需要这样,catalina.out不需要,如果不需要收集access日志则不必执行这里的操作。
crontab -e
#change the rsyslog date 
00 00 * * * /bin/sh /server/scripts/rsyslog.sh   >/dev/null 2>&1

 

posted @ 2018-09-18 10:36  淺景尘  阅读(1969)  评论(0编辑  收藏  举报
TOP