syslog-ng 學習心得與配置說明


配置說明
syslog-ng
的主配置文件存放在: /etc/syslog-ng/syslog-ng.conf

一、基礎


系統自帶版本:
引用
# rpm -qa|grep syslog-ng
syslog-ng-1.6.7-1
syslog官方網站:
最新版本是2.0.5。
為方便使用,暫以系統自帶的版本1.6.7說明,以后再提供更新的 rpm包。

1、前提

使用syslog-ng前,建議先詳細了解 syslog的概念。
例如,什么是facility(設備),level(等級)。可以參考這里:
否則,后面的說明可能會有點不知所雲的。

2、使用

若不增加其他設定,可通過下面的簡單命令即可替換原 syslog服務:
# service syslog stop
# service syslog-ng start

3、設計原則

syslog-ng替代 syslog是基於以下的設計原則的:
引用
a、通過 正規表達式協助,除支持原facility/level方式,還支持 內容過濾等以建立更好的消息過濾機制;
b、支持 主機鏈,即使日志消息經過 多重網絡轉發,仍可找到原發出主機的信息和整個消息鏈;
c、支持強大的自定義配置,並且清晰、明了。


1 、架構
syslog-ng
的配置基於下面的架構:
引用
LOG STATEMENTS
SOURCES   FILTERS  DESTINATIONS
消息路徑『消息源-過濾器-目的站』


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

2
、消息源SOURCES
定義格式為:
引用
source  { sourcedriverparams; sourcedriverparams; ... };


含義:
引用
:一個消息源的標識
sourcedriver
:消息源驅動器,可以支持若干參數,並使用分號 隔離多個消息源驅動器


消息源驅動器有:
引用
file (filename) 
:從指定的文件讀取日志信息
unix-dgram  (filename) 
:打開指定的 SOCK_DGRAM 模式的 unix 套接字,接收日志消息
unix-stream (filename) 
:打開指定的 SOCK_STREAM 模式的 unix 套接字,接收日志消息
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 端口獲取消息
};


linux 使用/dev/log 作為SOCK_STREAM unix 的套接字,BSD 使用/var/run/log
參數需要使用括號括住。

3
、過濾器 FILTERS
定義格式為:
引用
filter  { expression; };


含義:
引用
:一個過濾器標識
expression
:表達式


表達式支持:
引用
邏輯操作符: and (和)、 or (或)、 not (非);
函數:可使用正規表達式描述內容


過濾函數有:
引用
facility(,)
:根據 facility (設備)選擇日志消息,使用逗號分割多個 facility
level(,)
:根據 level (優先級)選擇日志消息,使用逗號分割多個 level ,或使用 “..” 表示一個范圍
program(regexp)
:日志消息的程序名是否匹配一個正則表達式
host(regexp)
:日志消息的主機名是否和一個正則表達式匹配
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  { destdriverparams; destdriverparams;  ...  ;};


含義:
引用
:一個目的地的標識
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 還可以設定一些選項參數以優化其操作。
全局的選項參數,定義在配置文件的開頭位置:
六、參考資料
man syslog-ng.conf
man 8 syslog-ng



引用
options { opt1; opt2; ... };


選項有:

引用
chain_hostnames(yes|no) 
:是否打開主機名鏈功能,打開后可在多網絡段轉發日志時有效
long_hostnames(yes|no) 
:是 chain_hostnames 的別名,已不建議使用
keep_hostname(yes|no) 
:是否保留日志消息中保存的主機名稱,否時,總是使用來源主機來作重寫日志的主機名
use_dns(yes|no) 
:是否打開 DNS 查詢功能,應使用防火牆保護使用 syslog-ng 的節點安全,並確認所有主機都是可以通過 dns 解釋的,否則請關閉該選項。
use_fqdn(yes|no) 
:是否使用完整的域名
check_hostname(yes|no) 
:是否檢查主機名有沒有包含不合法的字符
bad_hostname(regexp) 
:可通過正規表達式指定某主機的信息不被接受
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
dir_perm(perm) 
:目錄的權限,使用八進制方式標注,例如 0644
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 的宏

引用
HOST 
日志消息的源發主機名。如果日志消息穿過幾個主機,並且 chain_hostname ()功能已經打開,就使用第一個主機名。
FACILITY 
:日志消息來自的日志設備
PRIOPRITY/LEVEL 
:日志消息的優先級
PROGRAM 
:發送日志消息的程序
YEAR 
:發送日志消息的年份,這個宏既可以指定日志消息送出的時間,也可以指定日志消息收到的時間。 這由 use_time_recvd ()選項控制
MONTH 
:發送日志消息的月份
DAY 
:發送日志消息的日子
HOUR 
:小時
MIN 
:分鍾
SEC 
:秒


2
 file 的參數
例如: log_file_size ()、 sync ()、 owner ()、 perm ()等,請參考上面的全局設定
3
tcp upd 的參數

引用
ip
xxx.xxx.xxx.xxx ):定義綁定的 IP 地址
port
n ):定義綁定的端口
max-connections
n ):定義最大連接數


TCP 基於連接方式傳輸,不會造成日志丟失,而UDP 則不同。但因為傳統的syslog 基於UDP 514 端口,所以,UDP 方式也經常會使用到。
另外,514 也是rshell 的默認端口,請注意沖突。
舉例:

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


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

五、關於垃圾收集狀態
當滿足一定的條件, syslog-ng 即會進入垃圾收集狀態,而暫時不再接受日志信息。這時,會造成非連接的傳輸協議的日志丟失(例如 UDP )。通過設置下面兩個
syslog-ng是什么?
syslog-ng作為syslog的替代工具,可以完全替代syslog的服務,並且通過定義規則,實現更好的過濾功能。
選項可以控制:

引用
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


當忙時:

引用
gc_busy_threshold(n) 
:當 syslog-ng 忙時,一旦分派的對象達到這個數字, syslog-ng 就進入垃圾信息收集狀態的時間。該值應該比較高,以保證正常情況下不會打斷日志消息的收取。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM