rsyslog 配置

安裝 rsyslog 和 logroate 服務

yum install rsyslog
yum install logrotate

rsyslog配置文件

  #rsyslog v3 config file   [兼容版本號]

  #### MODULES ####    加載模塊
  $ModLoad imuxsock.so             # 本地系統日志 (e.g. via logger command) 
  $ModLoad imklog.so               # provides kernel logging support (previously done by rklogd)

  # 允許514端口接收使用UDP協議轉發過來的日志
  #$ModLoad imudp.so
  #$UDPServerRun 514
  # 允許514端口接收使用TCP協議轉發過來的日志
  #$ModLoad imtcp.so
  #$InputTCPServerRun 514

  #### GLOBAL DIRECTIVES ####
  # 定義日志格式默認模板  
  $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat  
  # File syncing capability is disabled by default. This feature is usually not required,
  # not useful and an extreme performance hit
  #$ActionFileEnableSync on

  #### RULES ####
  # 關于內核的所有日志都放到/dev/console(控制臺)
  #kern.*                                                 /dev/console
  # 記錄所有日志類型的info級別以及大于info級別的信息到 /var/log/messages,但是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級別信息, 以wall方式發送給每個登錄到系統的人(* 代表所有在線用戶 )
  *.emerg                                                 * 
  # 記錄uucp,news.crit等存放在/var/log/spooler
  uucp,news.crit                                          /var/log/spooler  
  # Save boot messages also to boot.log     啟動的相關信息
  local7.*                                                /var/log/boot.log

  #  轉發規則
  # remote host is: name/ip:port,  port optional (e.g. 192.168.0.1:514)
  *.*                                                     @@remote-host:514                    
  # @@表示通過tcp協議發送    @表示通過udp進行轉發

日志級別

  • debug 有調式信息的,日志信息最多
  • info 一般信息的日志,最常用
  • notice 最具有重要性的普通條件的信息
  • warning 警告級別
  • err 錯誤級別,阻止某個功能或者模塊不能正常工作的信息
  • crit 嚴重級別,阻止整個系統或者整個軟件不能正常工作的信息
  • alert 需要立刻修改的信息
  • emerg 內核崩潰等嚴重信息
  • none 什么都不記錄
    從上到下,級別從低到高,記錄的信息越來越少

連接符號

  • .xxx :表示大于等于xxx級別的信息
  • .=xxx:表示等于xxx級別的信息
  • .!xxx:表示在xxx之外的等級的信息

Actions

  1. 記錄到普通文件或設備文件:
    . /var/log/file.log # 絕對路徑
    . /dev/pts/0
    logger 命令用于產生日志: logger -p local3.info 'KadeFor is testing the rsyslog and logger'

  2. 轉發到遠程::
    . @192.168.0.1 # 使用UDP協議轉發到192.168.0.1的514(默認)端口
    . @@192.168.0.1:10514 # 使用TCP協議轉發到192.168.0.1的10514(默認)端口

  3. 發送給用戶(需要在線才能收到)::
    . root
    . root,kadefor,up01 # 使用,號分隔多個用戶
    . * # *號表示所有在線用戶

  4. 忽略,丟棄::
    local3.* ~ # 忽略所有local3類型的所有級別的日志

  5. 執行腳本::
    local3.* ^/tmp/a.sh # ^號后跟可執行腳本或程序的絕對路徑
    # 日志內容可以作為腳本的第一個參數. 可用來觸發報警
    注意: 日志記錄的順序有先后關系!

實例: 過濾特定的日志到文件

# 過濾日志, 由:號開頭
:msg, contains, “error” /var/log/error.log
:msg, contains, “error” ~                # 忽略包含error的日志
:msg, contains, “user nagios”   ~
:msg, contains, “user kadefor”   ~
:msg, contains, “module-alsa-sink.c: ALSA woke us up to write new data to the device, but there was actually nothing to write” ~
local3.*    ~
&   ~                                     # 忽略所有的日志. 

實例: 使用模板來定義日志格式

定義默認的日志格式:

$template myFormat,”%rawmsg%\n”  
$ActionFileDefaultTemplate myFormat  

如果不要$ActionFileDefaultTemplate myFormat這一行, 就需要像這樣來使用模板:
在日志文件后添加模板名, 并用;號分隔

$template myFormat,”%rawmsg%\n”  
authpriv.*      /var/log/secure;myFormat  
mail.*          /var/log/maillog;myFormat  
cron.*          /var/log/cron;myFormat  
*.emerg                                       *  
uucp,news.crit  /var/log/spooler;myFormat  
local7.*        /var/log/boot.log;myFormat

實例: remote log 遠程發送與接收:

配置服務端(接收)

$ModLoad imtcp.so                  # 使用tcp方式
$InputTCPMaxSessions 500           # tcp接收連接數為500個
$InputTCPServerRun 514             # tcp接收信息的端口

# 定義一個名為logformat模板, 為信息加上日志時間
$template logformat, "%TIMESTAMP:::date-mysql% %FROMHOST-IP%%msg%\n"
# 定義日志文件的名稱,按照年月日
$template DynFile, "/var/log/tlog%$year%%$month%%$day%.log"
# 把rawmsg(也可以使用msg)日志中包含sdns_log標志的信息寫到DynFile定義的日志文件里
:rawmsg, contains, "sdns_log" ?DynFile;logformat
# 這個表示丟棄包含sdns_log標志的信息, 一般都加上它, 以免多個日志文件記錄重復的日志
:rawmsg, contains, "sdns_log"  ~ 

配置客戶端(發送)
# 把包含sdns_log的信息通過tcp發到192.168.1.2 @@表示tcp @表示udp
:rawmsg, contains, “sdns_log” @@192.168.1.2 # 默認514端口
# 這個表示丟棄包含sdns_log標志的信息,防止這個信息寫到本機的/var/log/message
:rawmsg, contains, “sdns_log” ~
測試:在客戶端上執行 logger -p user.info "sdns_log 34334" 在服務端的/var/log/目錄里是否有tlog*日志產生

如果要把不同服務器發送過來的日志保存到不同的文件, 可以這樣操作

:fromhost-ip, isequal, “192.168.0.160″ /var/log/host160.log
:FROMHOST-IP, isequal, “192.168.0.161″ /var/log/host161.log
:FROMHOST-IP, startswith, “192.168.1.” /var/log/network1.log
:FROMHOST-IP, startswith, “192.168.2.” /var/log/network2.log

屬性替代

  1. 屬性替代
    Rsyslog 預定義了一些屬性,來代表消息中的信息,我們可以在定義輸出格式、動態文件名的時候使用到這些屬性。這里面比較重要的屬性比如:msg(消息體)、hostname、pri(消息等級和類別)、time(時間有關),屬性的名稱中以開頭的是從本地系統獲得的變量、不帶是從消息中獲得變量。
    屬性替代的語法格式:
    %propname:fromChar:toChar:options:fieldname%
    屬性替換的功能很強大,你可以使用起始字符獲取自己所需的字段,也可以使用正則表達式,也可以使用分隔符。舉幾個例子:為了兼容一個rfc協議,rsyslog規定如果用戶輸入的msg不是以空格開頭,rsyslog會自動補充一個空格,因此如果你希望輸出的時候去掉這個空格,就可以使用:
    %msg:2:$%
    選取msg變量中,起始位置為2,終止位置為結尾我們經常需要根據空格來分析字符串,F表示使用字符分割,32是空格的ascii碼。 按照空格分隔,取第三個子串,例:
    %msg:F,32:3%

  2. 模板
    模板的功能是定義輸出格式,或者定義omfile模塊的動態路徑、動態文件。需要使用上面提到的屬性替換。
    模板定義的形式有四種,適用于不同的輸出模塊,一般簡單的格式,可以使用string的形式,復雜的格式,建議使用list的形式,使用list的形式,可以使用一些額外的屬性字段(property statement),例如:position.from、position.end
    如果不指定輸出模板,rsyslog會默認使用 RSYSLOG_DEFAULT。
    如果你只想輸出msg,可以定義模板
    template t_msg, “%msg\n%” 如果想按日期保存輸出,需要使用動態路徑。可以定義模板template f_debug, “/data0/logs/%year%-%month%-%$day%/debug.log”

  3. Ruleset
    Ruleset實現的是多實例的功能,可以針對syslog的來源使用不同的過濾規則。需要注意的是,在配置文件中需要先定義ruleset,才可以使用。比較典型的一個例子,針對不同的端口使用不同的過濾規則。

     $Ruleset tcp1999
     $RulesetCreateMainQueue on
     Local3.*      @@10.0.0.44:1999
     $Ruleset tcp2000
     $RulesetCreateMainQueue on
     Local4.*      @@10.0.0.44:2000
    

在定義好ruleset后,各個輸出模塊就可以指定自己使用的ruleset了,具體如何指定,可以查看輸出模塊的手冊,一般會有一個ruleset的參數,用來實現這個功能。

  1. Filter模塊
    Rsyslog可以使用syslog標準的過濾規則,同時自己添加了一些擴展。比如可以在輸出中指定rsyslog自己的處理方式,可以指定輸出template,方法是在規則后面添加template的名字,用分號隔開。
    例如我們可以編寫一個規則
    Local3.* -/data0/logs/local3.log;t_msg
    #在這個輸出中使用t_msg的模板
    Local4.* -?f_local3_test;t_msg
    問號表示要使用模板定義的動態路徑.
    除了syslog標準的規則,rsyslog的作者還自己開發了一個叫做rainerscript的腳本語言,來定義更復雜的過濾過則,rainerscript 可以對屬性進行 startwithcontains、%(取余)等過濾規則,例如
    If pri-txt == local3.* andmsg contains “abc” then{ #pri為local3,且在消息中包含子串‘abc’
    . -/data0/logs/local3.log;t_msg
    }
    還有第三種方式是使用屬性的表示方式,例如
    :msg, regex, "^ [g-z]" /root/rsyslog_worker_dir/2000.log
    # 以字母g到z開頭的消息,注意msg開頭有個空格
  2. 隊列
    隊列是rsyslog中比較重要的一個部分,作為使用者,我們需要了解的是隊列的種類:主隊列工作隊列。從輸入模塊接收的消息會進入主隊列,主隊列中的消息,經過過濾模塊,會進入到相應的工作隊列;隊列的四種工作模式:direct mode、disk mode、FixedArray mode 和 LinkedList mode,前兩種是磁盤隊列,更可靠,但是性能也較差,后兩種是內存隊列,區別是前者是預分配隊列長度,后者是動態分配,如果你的系統日志流量比較平穩,可以使用預分配隊列,如果日志屬于突發型,可以使用動態隊列。此外,內存隊列還可以通過指定一個queuename來添加DA模式,DA模式主要是為了防止意外情況(進程關閉、server端宕機)下,內存隊列可以不丟失。
    通過查看rsyslog的系統命令,可以知道rsyslog對隊列進行大量的可配參數,來定義隊列的行為。可以根據需要來進行優化。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容

  • ryslog工作流,輸入-處理-輸出。linux系統自帶的日志收集工具,依賴守護進程。在linux系統中,/var...
    王歪歪102幾閱讀 3,076評論 0 0
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發此異常。 O...
    我想起個好名字閱讀 5,379評論 0 9
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 15,961評論 2 11
  • 技術交流QQ群:1027579432,歡迎你的加入! 一、常見的日志 日志是一個系統管理員,一個運維人員,甚至是開...
    CurryCoder閱讀 1,555評論 0 5
  • 折騰一上午就為讓寶寶體驗冰雪世界。 期待了一星期,本來周六就要完成心愿的,由于寶寶學習要緊,不錯過成為“播音主持”...
    明天陽光閱讀 75評論 0 1