基本結構
簡介:
rsyslog是一個高度可定制化的日志和事件處理工具集。
信息在輸入模塊的處理下進入rsyslog,然后被傳遞到規則集,當成功被規則匹配值之后,信息將進行下一個環節,寫入數據庫或文件或遠程主機那里。
message處理的原則:
(1)輸入的message被提交到設置的規則部分,如果沒有設置特別的規則,將應用默認的規則。
(2)默認的規則是RSYSLOG_DefaultRuleset
(3)額外的規則可以由用戶進行定義
(4)每一個規則都必須包含零個或多個規則,但是零個規則的規則集顯然毫無意義。
(5)一個規則由一個過濾器和一個執行action列表組成
(6)filter提供yes/no的能力和控制流的能力
(7)如果匹配成功規則之后將執行相應的action列表,如果匹配失敗則不作任何action
(8)按順序執行所有規則
(9)無論是否有一個過濾器匹配,所有規則都必須被充分考慮到,如果匹配到filter之后的action是discard那么就沒有必要繼續進行匹配。
(10)一個action列表可以包含一個或多個列表
(11)在一個action列表里面不會再進行filter動作
(12)如果一個action列表里面包含多個action,&字符必須放置在過濾器的位置,緊隨着先前的action(此處強調的是一個書寫格式)
(13)action由調用的action組成,所有的action都必須被定義,示例(e.g. ":omusrmsg:", $Action... directives)
(14)如果legacy格式被使用,$Action指定必須在指定的action中配置
(15)一些配置指令自動引用之前的值被應用后,而其他的則有可能不(不理解這句話的意思,進一步往下看吧)
(16)目前rsyslog5是嚴重過時的版本,強烈建議至少使用7以上的版本,這樣的配置會變得更容易些。
配置文件:
rsyslog默認讀rsyslog.conf文件,這個文件能包含其他的配置文件,通常rsyslogd可以通過-f <file>制定配置文件啟動。
聲明類型:
rsyslog能夠兼容3種不通的配置聲明類型
sysklogd:
這是最普通的格式,對於簡單的用例仍然非常有用。注意:一些很少的features不再支持,因為一些新功能對它是不兼容的。
legacy rsyslog:
這些格式的語句是以$開頭的,它是唯一pre-v6支持的版本,同時也支持6以上的版本,在一些插件和新功能中可能仍然需要
使用這種格式書寫(因為插件需要影響升級到使用新樣式的格式,這並沒有發生在所有插件)
RainerScript:
這是一種新的風格的格式,能夠在復雜的情況下精確的表達配置的含義,
rsyslog.conf文件由statements組成,對於舊格式(sysklogd & legacy rsyslog),lines是重要的,但是新格式卻不在乎這些。
推薦使用的Statement Types
一般情況下,推薦使用RainerScript Statement Types,簡潔且易讀,很容易看出哪些參數是活躍的。
在一些簡單的事情上,sysklogd格式的配置方式會顯得特別方便,示例:
mail.info /var/log/mail.log
mail.err @server.example.net
作為經驗法則,在如下的情況下請使用RainerScript格式配置:
配置需要參數的時候
復雜的控制流,例如在多個操作需要在相同條件下嵌套
通常是不推薦使用legacy格式,但是在一些特殊的情況下可能不得不用,因為並不是所有的配置各模塊全部轉換成了RainerScript格式
Comments(注解)
1、已#號開頭的注釋方法
2、c語言的注釋方法,/* */
Processing Order(處理的順序)
rsyslog.conf配置的順序是從上至下的,順序是很重要的,如果message被停止處理之后,后面的配置將不起作用。
Flow Control Statements(控制流的格式)
if expr then ... else ... - 條件執行
stop - 停止處理當前的信息
call - 調用一個規則集處理
continue - 經常用於放置在if內部
流控制部分可以參考鏈接:http://www.rsyslog.com/doc/v7-stable/configuration/filters.html
Data Manipulation Statements(數據處理聲明)
set - 設置一個用戶變量
unset - 刪除一個之前設置的用戶變量
Inputs
每個輸入都需要一個輸入模塊加載和定義一個listener,input是通過input()對象來定義的。
rsyslog modules參考http://www.rsyslog.com/doc/v7-stable/configuration/rsyslog_conf_modules.html
Outputs
Outputs被稱為actions,action調用action(type="type" ...),類型是強制性的(強制的)和必須包含插件的名稱。
Rulesets and Rules
規則集和規則形式是rsyslog處理的基礎。簡而言之,一個規則是一種rsyslog應當如何處理一個特定的信息。
通常,有一個類型的過濾(if語句)的規則。復雜的嵌套規則就像在一個編程語言。
規則集是規則的容器。單一規則集可以包含許多規則。在編程語言的比喻(類比),規則集的一個可能認為像一個程序。
一個規則集可以"約束"(分配)到一個特定的輸入。在類比,這意味着當一個消息通過輸入進來,"程序"(規則集)綁定到它將被執行(而不是其他)。
一個簡單的relus如下:
ruleset(name="rulesetname") {
action(type="omfile" file="/path/to/file")
action(type="..." ...)
/* and so on... */
}
關於rsyslog的rules文檔信息如下:http://www.rsyslog.com/doc/v7-stable/concepts/multi_ruleset.html