zoukankan      html  css  js  c++  java
  • Rsyslog日志服务搭建

    rsyslog是比syslog功能更强大的日志记录系统,可以将日志输出到文件,数据库和其它程序。Centos 6.x默认的rsyslog版本是5.x。

    网上关于rsyslog的安装配置文档倒是不少,但大多数都是一些基础配置,可参考的价值不大。另外如何收集多台多tomcat应用日志的文档更是几乎没有,断断续续折腾了几天,总算有了一个结果,下面就关于如何配置收集tomcat及其下面部署的程序日志进行说明。

    一、升级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

    升级完成后,版本为8.26.0

    $ rsyslogd -v
    rsyslogd 8.26.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.

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

    二、客户端配置

    1、防火墙配置

    如果启用了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协议,想对比看看哪种更适合我们的环境,因此所有服务器都建立了以上两条规则。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="Rsyslog服务端主机IP"
                          port="514" #端口
                            protocol="tcp" #使用协议
                            queue.type="linkedList" #使用异步处理 
                            queue.spoolDirectory="/app/wutongshu/rsyslog" #队列目录
                            queue.fileName="remoteQueue_10_139_54_53" #队列名称
                            queue.maxDiskSpace="5g" #队列占最大磁盘空间
                            queue.saveOnShutdown="on" #保存内存数据如果rsyslog关闭
                            action.resumeRetryCount="-1" #无限重试插入失败
                  )
            stop
    }

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

    $WorkDirectory /app/wutongshu/rsyslog  #默认为/var/lib/rsyslog
    
    input(type="imfile"
            File="/app/wutongshu/tomcat-8080/logs/catalina.out"  #日志路径
            #StateFile="catalina.out-8080"  #新版本中不需要设置
            Facility="local1"
            Severity="info"
            Tag="catalina-10.139.54.53-8080" #定义日志标签,重要,服务端根据这个标签可以识别日志
            PersistStateInterval="1" #回写偏移量数据到文件间隔时间(秒),根据实际情况而定
            Ruleset="remote" #rsyslog.conf中定义的rule名称
            )
    
    #########################################################################
    
    input(type="imfile"
            File="/app/wutongshu/log/channelmanage/channelinfo.log"
            #StateFile="channelmanage-8080"
            Facility="local2"
            Severity="info"
            Tag="channe-10.139.54.53-8080"
            PersistStateInterval="1"
            Ruleset="remote"
            )
    
    #########################################################################
    
    input(type="imfile"
            File="/app/wutongshu/log/channelmanage/channelerror.log"
            #StateFile="channelmanage-error-8080"
            Facility="local3"
            Severity="info"
            Tag="channelerror-10.139.54.53-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文件中,不然的话日志量大很容将/根目占满,后果可想而知。

     三、服务端配置

    1、防火墙配置

    与客户端一致:

    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

    2、配置rsyslog

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

    $PreserveFQDN on #用于正确的获取主机名,暂时应该没用到
    $FileOwner wutongshu #存储的文件属主
    $FileGroup app  #文件属主
    $FileCreateMode 0644 #生成的文件权限
    $DirCreateMode 0755 #生成的目录权限
    $Umask 0022 
    $PrivDropToUser root #可以删除日志的用户
    $PrivDropToGroup root #可以删除日志的用户组
    module(load="imuxsock")
    module(load="imklog")
    module(load="imudp")
    input(type="imudp" port="514")
    module(load="imtcp" MaxSessions="500")
    input(type="imtcp" port="514")
    
    
    #以下为部分配置
    $template  SpiceTmpl,"%msg:2:$%
    " #定义一个模块,去掉开头的空格
    $template  ChannelmanageCatalinaDynaFile,"/app/wutongshu/rsyslog/%fromhost-ip%/channelmanage/catalina_%$YEAR%-%$MONTH%-%$DAY%.log" #定义文件存储路径及名称,%%中间的为变量
    $template  ChannelmanageInfoDynaFile,"/app/wutongshu/rsyslog/%fromhost-ip%/channelmanage/channelmanage_%$YEAR%-%$MONTH%-%$DAY%.log" #定义文件存储路径及名称,%%中间的为变量
    $template  ChannelmanageErrorDynaFile,"/app/wutongshu/rsyslog/%fromhost-ip%/channelmanage/error_%$YEAR%-%$MONTH%-%$DAY%.log"
    
    :rawmsg,contains,"catalina-10.139.54.53-8080" ?ChannelmanageCatalinaDynaFile;SpiceTmpl #contains过滤tag为catalina-10.139.54.53-8080日志存储到ChnnelmanageCatalinaDynaFile模板定义的日志中去
    :rawmsg,contains,"channe-10.139.54.53-8080" ?ChannelmanageInfoDynaFile;SpiceTmpl
    :rawmsg,contains,"channelerror-10.139.54.53-8080" ?ChannelmanageErrorDynaFile;SpiceTmpl

    四、重启服务,收集日志

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

    /etc/init.d/rsyslog restart

    如果不出意外,服务端会成日志目录及日志,当然首次会比较慢,有一个传输的过程。

    在客户端../rsyslog目录下会发现传输的状态文件和队列文件:

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

    最后展示下服务端收集日志的部分效果图:

    遇到的坑:配置第一台客户端在服务端所有日志服务端都正常能接收到,后面配置的几台只能收到catalina.out日志,其它日志死活不行,配置检查了很多遍,来回测试了很多遍,然后花了很长时间看官网文档,始终没有找到原因。在快要放弃的时候发现服务端配置文件一个规律,能接收到日志的tag定义的比较短,不能接收的tag定义的字符串都很长。之后随便找了一台,将tag改短,重启服务后果然收到了日志。真是坑。。如果一开始定义的tag也比较长,估计就没这么幸运发现问题所在了。

  • 相关阅读:
    Oracle 推出 ODAC for Entity Framework 和 LINQ to Entities Beta版
    Entity Framework Feature CTP 5系列文章
    MonoDroid相关资源
    MSDN杂志上的Windows Phone相关文章
    微软学Android Market推出 Web Windows Phone Marketplace
    使用 Visual Studio Agent 2010 进行负载压力测试的安装指南
    MonoMac 1.0正式发布
    Shawn Wildermuth的《Architecting WP7 》系列文章
    使用.NET Mobile API即51Degrees.mobi检测UserAgent
    MongoDB 客户端 MongoVue
  • 原文地址:https://www.cnblogs.com/Eivll0m/p/6700828.html
Copyright © 2011-2022 走看看