http://luyongxin88.blog.163.com/blog/static/925580720112275183903/
因爲工作的需要,涉及到了syslog-ng。現在看來,在外包公司工作,也就這麼兩點的好處了,一是拿的錢稍微多點,二就是能接觸一下新的東西。當然,想要深入瞭解,公司是不會提供這樣的機會了,還是自己看看吧。以下都是一些網絡上學習來了有關syslog-ng的知識。整理一下。以前認爲網絡上都有,自己轉載了沒必要,但某天突然領悟到:自己看了,和自己記錄了不一樣,我們不能說書本上都有了上課就不做筆記了。再有就是放在自己的地方,查詢起來也方便,不用東找西找的,會顯得系統一些。
--------------------
syslog-next generation 即下一代的系統日誌管理工具
The syslog-ng application is a flexible and highly scalable system logging application that is ideal for creating centralized logging solutions. The main features of syslog-ng are summarized below.
# 註釋 :syslog-ng 應用程序是一個靈活、高擴展性的系統日誌工具,主要是用於解決集中日誌記錄的工具。它的主要特點有 :
1、可靠的日誌傳輸。syslog-ng 允許你發送日誌到遠程的日誌服務器上。傳輸過程使用 TCP ,區別於 syslog 的 UDP ,可以確保不會丟失數據
2、通過使用 SSL/TLS 來加密日誌傳輸過程。不過這個功能只有在 premium 版本才提供。
3、基於磁盤的緩衝。syslog-ng 可以在網絡連接失效時先把日誌寫入硬盤,等網絡連接恢復時再傳輸到日誌服務器上,而且確保日誌的順序不會混亂。不過這個功能也是 premium 版本才提供的。
4、直接數據庫訪問。能夠把日誌直接存入數據庫,以便進行搜索及配合日誌分析應用程序。支持 MySQL、Oracle、PostgreSQL、SQLIife ,同樣也是 premium 才支持
5、支持多種操作系統。包括 Linux、Unix、BSD、Solaris、HP-UX、AIX 等。甚至還可以通過代理和 Windows 主機進行通信
6、過濾器和歸類。syslog=ng 應用程序可以根據收的喔的日誌的內容進行排序、或者根據源ip、應用程序、優先級等。可以通過宏自動建立目錄、文件、數據庫。支持 regex 和布爾表達式,確保只轉發你想要的內容
7、支持 ipv4 和 ipv6
syslog-ng在一般linux系統下的配置文件爲/etc/syslog-ng/syslog-ng.conf
一般 syslog-ng 可能含有以下5個章段:
options{}
全局設置。 These can be overridden in any of the next four sections
source{}
信息來源, 來源可以是文件, 本地 sockets, 或者遠程主機。
destination{}
信息目標, 可以是文件, 本地 sockets, 或者遠程主機。
filter{}
過濾選項非常強大且複雜;你可以過濾日誌中的任何方面,比如基礎的 syslogd 快捷字段(facility names–man 5 syslog.conf 獲取更多信息),log 等級,主機名,以及任何log中出現的字段或者是數字。
log{}
此段將來源 目的 過濾 都給連接起來並且告訴syslog-ng如何處理日誌。
配置的主要內容爲消息路徑的匹配規則,這個和iptables 的規則是差不多的。
消息路徑由3部分組成:
消息路徑 = 日誌消息源 + 過濾規則 + 消息目地
其運行過程:消息源 ---> syslog-ng --> 消息命中 --> 對應的日誌目的
消息源
消息源: source <identifier> { source-driver(params);source-driver(params);... };消息源驅動器 source driver,用來收集日誌消息,和系統的syslogd交換信息,記錄日誌 |
實例: source src { unix-stream("/dev/log"); internal(); udp(ip(0.0.0.0) port(514)); }; |
identifier 是給定消息源的唯一標誌 驅動器可以使用參數,參數有些是必需的,有些是可選的。必需的參數一般在前面。上面的指令中,/dev/log就是必需參數。 下面是可用的源驅動器: internal syslog-ng內部產生的消息 unix-stream 打開指定的SOCK_STREAM模式的unix套接字,接收日誌消息 unix-dgram 打開指定的SOCK_DGRAM模式的unix套接字,接收日誌消息 file 打開指定的文件讀取日誌信息 pipe,fifo 打開指定的管道或者FIFO設備,讀取日誌信息 tcp 在指定的TCP端口接收日誌消息 udp 在指定的UDP端口接收日誌消息 sun-stream(s) 在solaris系統中,打開一個(多個)指定的STREAM設備,從其中讀取日誌消息 |
過濾規則,過濾器 filter <identifier> {expression;}; 表達式中可以包含邏輯操作符 and or not |
例一個搜索來自blurp主機,包含deny的日誌消息的過濾指令 |
下面是syslog-ng的過濾函數: facility() 根據設備選擇日誌消息 level()或者priority() 根據優先級選擇日誌消息 program() 日誌消息的程序名是否匹配一個正則表達式 host() 日誌消息的主機名是否和一個正則表達式匹配 match() 對日誌消息的內容進行正則匹配 filter() 調用另一條過濾規則並判斷它的值 |
日誌消息的目的 destination 指定日誌消息的去處。目的可以包括一些目的驅動器,指定日誌的派發方向。 destination <identifier> { destination-driver(params);estination-driver(params);.....}; |
下面是syslog-ng支持的日誌消息目的驅動器: |
日誌路徑
前面的章節中,我們學習瞭如何定義消息源、過濾器和消息目的。現在我們要把這些結合起來形成一條完整的指令。凡是來源於指定的消息源,匹配所有指定的過濾器,並送到指定的地址。其語法如下:
log { source(s1); source(s2); ...
filter(f1); filter(f2); ...
destination(d1); destination(d2); ... };
實例
source s_all {< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />
# message generated by Syslog-NG internal(); # standard Linux log source (this is the default place for the syslog() # function to send logs to) unix-stream("/dev/log"); # messages from the kernel file("/proc/kmsg" log_prefix("kernel: ")); # use the following line if you want to receive remote UDP logging messages # (this is equivalent to the "-r" syslogd flag) # udp(); udp(ip("0.0.0.0") port(514));
};
#===========================added by Bill ============ filter f_aqtas { facility(local7);}; filter f_aqvue { facility(local6);}; filter f_aqlyx { facility(local5);};
destination aqtas { file("/var/log/aqtas.log"); }; destination aqvue { file("/var/log/aqvue.log"); }; destination aqlyx { file("/var/log/aqlyx.log"); };
log { source(s_all); filter (f_aqtas); destination(aqtas); }; log { source(s_all); filter (f_aqvue); destination(aqvue); }; log { source(s_all); filter (f_aqlyx); destination(aqlyx); }; |
=======
以上已經將主要的syslog-ng的配置內容做了說明,還有其他一些需要了解
選項 選項可以改變syslog-ng 的行爲,語法如下: options { option1(params);option(params);.... } |
以下是syslog-ng支持的參數: 名字 參數類型 描述 time_reopen() 數字 一個斷開的連接重新連接之前需要等待的時間 time_reap() 數字 一個閒置的目標文件關閉之前需要等待的時間 sync_freq() 數字 在寫入文件之前,可以緩衝的日誌消息行數 mark_freq() 數字 目前尚未實現 log_fifo_size() 數字 輸出隊列的行數 chain_hostnames() yes/no 打開/關閉主機名鏈(用於日誌轉發) use_time_recvd() yes/no 使用收到日誌消息的時間,不用日誌消息中指定的時間 use_dns() yes/no 打開/關閉DNS查詢功能。因爲DNS查詢無法返回會造成syslog-ng處於阻塞狀態,從而造成拒絕服務攻擊。爲了避免這種情況的出現,應該使用防火牆嚴格保護使用syslog-ng的網絡節點,並確認syslog-ng使用的所有主機都是可以解析的。 use_fqdn() yes/no 使用完整的域名 gc_idle_threshold() 數字 當syslog-ng空閒時,設置其進入垃圾信息收集狀態的閥值。一旦分配的對象數達到了這個數字,syslog-ng就啓動垃圾信息收集狀態。默認值是1000。 gc_busy_threshold() 數字 當syslog-ng忙時,設置其進入垃圾信息收集狀態的閥值。一旦分配的對象數達到這個數字,syslog-ng就啓動垃圾信息收集狀態。默認值是3000。 |
修改完 syslog-ng 之後要重啓服務:
# /etc/init.d/syslog-ng restart
測試
現在你日誌一般是認證日誌,所以你可以先嚐試着打開一個新的登錄窗口,使用su 或者是 sudo 都可以。接着檢查 /var/log/auth.log 文件。在客戶端上做一些操作,接着檢查 /var/log/HOSTS 是否已經爲遠程客戶端創建了新的目錄。
另外一個方法是使用更加高級的 logger 命令:
# logger “this is a test”
# logger -p auth.debug “this is a test”
==================補充:20110907
1、facility facility定義日誌消息的範圍,其可使用的key有: 引用 auth -由 pam_pwdb 報告的認證活動。 authpriv -包括特權信息如用戶名在內的認證活動 cron -與 cron 和 at 有關的計劃任務信息。 daemon -與 inetd 守護進程有關的後臺進程信息。 kern -內核信息,首先通過 klogd 傳遞。 lpr -與打印服務有關的信息。 mail -與電子郵件有關的信息 mark - syslog內部功能用於生成時間戳 news -來自新聞服務器的信息 syslog -由 syslog 生成的信息 user -由用戶程序生成的信息 uucp -由 uucp 生成的信息 local0-local7 -與自定義程序使用 * 通配符代表除了 mark 以外的所有功能 除mark爲內部使用外,還有security爲一箇舊的key定義,等同於auth,已經不再建議使用。 2、level級別 level定義消息的緊急程度。按嚴重程度由高到低順序排列爲: 引用 emerg -該系統不可用,等同panic alert -需要立即被修改的條件 crit -阻止某些工具或子系統功能實現的錯誤條件 err -阻止工具或某些子系統部分功能實現的錯誤條件,等同error warning -預警信息,等同warn notice -具有重要性的普通條件 info -提供信息的消息 debug -不包含函數條件或問題的其他信息 none -沒有重要級,通常用於排錯 * 所有級別,除了none 其中,panic、error、warn均爲舊的標識符,不再建議使用。 在定義level級別的時候,需要注意兩點: 引用 1)優先級是由應用程序在編程的時候已經決定的,除非修改源碼再編譯,否則不能改變消息的優先級; 2)低的優先級包含高優先級,例如,爲某個應用程序定義info的日誌導向,則涵蓋notice、warning、err、crit、alert、emerg等消息。(除非使用=號定義) 3、selector選擇條件 通過小數點符號“.”把facility和level連接在一起則成爲selector(選擇條件)。 可以使用分號“;”同時定義多個選擇條件。也支持三個修飾符: 引用 * - 所有日誌信息 = - 等於,即僅包含本優先級的日誌信息 ! - 不等於,本優先級日誌信息除外 |