操作系統: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%\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