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.2542.1 升级rsyslog
操作系统是Centos 6.8,默认安装的Rsyslog版本是5.8.10,可通过rsyslogd -v命令查看:
# rsyslogd -vrsyslogd 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): NoSee 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 -vrsyslogd 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: 64See 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 onceinput(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:514port="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.htmlmodule(load="imudp") # needs to be done just onceinput(type="imudp" port="514")# Provides TCP syslog reception# for parameters see http://www.rsyslog.com/doc/imtcp.htmlmodule(load="imtcp" MaxSessions="500") # needs to be done just onceinput(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 -ltotal 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.log2 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 -pvim /server/scripts/rsyslog.sh#!/bin/bashsed -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