一、基礎
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