第1章 简介

1.1 Rsyslog介绍

  rsyslog是比syslog功能更强大的日志记录系统,可以将日志输出到文件,数据库和其它程序。

ryslog 是一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计。rsyslog syslog 的升级版,它将多种来源输入输出转换结果到目的地,并可定制和过滤、筛选。据官网介绍,现在可以处理100万条信息。

特性:

1、可以直接将日志写入到数据库。

   2、日志队列(内存队列和磁盘队列)。

   3、灵活的模板机制,可以得到多种输出格式。

   4、插件式结构,多种多样的输入、输出模块。

   5、可以把日志存放在Mysql PostgreSQLOracle等数据库中

http://www.cnblogs.com/Eivll0m/p/6700828.html

LogAnalyzer介绍

LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端。它提供了对日志的简单浏览、搜索、基本分析和一些图表报告的功能。数据可以从数据库或一般的syslog文本文件中获取,所以LogAnalyzer不需要改变现有的记录架构。基于当前的日志数据,它可以处理syslog日志消息,Windows事件日志记录,支持故障排除,使用户能够快速查找日志数据中看出问题的解决方案。

LogAnalyzer 获取客户端日志会有两种保存模式,一种是直接读取客户端/var/log/目录下的日志并保存到服务端该目录下,一种是读取后保存到日志服务器数据库中,推荐使用后者。

LogAnalyzerLogZilla是分析系统日志,并用web界面展示的的工具,一般只用在syslog,syslog-ng,rsyslog日志系统中

LogAnalyzer 采用php开发,所以日志服务器需要php的运行环境,本文采用LNMP

1.2 Rsyslog工作流程


简单的来说:首先数据通过输入模块进入主队列,然后经由过滤条件分解到各个子队列,最后交给输出模块。

1.3Rsyslog日志服务器的优势

1、日志统一,集中式管理 

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

 

 

 

 

第2章 系统环境


Rsyslog Server OSCentOS 6.8

Rsyslog Server IP10.10.16.253

Rsyslog 版本:rsyslog-8.30.0-8.el6.i686

LogAnalyzer 版本:LogAnalyzer 3.6.5 (v3-stable)

防火墙已关闭/iptables:Firewall is not running.

SELINUX=disabled

Rsyslog Client OSRHEL 6.4

Rsyslog Client IP10.10.16.254

第3章 实践部署

3.1 升级Rsyslog

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

# rsyslogd -v

rsyslogd 5.8.10, compiled with:

         FEATURE_REGEXP:                                   Yes

         FEATURE_LARGEFILE:                   No

         GSSAPI Kerberos 5support:              Yes

         FEATURE_DEBUG (debugbuild, slow code):  No

         32bit Atomicoperations supported:  Yes

         64bit Atomicoperations supported:  Yes

         RuntimeInstrumentation (slow code):      No

See http://www.rsyslog.com for more information.

使用yumrsyslog进行升级(需要root权限)

# cd /etc/yum.repos.d

# wgethttp://rpms.adiscon.com/v8-stable/rsyslog.repo   

# yum update rsyslog

升级完成之后,版本为8.30.0

# rsyslogd-v

rsyslogd 8.30.0, compiled with:

         PLATFORM:                                x86_64-redhat-linux-gnu

         PLATFORM(lsb_release -d):            

         FEATURE_REGEXP:                                   Yes

         GSSAPIKerberos 5 support:              No

         FEATURE_DEBUG(debug build, slow code):  No

         32bitAtomic operations supported:  Yes

         64bitAtomic operations supported:  Yes

         memoryallocator:                      systemdefault

         RuntimeInstrumentation (slow code):      No

         uuidsupport:                                Yes

         Numberof Bits in RainerScript integers: 64

See http://www.rsyslog.com for more information.

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

 

3.2 服务端配置

开启相关日志模块

# vi /etc/rsyslog.conf

$ModLoad immark   #immark是模块名,支持日志标记

$ModLoad imudp   #imupd是模块名,支持udp协议

$UDPServerRun 514   #允许514端口接收使用UDPTCP协议转发过来的日志 

服务端支持rsyslog-mysql模块,可开启UDP服务端口获取网内其他LINUX系统日志

# vi /etc/rsyslog.conf

$ModLoad ommysql

*.* :ommysql:localhost,Syslog,rsyslog,123456

#### MODULES #### 下添加上面两行。

说明:localhost 表示本地主机,Syslog 为数据库名,rsyslog 为数据库的用户,123456为该用户密码。

重启rsyslog 服务

# /etc/init.d/rsyslog restart

3.3 客户端配置

  • 防火墙配置

如果启用了iptables防火墙,注意开放默认的514端口,也可以配置文件使用其他端口。

iptables -A INPUT -m state --state NEW -m udp -pudp -i eth0 --dport 514 -j ACCEPT

iptables -A INPUT -m state --state NEW -m tcp -ptcp -i eth0 --dport 514 -j ACCEPT

说明:rsyslog可以通过tcp协议传输日志,也可以通过udp协议传输。有些服务器我采用的tcp协议,有些用了udp协议,想对比看看哪种更适合我们的环境,因此所有服务器都建立了以上两条规则。

  • 配置rsyslog

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

module(load="imuxsock")

module(load="imklog")

#module(load="imfile")

#使用udp协议

module(load="imudp")

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

#使用tcp协议

module(load="imtcp") # needs to be donejust once

input(type="imtcp" port="514")配置rsyslog 客户端发送本地日志到服务端

# vi /etc/rsyslog.conf

*.*@@10.10.16.253:254

行尾新增上面这行内容,即客户端将本地日志发送到服务器。

重启rsyslog 服务

# /etc/init.d/rsyslog restart

编辑/etc/bashrc,将客户端执行的所有命令写入系统日志/var/log/messages中。

# vi /etc/bashrc

在文件尾部增加一行

export PROMPT_COMMAND='{ msg=$(history 1 | { read xy; echo $y; });logger "[euid=$(whoami)]":$(who ami):[`pwd`]"$msg"; }'

设置其生效

# source /etc/bashrc

客户端配置完毕。

3.4 测试rsyslog server是否可以正常接收client端日志

Client 端测试:

输入任何命令即可

Server端侦测:tailf /var/log/messages


说明接收正常,包括你重启机器的一些Log都可以查到

这只是简单的采集系统日志,并不是我们想要的,以下介绍对tomcat日志进行采集

3.5 利用rsyslog对非系统日志进行远程传输

在客户端的/etc/rsyslog.conf添加如下信息

$ModLoad imfile # needs to be done just once 引入模板

# logstash - test - remote send file.测试远程发送日志

$InputFileName /usr/local/tomcat/logs/catalina.out#指定监控日志文件

$InputFilePollInterval 10 #指定每10秒轮询一次文件

$InputFileTag 10.10.16.254 #指定文件的tag,随便写即可

$InputFileStateFile /var/lib/rsyslog/10.10.16.254.log#指定状态文件存放位置,如不指定会报错。

$InputFileSeverity info #设置监听日志级别

$InputFileFacility local1 #指定设备

$InputRunFileMonitor #启动此监控,没有此项,上述配置不生效。

 

 

*.*                    @@10.10.16.253:514    #远程发送源tcp协议远程发送

代码说明:

利用以上模板对客户端内应用日志进行监控,并将日志文件每十秒扫描一次,发送至远程服务器,可以在远程服务器配置过滤条件,将日志文件进行分级别保存。

修改完毕请重启rsyslog/etc/init.d/rsyslog restart

在服务器端的/etc/rsyslog.conf里面配置如下信息

注意:开启udptcp协议

#指定使用设备名称和日志级别对系统日志进行过滤,日志文件名是年月日时.log

$templateRemoteSyslogfacility-textSys,"/data/log/%syslogfacility-text%/%syslogseverity-text%/%$year%_%$month%_%$day%_%$hour%.log"

:syslogfacility-text, !isequal, "local1"?RemoteSyslogfacility-textSys

 

#指定使用设备名称、日志tag信息和日志级别对系统日志进行过滤,日志文件名是年月日时.log

$templateRemoteSyslogfacility-textApp,"/data/log/%syslogfacility-text%/%syslogtag%/%syslogseverity-text%/%$year%_%$month%_%$day%_%$hour%.log"

:syslogfacility-text,isequal, "local1" ?RemoteSyslogfacility-textApp

#重启rsyslog,在/data/log目录下可以看到生成了部分客户端的日志文件

[root@yd ~]# tree /data/log/

/data/log/

├── cron

│  └── info

│       └── 2017_10_26_16.log

├── kern

│  └── info

│       ├── 2017_10_26_15.log

│       └── 2017_10_26_16.log

├── local1

│  └── 10.0.0.50

│       └── info

│           ├── 2017_10_26_15.log

│           └── 2017_10_26_16.log

├── messages

├── syslog

上述配置通过模板指定过滤条件,过滤条件可以自己指定。

通过启动和关闭tomcat,在server端可以实时看到client端实时日志输出情况:

tailf /var/log/messages

tailf/data/log/local1/10.0.0.50/info/2017_10_26_16.log   #也可以看到日志输出同上

 

客户端和服务端配置文件展示:

服务端

[root@yd ~]# grep -v "^#"/etc/rsyslog.conf | grep -v "^$"

module(load="imuxsock") # providessupport for local system logging (e.g. via logger command)

module(load="imklog")   # provides kernel logging support(previously done by rklogd)

module(load="imudp") # needs to be donejust once

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

module(load="imtcp") # needs to be donejust once

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

$templateRemoteSyslogfacility-textSys,"/data/log/%syslogfacility-text%/%syslogseverity-text%/%$year%_%$month%_%$day%_%$hour%.log"

:syslogfacility-text, !isequal, "local1"?RemoteSyslogfacility-textSys

$templateRemoteSyslogfacility-textApp,"/data/log/%syslogfacility-text%/%syslogtag%/%syslogseverity-text%/%$year%_%$month%_%$day%_%$hour%.log"

:syslogfacility-text, isequal, "local1"?RemoteSyslogfacility-textApp

$ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat

$IncludeConfig /etc/rsyslog.d/*.conf

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

authpriv.*                                              /var/log/secure

mail.*                                                 /var/log/maillog

cron.*                                                 /var/log/cron

*.emerg                                                 :omusrmsg:*

uucp,news.crit                                         /var/log/spooler

local7.*                                               /var/log/boot.log

客户端

[root@jenkins logs]# grep -v "^#"/etc/rsyslog.conf | grep -v "^$"

module(load="imuxsock") # providessupport for local system logging (e.g. via logger command)

module(load="imklog")   # provides kernel logging support(previously done by rklogd)

$ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat

$IncludeConfig /etc/rsyslog.d/*.conf

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

authpriv.*                                             /var/log/secure

mail.*                                                 /var/log/maillog

cron.*                                                  /var/log/cron

*.emerg                                                :omusrmsg:*

uucp,news.crit                                         /var/log/spooler

local7.*                                               /var/log/boot.log

$ModLoad imfile # needs to be done just once 引入模板

$InputFileName /usr/local/tomcat/logs/catalina.out#指定监控日志文件

$InputFilePollInterval 10 #指定每10秒轮询一次文件

$InputFileTag 10.10.16.254 #指定文件的tag,随便写即可

$InputFileStateFile/var/lib/rsyslog/10.10.16.254.log #指定状态文件存放位置,如不指定会报错。

$InputFileSeverity info #设置监听日志级别

$InputFileFacility local1 #指定设备

$InputRunFileMonitor #启动此监控,没有此项,上述配置不生效。

*.*                    @@10.10.16.253:514    #远程发送源tcp协议远程发送

注:修改之前一定对原文件进行备份

server端执行命令:

tailf /var/log/messages            或者   tailf /data/log/local1/ 2017_10_27_15.txt

在客户端执行命令:

tailf `pwd`/localhost_access_log.2017-10-27.txt               

通过访问浏览器可以查看日志有输出

客户端:

 

第4章 收集多台多tomcat应用日志

4.1 客户端配置

1、防火墙配置/etc/sysconfig/iptables

如果启用了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 -ptcp -i eth0 --dport 514 -j ACCEPT

说明:rsyslog可以通过tcp协议传输日志,也可以通过udp协议传输。有些服务器我采用的tcp协议,有些用了udp协议,想对比看看哪种更适合我们的环境,因此所有服务器都建立了以上两条规则。eth0是内网网卡。

 

2、配置rsyslog

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

module(load="imuxsock")

module(load="imklog")

module(load="imfile")

#使用udp协议

module(load="imudp")

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

#使用tcp协议

module(load="imtcp"MaxSessions="500")

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

#新增配置

ruleset(name="remote"){

action(type="omfwd"

target="10.10.16.224"

port="514" #端口

protocol="tcp" #使用协议

queue.type="linkedList" #使用异步处理

queue.spoolDirectory="/app/wangyouyao/rsyslog"#队列目录

queue.fileName="remoteQueue_10_10_16_225"#队列名称

queue.maxDiskSpace="5g" #队列占最大磁盘空间

queue.saveOnShutdown="on" #保存内存数据如果rsyslog关闭

action.resumeRetryCount="-1" #无限重试插入失败

    )

stop

}

3、新增子配置文件:/etc/rsyslog.d/tomcat-8080.conf

[root@web rsyslog]# cat/etc/rsyslog.d/tomcat-8080.conf

$WorkDirectory/app/wangyouyao/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/host-manager.2017-11-08.log"

        #StateFile="host-manage-8080"

        Facility="local2"

        Severity="info"

       Tag="channe-10.10.16.254-8080"

        PersistStateInterval="1"

        Ruleset="remote"

        )

 

#########################################################################

 

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,跟上面类似,只是应用不同,日志路径,端口不同。

4、最后在/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文件中,不然的话日志量大很容将/根目占满,后果可想而知。

4.2 服务端配置

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

$PreserveFQDN on #用于正确的获取主机名,暂时应该没用到

#$FileOwner wangyouyao #存储的文件属主

#$FileGroup app #文件属主

$FileCreateMode 0644 #生成的文件权限

$DirCreateMode 0755 #生成的目录权限

$Umask 0022

$PrivDropToUser root #可以删除日志的用户

$PrivDropToGroup root #可以删除日志的用户组

#### MODULES ####

 

module(load="imuxsock") # providessupport 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 seehttp://www.rsyslog.com/doc/imudp.html

module(load="imudp") # needs to be donejust 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,"/app/wangyouyao/rsyslog/%fromhost-ip%/channelmanage/catalina_%$YEAR%-%$MONTH%-%$DAY%.log"#>定义>文件存储路径及名称,%%中间的为变量

$template  ChannelmanageInfoDynaFile,"/app/wangyouyao/rsyslog/%fromhost-ip%/channelmanage/channelmanage_%$YEAR%-%$MONTH%-%$DAY%.log"#定义文件存储路径及名称,%%中间的为变量

$template  ChannelmanageAcessDynaFile,"/app/wangyouyao/rsyslog/%fromhost-ip%/channelmanage/access_%$YEAR%-%$MONTH%-%$DAY%.log"

:rawmsg,contains,"catalina-10.10.16.254-8080"?ChannelmanageCatalinaDynaFile;SpiceTmpl#contains过滤tagcatalina-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

 

 

4.3 重启服务,收集日志

先重启服务端Rsyslog,然后重启客户端。命令:

/etc/init.d/rsyslog restart

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

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

[root@web rsyslog]# ll

total 8

-rw------- 1 root root 271 Nov  3 16:58imfile-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 /app/wangyouyao/rsyslog/

/app/wangyouyao/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

 

2directories, 4 files

 

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

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


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


 

第5章 Rsyslog配置文件详解

#### MODULES 日志的模块####

$ModLoad imuxsock   #imuxsock是模块名,支持本地系统日志的模块

$ModLoad imklog     #imklog是模块名,支持内核日志的模块

#module(load="imfile")   #文本文件输入模块,提供转换任何标准输入文件为一个syslog消息(客)

#$ModLoad immark    #immark是模块名,支持日志标记

#$ModLoad imudp     #imupd是模块名,支持udp协议

#$UDPServerRun 514  #允许514端口接收使用UDPTCP协议转发过来的日志

#$ModLoad imtcp     #imtcp是模块名,支持tcp协议

#$InputTCPServerRun 514

#### GLOBAL DIRECTIVES ####定义全局日志格式的指令

$ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat #定义日志格式默认模板

$IncludeConfig /etc/rsyslog.d/*.conf   #载入rsyslog.d文件中所有以conf结尾的文件

#### RULES ####

*.info;mail.none;authpriv.none;cron.none    /var/log/messages

#####记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间#任务相关的信息除外

authpriv.*             /var/log/secure

#####authpriv验证相关的所有信息存放在/var/log/secure

mail.*                -/var/log/maillog

#####邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大

cron.*                /var/log/cron

####计划任务有关的信息存放在/var/log/cron

*.emerg                * (*表示所有用户)

###记录所有的大于等于emerg级别信息, wall方式发送给每个登录到系统的人

uucp,news.crit        /var/log/spooler

####记录uucp,news.crit等存放在/var/log/spooler

local7.*              /var/log/boot.log

####本地服务器的启动的所有日志存放在/var/log/boot.log

###rsyslog.conf中日志规则的定义的格式

facitlity.priority          Target

#facility: 日志设备(可以理解为日志类型):

==============================================================

auth        #pam产生的日志,认证日志

authpriv    #ssh,ftp等登录信息的验证信息,认证授权认证

cron        #时间任务相关

kern        #内核

lpr         #打印

mail        #邮件

mark(syslog) #rsyslog服务内部的信息,时间标识

news        #新闻组

user        #用户程序产生的相关信息

uucp        #unix to unix copy, unix主机之间相关的通讯

local 1~7   #自定义的日志设备

===============================================================

#priority: 级别日志级别:

=====================================================================

debug           #有调式信息的,日志信息最多

info            #一般信息的日志,最常用

notice          #最具有重要性的普通条件的信息

warning, warn   #警告级别

err, error      #错误级别,阻止某个功能或者模块不能正常工作的信息

crit            #严重级别,阻止整个系统或者整个软件不能正常工作的信息

alert           #需要立刻修改的信息

emerg, panic    #内核崩溃等严重信息

###从上到下,级别从低到高,记录的信息越来越少,如果设置的日志内性为err,则日志不会记录比err级别低的日志,只会记录比err更高级别的日志,也包括err本身的日志。

=====================================================================

Target

  #文件, /var/log/messages

  #用户, root*(表示所有用户)

  #日志服务器,@172.16.22.1

  #管道        | COMMAND

Lognanlyzer请参考:

http://blog.csdn.net/u010781856/article/details/47444485

http://www.cnblogs.com/mchina/p/linux-centos-rsyslog-loganalyzer-mysql-log-server.html