zoukankan      html  css  js  c++  java
  • rsyslog的安装、使用、详解

    操作系统:CentOS release 6.7

    download yum repo file:rsyslogall.repo

    [rsyslog-v8-stable]
    name=Adiscon Rsyslog v8-stable for CentOS-$releasever-$basearch
    baseurl=http://rpms.adiscon.com/v8-stable/epel-$releasever/$basearch
    enabled=1
    gpgcheck=0
    protect=1

    安装:

    yum clean all
    yum makecache
    yum install rsyslog

    检查:

    配置文件解析:

        Rsyslogd的配置文件是/etc/rsyslog.conf,一般在/etc目录下,先看看rsyslog client的配置:

    # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
    # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
    
    global(net.enableDNS = "on")
    global(net.ipprotocol = "ipv4-only")
    global(debug.onShutdown = "on")
    #max maxMessageSize 32K,default 8K
    $maxMessageSize      16K
    
    #### MODULES ####
    
    #提供本地系统日志记录,比如使用logger模拟发送日志
    module(load="imuxsock") 
    
    #提供内核级别的日志记录
    module(load="imklog")   
    
    #提供标记message的能力
    #module(load"immark")  
    
    # Provides UDP syslog reception
    #提供UDP的514端口来接收UDP协议发送过来的数据
    module(load="imudp") 
    input(type="imudp" port="514")
    
    # Provides TCP syslog reception
    #提供TCP的514端口来接收TCP协议发送过来的数据
    #module(load="imtcp") 
    #input(type="imtcp" port="514")
    
    
    #### GLOBAL DIRECTIVES ####
    
    #设置默认的timestamp格式
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    
    #文件同步功能默认被禁止了,一般情况下不需要这种功能
    #$ActionFileEnableSync on
    
    # Include all config files in /etc/rsyslog.d/
    $IncludeConfig /etc/rsyslog.d/*.conf
    
    
    #### RULES ####
    
    #记录所有的kernel日志到console.
    #kern.*                                                 /dev/console
    
    #记录所有事件日志级别大于info的日志到/var/log/message,但是mail、authpriv、cron的日志除外
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    
    #authpriv相关的日志存放到/var/log/secure
    authpriv.*                                              /var/log/secure
    
    #邮件相关的日志存放到/var/log/maillog
    mail.*                                                  /var/log/maillog
    
    #定时任务的日志存放到/var/log/cron
    cron.*                                                  /var/log/cron
    
    #所有级别大于emerg的信息,每个人都会看到
    *.emerg                                                 :omusrmsg:*
    
    #在一个特殊的文件里面保存crit或者级别更高的uucp日志
    uucp,news.crit                                          /var/log/spooler
    
    #记录启动信息到/var/log/boot.log
    local7.*                                                /var/log/boot.log
    
    #所有日志发送到远程rsyslog服务器,@表示UDP协议,@@表示TCP协议
    *.*                                                     @172.16.20.193:514
    
    # ### begin forwarding rule ###
    # An on-disk queue is created for this action. If the remote host is
    # down, messages are spooled to disk and sent when it is up again.
    #$WorkDirectory /var/lib/rsyslog # where to place spool files
    #$ActionQueueFileName fwdRule1 # unique name prefix for spool files
    #$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
    #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
    #$ActionQueueType LinkedList   # run asynchronously
    #$ActionResumeRetryCount -1    # infinite retries if host is down
    # ### end of the forwarding rule ###

        大部分的参数都已经解释了,下面主要看看RULES中日志格式的指定,一般是:日志类型(连接符号)日志级别   日志处理方式

    日志类型:

    auth        –pam产生的日志
    authpriv    –ssh,ftp等登录信息的验证信息
    cron        –时间任务相关
    kern        –内核
    lpr         –打印
    mail        –邮件
    mark(syslog)–rsyslog服务内部的信息,时间标识
    news        –新闻组
    user        –用户程序产生的相关信息
    uucp        –unix to unix copy, unix主机之间相关的通讯
    local 1~7   –自定义的日志设备

    连接符号:

    .xxx: 表示大于等于xxx级别的信息
    .=xxx:表示等于xxx级别的信息
    .!xxx:表示在xxx之外的等级的信息

    日志级别:

    级别从低到高,记录的信息越来越少
    debug       –有调式信息的,日志信息最多
    info        –一般信息的日志,最常用
    notice      –最具有重要性的普通条件的信息
    warning     –警告级别
    err         –错误级别,阻止某个功能或者模块不能正常工作的信息
    crit        –严重级别,阻止整个系统或者整个软件不能正常工作的信息
    alert       –需要立刻修改的信息
    emerg       –内核崩溃等严重信息
    none        –什么都不记录

    处理方式:

    /var/log/file	发送到日志文件
    @@192.168.0.1	发送到TCP server
    @192.168.0.1	发送到UDP server
    user1,user2	    发送到在线用户user1,user2
    ~		        丢弃该日志
    ^/path/script	执行的脚本,^后面跟可以执行的脚本,日志内容可以作为脚本的第一个参数,可以用来触发告警

        上面就是Rsyslog client的基本配置,其中一些高级功能并没有介绍,在下面的Rsyslog server中会做介绍。server的配置只需要在client上增加少许即可:

    #$template TmplMsg, "/var/log/rsyslog_custom/%HOSTNAME%/%PROGRAMNAME%.log"
    template(name="FTM" type="string" string="/var/log/rsyslog_custom/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%/%PROGRAMNAME%.log") 
    *.*   ?FTM
    

        增加的这一步就是为了分离各个client汇报上来的数据,存放在不同的目录,使用到了模板技术,关于模板的官方解释看这里:template

    Templates:允许你设置自己的格式,也可以用来生成动态文件,每一个rsyslog的输出都会用到Templates,可以指定多个模板,不同的日志输出到不同的模板,如果没有指定Templates,则系统会使用默认的Templates,可以使用老版本的配置语法$template,也可以使用新版本的配置语法template(),官方建议还是使用新语法。

    $template:

        语法格式:$template name,param[,options]

        name是指定模板的名称,param是指定模板的内容

    $template TmplMsg, "/var/log/rsyslog_custom/%HOSTNAME%/%PROGRAMNAME%.log"

            TmplMsg就是模板名称,后面的是文件名称,中间“”之间的是内部变量,后面会介绍。

        系统中有一些内置的保留模板,他们使用RSYSLOG_开头的模板名称,有如下:

            RSYSLOG_TraditionalFileFormat
            RSYSLOG_FileFormat 
            RSYSLOG_TraditionalForwardFormat
            RSYSLOG_SysklogdFileFormat 
            RSYSLOG_ForwardFormat 
            RSYSLOG_SyslogProtocol23Format 
            RSYSLOG_DebugFormat 

    template():

        语法格式 :基本的配置语法是template(parameters),还支持一种扩展的格式template(parameters) { list-descriptions }

        template()用来定义templates,这是一个静态配置,parameter主要有两个参数:name和type。

            name:指定模板的名称,必须是唯一的。

            type:指定模板的类型,不同的模板类型指定了不同的模板指定方法,一般有list、subtree、string、plugin四中类型。

        其中string类型的比较常用,我们就以string为例:

    template (name="tpl3" type="string" string="%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%
    ")
    template (name="TraditionalFormat" type="string" string="%timegenerated% %HOSTNAME% %syslogtag%%msg%\n")
    template (name="DynFile" type="string" string="/var/log/system-%HOSTNAME%.log")

            上面%%之间的大写变量是可以替换的,:::后面跟的是一些属性。

    Properties:

        data items在rsyslog中叫做properties,一般用在templates(就是%%之间的变量)或者条件判断中。详细的看:Properties。主要有三种Properties:

        Message Properties:

    msg			        匹配message中的msg部分
    rawmsg			    从socket收到的信息,一般用来debug
    rawmsg-after-pri	和rawmsg类似,但是syslog PRI被移除了
    hostname		    message的主机名
    source			    HOSTNAME的别名
    fromhost		    message来源的主机名,一般是用在relay chain中
    fromhost-ip		    同fromhost,不过获取的是ip
    syslogtag		    message的tag
    programname		    是tag的静态部分,例如tag是named[123456],则programname是named
    pri			        message的PRI,undecoded格式
    pri-text		    text格式的PRI
    syslogfacility		the facility from the message - in numerical form
    syslogfacility-text	the facility from the message - in text form
    syslogseverity		severity from the message - in numerical form
    syslogseverity-text	severity from the message - in text form
    timegenerated		timestamp when the message was RECEIVED. message被本地syslog接收到的时间
    timereported		timestamp from the message,包含message被创建的时间
    timestamp		    alias for timereported

        System Properties:

    $bom			The UTF-8 encoded Unicode byte-order mask (BOM)
    $myhostname		The name of the current host as it knows itself

        Time-Related System Properties:

    $now			当前日期,格式YYYY-MM-DD,now是指当前message被处理的时间
    $year			当前年份(4-digit)
    $month			当前月份(2-digit)
    $day			当前日期(2-digit)
    $hour			当前小时(24 hour) time (2-digit)
    $hhour			From minute 0 to 29, this is always 0 while from 30 to 59 it is always 1.
    $minute			当前分钟(2-digit)

    在配置文件的开头还有一些global设置,global的配置只能被设置一次,不能被随后重新设置:

    action.reportSuspension		on
    action.reportSuspensionContinuation		off
    workDirectory
    dropMsgsWithMaliciousDNSPtrRecords
    localHostname
    preserveFQDN
    defaultNetstreamDriverCAFile
    defaultNetstreamDriverKeyFile
    defaultNetstreamDriverCertFile
    debug.gnutls		0
    #rsyslog可以处理的单挑日志的大小,默认是4K,任何超出4K的都会被截断
    maxMessageSize	4K
    #当被设置为on的时候,如果系统shutdown,rsyslog会记录系统的debug信息
    debug.onShutdown	on
    #指定debug日志的文件名称
    debug.logFile
    #指定使用的协议,可以是ipv4-only,ipv6-only
    net.ipprotocol		ipv4-only
    #是否解析主机名到ip地址
    net.aclResolveHostname		off
    #是否开启dns
    net.enableDNS		on
    

    UDP module:here

    TCP Module:here

    Config:here

    下面附上生产中的配置:

    #Client
    global(net.enableDNS = "on")
    global(net.ipprotocol = "ipv4-only")
    global(debug.onShutdown = "on")
    $maxMessageSize      16K
    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)
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    $IncludeConfig /etc/rsyslog.d/*.conf
    kern.*                                                  /var/log/kern
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    auth.*                                                  /var/log/auth
    authpriv.*                                              /var/log/secure
    mail.*                                                  /var/log/maillog
    cron.*                                                  /var/log/cron
    daemon.*                                                /var/log/daemon
    user.*                                                  /var/log/user
    *.emerg                                                 ~
    uucp,news.crit                                          /var/log/spooler
    local7.*                                                /var/log/boot
    *.*                                                     @192.168.1.6:514
    
    #Server
    global(net.enableDNS = "on")
    global(net.ipprotocol = "ipv4-only")
    global(debug.onShutdown = "on")
    $maxMessageSize      16K
    $AllowedSender       UDP, 127.0.0.1, 192.168.0.0/16
    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="imudp") # needs to be done just once
    input(type="imudp" address="10.203.40.13" port="514")
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    $IncludeConfig /etc/rsyslog.d/*.conf
    template(name="remote_syslog" type="string" string="/data0/rsyslog_center/%HOSTNAME%/%$YEAR%-%$MONTH%/%$DAY%/%PROGRAMNAME%.log")
    kern.*                                                  /var/log/kernel
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    auth.*;authpriv.*                                       /var/log/secure
    mail.*                                                  /var/log/maillog
    cron.*                                                  /var/log/cron
    daemon.*                                                /var/log/daemon
    user.*                                                  /var/log/user
    *.emerg                                                 :omusrmsg:*
    uucp,news.crit                                          /var/log/spooler
    local7.*                                                /var/log/boot
    *.*                                                     ?remote_syslog
  • 相关阅读:
    思考--连续的还是跳跃的?(二)
    方法学导论--by 有只茄子
    时空、维度,以及其他(一)
    处理问题的方法--抽象和特例化
    tomcat server 152主机.xml
    java怎么重写覆盖Spring Bean的几种方式
    maven上传jar到私服
    sql_mode=only_full_group_by
    spring何时创建bean
    mysql 快速备份数据库
  • 原文地址:https://www.cnblogs.com/sunsky303/p/10564638.html
Copyright © 2011-2022 走看看