第1章 简介
1.1 Rsyslog介绍
rsyslog是比syslog功能更强大的日志记录系统,可以将日志输出到文件,数据库和其它程序。
ryslog 是一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计。rsyslog 是syslog 的升级版,它将多种来源输入输出转换结果到目的地,并可定制和过滤、筛选。据官网介绍,现在可以处理100万条信息。
特性:
1、可以直接将日志写入到数据库。
2、日志队列(内存队列和磁盘队列)。
3、灵活的模板机制,可以得到多种输出格式。
4、插件式结构,多种多样的输入、输出模块。
5、可以把日志存放在Mysql ,PostgreSQL,Oracle等数据库中
http://www.cnblogs.com/Eivll0m/p/6700828.html
LogAnalyzer介绍
LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端。它提供了对日志的简单浏览、搜索、基本分析和一些图表报告的功能。数据可以从数据库或一般的syslog文本文件中获取,所以LogAnalyzer不需要改变现有的记录架构。基于当前的日志数据,它可以处理syslog日志消息,Windows事件日志记录,支持故障排除,使用户能够快速查找日志数据中看出问题的解决方案。
LogAnalyzer 获取客户端日志会有两种保存模式,一种是直接读取客户端/var/log/目录下的日志并保存到服务端该目录下,一种是读取后保存到日志服务器数据库中,推荐使用后者。
LogAnalyzer和LogZilla是分析系统日志,并用web界面展示的的工具,一般只用在syslog,syslog-ng,rsyslog日志系统中
LogAnalyzer 采用php开发,所以日志服务器需要php的运行环境,本文采用LNMP。
1.2 Rsyslog工作流程
简单的来说:首先数据通过输入模块进入主队列,然后经由过滤条件分解到各个子队列,最后交给输出模块。
1.3Rsyslog日志服务器的优势
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
LogAnalyzer 版本:LogAnalyzer 3.6.5 (v3-stable)
防火墙已关闭/iptables:Firewall is not running.
SELINUX=disabled
Rsyslog Client OS:RHEL 6.4
Rsyslog Client IP:10.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.
使用yum对rsyslog进行升级(需要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端口接收使用UDP和TCP协议转发过来的日志
服务端支持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里面配置如下信息:
注意:开启udp、tcp协议
#指定使用设备名称和日志级别对系统日志进行过滤,日志文件名是年月日时.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过滤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
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端口接收使用UDP和TCP协议转发过来的日志
#$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