分布式日志集中化(tomcat + rsyslog + logrotate + centos)

分布式日志集中化(tomcat + rsyslog + logrotate + centos) – 鱼会飞的技术专栏 – CSDN博客

大数据、分布式的时代,日志的分析管理尤为的重要,比如热门的三件套:Logstash、ElasticSearch、Kibana,可惜我对这些高大上的东西往往心存敬畏,不敢轻易触碰,相比较而言,我更喜欢能够快速上手的东西;本文主要介绍在centos的操作系统下,配置rsyslog进行日志的远程同步处理以及通过logrotatelai

rsyslog

老版本的liunx系统默认安装的是syslog, 这个不多做介绍,不知道的大家自行google脑补,我们这里主要介绍rsyslog的相关功能以及配置,rsyslog的详细介绍,请参考官网:http://www.rsyslog.com/


安装:

我以CentOS为例,说明如何通过RPM来安装Rsyslog:


1、查看操作系统版本,如果不是centos的操作系统,可能会存在问题:

     cat  /etc/redhat-release

2、查看是否安装了rsyslog,如果没有安装:

     检查:   rsyslog -v

     安装:yum install rsyslog

3、安装rsyslog 更高版本,centos不同版本默认安装的rsyslog的版本不一致,默认yum命令会安装最新版的版本,但由于资源地址的限制;需要配置最新版的资源地址,操作如下:

     查看可安装的版本:yum list rsyslog —show-duplicates

     卸载老版本:yum remove or erase package rsyslog

     资源文件下载:http://rpms.adiscon.com,下载 rsyslogall.repo文件或者对应版本中的rsyslog.repo问价,放到本机目录下:

     /etc/yum.repos.d/

     然后在执行:yum install rsyslog   就会安装你资源文件最新的rsyslog版本

启动:

     centos7 之前的版本,如果系统里有Syslog的话,那么在启动Rsyslog之前,别忘了先关闭它:

     

             关闭:syslog:service syslog stop
    

    启动:rsyslog:service rsyslog start


     centos 7:


启动:systemctl start rsyslog


    如果运行Rsyslog时出现问题,那么可以通过激活调试模式来查找原因:

    vi /etc/sysconfig/rsyslog   文件头部添加:SYSLOGD_OPTIONS=”-d -n”

配置:

    主题配置文件:/etc/rsyslog

    子配置文件配置在:/etc/rsyslog.d 目录下   

    
实例演示


在我们动手之前,有必要了解一下Rsyslog的工作流程,说起来非常简单:首先数据通过输入模块进入主队列,然后经由过滤条件分解到各个子队列,最后交给输出模块。


理解了Rsyslog的工作流程,我们就可以实例演示了,请听题:请把多台Web服务器上的tomcat日志发送到统一的App服务器。实际上log4j.log可以直接发Syslog请求。


设置Web服务器:

在目录:/etc/rsyslog.d 下新增 tomcat-log.conf文件,内容如下:

$ModLoad imfile
$InputFilePollInterval 1
$WorkDirectory /var/log/


## 指定日志格式模板:
$template BiglogFormatTomcat,”%msg%n”


## Tomcat的catalina.out路径,根据实际情况修改:
$InputFileName /mydata/tomcat-activitycenter/logs/catalina.out     
$InputFileTag activitycenter:
$InputFileStateFile stat-file1
$InputFileSeverity error
$InputFileFacility local1
$InputFilePersistStateInterval 20000
$RepeatedMsgReduction off
$InputRunFileMonitor


local1.*  @@xx.xx.xx.xx:514;BiglogFormatTomcat


通过imfile输入模块,我们引入文件,并且绑定Ruleset。不过需要说明的是,需要通过配置WorkDirectory来声明状态文件的保存位置,这个状态文件被用来记录扫描日志位置等信息,PersistStateInterval被用来控制状态文件的持久化频率,测试阶段,可以把它设置的小点儿,正式阶段,出于效率的考虑,可以把它调大点儿,但是相应的也会出现丢失数据的潜在风险,具体设置多少合适需要结合自己的情况来斟酌,其他的属性解释,参看官网。


设置App服务器:

1、首先查看514端口是否开通了tcp,详细参看文章:http://blog.sina.com.cn/s/blog_3eba8f1c0100tsox.html

2、vi  /etc/rsyslog.d,去掉tcp模块之前的注释:

module(load=”imtcp”) # needs to be done just once
input(type=”imtcp” port=”514″)

3、在文件位添加一下的模板:
$template filename, “/home/lvguanjia/%PROGRAMNAME%_%$year%_%$month%_%$day%.log”
$template format, “%HOSTNAME% -%msg%n”
local1.*    ?filename;format

分别重启客户端rsyslog以及服务端的rsyslog,查看客户端新增的日志行有没有写到服务端。

logrotate:

logrotate这里我一用于删除服务器上多余的日志,tomcat配置文件如下,只保留当天的日志文件:

/home/lvguanjia/*.log {
    daily
    dateext
    rotate 0
    maxage 1
    missingok
}

测试脚本是否正确执行,调试模式:logrotate -d -f tomcat

非调试模式:logrotate -f tomcat




技术人的成长   

关注技术人的成长,一起聊聊架构、产品、运营、创业