天天看點

syslog-ng 消息過濾 尋找來源

一、基礎

syslog-ng作為syslog的替代工具,可以完全替代syslog的服務,并且通過定義規則,實作更好的過濾功能。

系統自帶版本:

引用

# rpm -qa|grep syslog-ng

syslog-ng-1.6.7-1

syslog官方網站:

<a href="http://baike.baidu.com/view/122901.htm" target="_blank">點選</a>

最新版本是2.0.5。

為友善使用,暫以系統自帶的版本1.6.7說明,以後再提供更新的rpm包。

1、前提

使用syslog-ng前,建議先詳細了解syslog的概念。

例如,什麼是facitily(裝置),level(等級)。可以參考這裡:

否則,後面的說明可能會有點不知所雲的。

2、使用

若不增加其他設定,可通過下面的簡單指令即可替換原syslog服務:

# service syslog stop

# service syslog-ng start

3、設計原則

syslog-ng替代syslog是基于以下的設計原則的:

c、支援強大的自定義配置,并且清晰、明了。

二、配置說明

syslog-ng的主配置檔案存放在:/etc/syslog-ng/syslog-ng.conf

1、架構

syslog-ng的配置基于下面的架構:

LOG STATEMENTS『SOURCES - FILTERS -DESTINATIONS』

消息路徑 『消息源 - 過濾器 - 目的站』

也就是說,通過定義多個消息源,把比對上若幹個過濾器的消息導向到指定的目的地,進而組成一個消息路徑。

2、消息源SOURCES

定義格式為:

source { sourcedriver params; sourcedriver params; ... };

含義:

:一個消息源的辨別

sourcedriver:消息源驅動器,可以支援若幹參數,并使用分号“;”隔離多個消息源驅動器

消息源驅動器有:

udp ( (ip),(port) ) : 在指定的UDP端口接收日志消息

tcp ( (ip),(port) ) : 在指定的TCP端口接收日志消息

sun-streams (filename) : 在solaris系統中,打開一個(多個)指定的STREAM裝置,從其中讀取日志消息

internal() : syslog-ng内部産生的消息

pipe(filename),fifo(filename) : 從指定的管道或者FIFO裝置,讀取日志資訊

例如:

source s_sys {

file ("/proc/kmsg" log_prefix("kernel: "));

unix-stream ("/dev/log");

internal();

# udp(ip(0.0.0.0) port(514)); #如果取消注釋,則可以從udp的514端口擷取消息

};

參數需要使用括号包覆。

3、過濾器FILTERS

filter { expression; };

:一個過濾器辨別

邏輯操作符:and(和)、or(或)、not(非);

過濾函數有:

facility(,): 根據facility(裝置)選擇日志消息,使用逗号分割多個facility

level(,): 根據level(優先級)選擇日志消息,使用逗号分割多個level,或使用“..”表示一個範圍

match(regexp): 對日志消息的内容進行正則比對

filter(): 調用另一條過濾規則并判斷它的值

filter f_filter2 { level(info..emerg) and

not facility(mail,authpriv,cron); };

※這裡的level定義info,相當于syslog的.=info,并不包括更低的等級;

若需要包括更低的等級,請使用“..”表示一個等級範圍;

另外,filter(DEFAULT),用于捕獲所有沒有比對上的日志消息。filter(*)是無效的。

4、目的地DESTINATIONS

destination { destdriver params; destdriver params; ... ;};

:一個目的地的辨別

destdriver :目的地驅動器

目的地驅動器有:

file (filename) :把日志消息寫入指定的檔案

unix-dgram (filename) :把日志消息寫入指定的SOCK_DGRAM模式的unix套接字

unix-stream (filename) :把日志消息寫入指定的SOCK_STREAM模式的unix套接字

udp (ip),(port) :把日志消息發送到指定的UDP端口

tcp (ip),(port) :把日志消息發送到指定的TCP端口

usertty(username) :把日志消息發送到已經登陸的指定使用者終端視窗

pipe(filename),fifo(filename) :把日志消息發送到指定的管道或者FIFO裝置

program(parm) :啟動指定的程式,并把日志消息發送到該程序的标準輸入

舉例:

destination d_mesg { file("/var/log/messages"); };

destination d_syslog { udp ("192.168.228.225" port(514)); };

※配合使用udp或tcp即可實作集中的日志伺服器。注意,udp函數的寫法上和消息源驅動器中的定義不同。

5、消息路徑LOG STATEMENTS

log { source S1; source S2; ... filter F1; filter F2; ... destination

D1; destination D2; ... };

※同樣的,每條日志消息都會經過所有的消息路徑,并不是比對後就不再往下執行的,請留意。

三、選項參數

除了上述的消息路徑定義外,syslog-ng還可以設定一些選項參數以優化其操作。全局的選項參數,定義在配置檔案的開頭位置:

options { opt1; opt2; ... };

選項有:

long_hostnames(yes|no) :是chain_hostnames的别名,已不建議使用

keep_hostname(yes|no) :是否保留日志消息中儲存的主機名稱,否時,總是使用來源主機來作重寫日志的主機名

use_fqdn(yes|no) :是否使用完整的域名

dns_cache(yes|no) :是否打開DNS緩存功能

dns_cache_expire(n) :DNS緩存功能打開時,一個成功緩存的過期時間

dns_cache_expire_failed(n) :DNS緩存功能打開時,一個失敗緩存的過期時間

dns_cache_size(n) :DNS緩存保留的主機名數量

create_dirs(yes|no) :當指定的目标目錄不存在時,是否建立該目錄

dir_owner(uid) :目錄的UID

dir_group(gid) :目錄的GID

owner(uid) :檔案的UID

group(gid) :檔案的GID

perm(perm) :檔案的權限,同樣,使用八進制方式标注

gc_busy_threshold(n) :當syslog-ng忙時,其進入垃圾資訊收集狀态的時間。一旦分派的對象達到這個數字,syslog-ng就啟動垃圾資訊收集狀态。預設值是:3000。

gc_idle_threshold(n) :當syslog-ng空閑時,其進入垃圾資訊收集狀态的時間。一旦被分派的對象到達這個數字,syslog-ng就會啟動垃圾資訊收集狀态,預設值是:100

log_fifo_size(n) :輸出隊列的行數

log_msg_size(n) :消息日志的最大值(bytes)

mark(n) :多少時間(秒)寫入兩行MARK資訊供參考,目前沒有實作

stats(n) :多少時間(秒)寫入兩行STATUS資訊供,預設值是:600

sync(n) :緩存多少行的資訊再寫入檔案中,0為不緩存,局部參數可以覆寫該值。

time_reap(n) :在沒有消息前,到達多少秒,即關閉該檔案的連接配接

time_reopen(n) :對于死連接配接,到達多少秒,會重新連接配接

use_time_recvd(yes|no) :宏産生的時間是使用接受到的時間,還是日志中記錄的時間;建議使用R_的宏代替接收時間,S_的宏代替日志記錄的時間,而不要依靠該值定義。

options { sync (0); time_reopen (10); log_fifo_size (1000); long_hostnames (off); use_dns (no); use_fqdn (no); create_dirs (no); keep_hostname (yes);};

四、部分函數的參數syslog-ng除了有全局選項參數外,不同的函數還可以定義其參數,其中包括:1、擴充file的宏

2、file的參數

例如:log_file_size()、sync()、owner()、perm()等,請參考上面的全局設定

3、tcp和upd的參數

ip(xxx.xxx.xxx.xxx): 定義綁定的IP位址

port(n):定義綁定的端口

max-connections(n) : 定義最大連接配接數

另外,514也是rshell的預設端口,請注意沖突。

destination d_mail { file("/var/log/maillog" sync(10)); };

這裡定義的sync(10)會覆寫全局配置,表示若寫入的日志數量達到10,才寫入maillog檔案。

五、關于垃圾收集狀态

gc_idle_threshold(n) :

意思是,一旦被分派的對象到達這個數字,并且當syslog-ng空閑時(100微秒内沒有日志消息到達)。此時,syslog-ng就會啟動垃圾資訊收集狀态。

已配置設定的對象可通過-v指令行參數指定其的最小值。而syslog-ng這個值應該比較小,但比已配置設定的對象要大即可。

例如,空閑狀态,syslog-ng會顯示:

Nov 13 16:35:35 syslogng syslog-ng[4510]: STATS: dropped 0

Nov 13 16:45:35 syslogng syslog-ng[4510]: STATS: dropped 0

當忙時:

六、局限性

七、參考資料

man syslog-ng.confman 8 syslog-ng