Rsyslog Server V8

        最近總有機器莫名的重啓,內核日誌中什麼都沒看出來,打算把syslog中kern開啓debug模式,索性直接把Rsyslog server搞起來,看了一下CentOS6的rsyslog居然仍是5.8版本的,這都是2012-8月的版本了,新技術層出不窮,系統軟件庫更新太慢了。最新版的已是V8.18.0了,直接用新版本開搞。html

操做系統:CentOS release 6.7git

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

安裝:ssh

yum clean all
yum makecache
yum install rsyslog

檢查:socket

配置文件解析:async

    Rsyslogd的配置文件是/etc/rsyslog.conf,通常在/etc目錄下,先看看rsyslog client的配置:tcp

# 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中日誌格式的指定,通常是:日誌類型(鏈接符號)日誌級別   日誌處理方式ide

日誌類型:this

auth        –pam產生的日誌
authpriv    –ssh,ftp等登陸信息的驗證信息
cron        –時間任務相關
kern        –內核
lpr         –打印
mail        –郵件
mark(syslog)–rsyslog服務內部的信息,時間標識
news        –新聞組
user        –用戶程序產生的相關信息
uucp        –unix to unix copy, unix主機之間相關的通信
local 1~7   –自定義的日誌設備

鏈接符號:url

.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%\n")
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
相關文章
相關標籤/搜索