zoukankan      html  css  js  c++  java
  • rsyslog 传输日志

    文章转载自:

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

    https://segmentfault.com/a/1190000003509909#articleHeader1

    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也比较长,估计就没这么幸运发现问题所在了。

  • 相关阅读:
    初学版本控制更新Version control
    关于函数式编程(Functional Programming)
    Annotation
    Container 、Injection
    Build Tools
    Version Control
    URL和URI的区别
    函数式编程语言
    HTTP协议的简单解析
    Windows10安装MySQL8.0
  • 原文地址:https://www.cnblogs.com/smail-bao/p/8603263.html
Copyright © 2011-2022 走看看