一、syslog協定介紹
1、介紹
在Unix類作業系統上,rsyslog廣泛應用于系統日志。rsyslog日志消息既可以記錄在本地檔案中,也可以通過網絡發送到接收syslog的伺服器。接收syslog的伺服器可以對多個裝置的syslog消息進行統一的存儲,或者解析其中的内容做相應的處理。常見的應用場景是網絡管理工具、安全管理系統、日志審計系統。
完整的syslog日志中包含産生日志的程式子產品(Facility)、嚴重性(Severity或 Level)、時間、主機名或IP、程序名、程序ID和正文。在Unix類作業系統上,能夠按Facility和Severity的組合來決定什麼樣的日志消息是否需要記錄,記錄到什麼地方,是否需要發送到一個接收rsyslog的伺服器等。由于rsyslog簡單而靈活的特性,rsyslog不再僅限于 Unix類主機的日志記錄,任何需要記錄和發送日志的場景,都可能會使用rsyslog。
rsyslog是syslog的多線程增強版,現在Fedora、Ubuntu,、rhel6、centos6預設的日志系統都是rsyslog了。rsyslog主要用來收集系統産生的各種日志,日志預設放在/var/log/目錄下。先簡單看看配置檔案,然後給幾個執行個體也算是對rsyslog的一個更深入的了解吧。
1、配置檔案解析
主配置檔案/etc/rsyslog.conf配置檔案中有很多内容, 但最主要的是指定需要記錄哪些服務和需要記錄服務什麼等級的資訊。
格式是:日志裝置[連接配接符号]日志級别 日志處理方式(action)
a)、日志裝置(可以了解為日志類型):
|
b)、日志級别,從上到下,級别從高到低,記錄的資訊越來越少。
|
c)、連接配接符号,其中的xxx表示某一日志級别
|
d)、日志處理方式,意思就是将特定的日志做怎樣的處理。
|
舉2個例子
将mail的所有級别的日志,記錄到檔案/var/log/maillog中,其中的符号”-“表示使用緩存模式
|
将所有日志的所有級别的資訊采用UDP協定送給遠端伺服器192.168.186.134一份
|
2、用執行個體說話
a)、将所有伺服器的系統日志送給遠端日志伺服器,遠端伺服器用來接收和集中所有伺服器送來的系統日志。
采用UDP協定發送和接收,在遠端伺服器端配置檔案/etc/rsyslog.conf開啟下面兩行
|
客服端的配置檔案/etc/rsyslog.conf最後新增加一行,用來将所有的日志資訊發送給遠端的伺服器192.168.186.134
|
每次更改配置檔案後不要忘記重新開機rsyslog服務。
測試:重新開機某台伺服器的rsyslog服務看看遠端的伺服器能不能收到日志
|
看遠端的伺服器已經收到了相應的日志,如果沒有收到日志是不是防火牆擋住了,如果沒有使用标準的端口還要看看是不是SELinux服務開啟了。
|
b)自定義裝置,手動将日志送給rsyslog服務
先修改配置檔案,新增自定義裝置local0并将其info級别及其以下級别的日志記錄到檔案/var/log/test.log檔案中
|
修改配置檔案後不要忘記重新開機rsyslog服務使其生效
然後我們用logger指令向裝置local0送日志,總共發送了4次日志,前三次的級别都是info及其以下級别的日志,第四次是debug級别的日志。參數”-t”是将每次發送的日志資訊打上自定義标簽。
|
結果是前三次都記錄到了檔案/var/log/test.log中,第四條由于超過info級别為debug級别故忽略了。
|
c、收集各台伺服器的history記錄,可以參考文章《日志管理(1) 審計并收集history記錄》。
關于rsyslog的簡單介紹就這些了,其它用法如過濾、加載外部子產品、收集MySQL程式日志等,有興趣的可以繼續深入
二、syslog函數
Linux C中提供一套系統日記寫入接口,包括三個函數:openlog,syslog和closelog。
調用openlog是可選擇的。如果不調用openlog,則在第一次調用syslog時,自動調用openlog。調用closelog也是可選擇的,它隻是關閉被用于與syslog守護程序通信的描述符。
#include //頭檔案
void openlog (char*ident, int option, int facility);
void closelog();
void syslog(int priority, char*format,……);
priority參數的格式(severity level|facility code)
示例:
LOG_ERR|LOG_USER
severity level:
Priority Level Description
LOG_EMERG An emergency situation
LOG_ALERT High-priority problem, such as database corruption
LOG_CRIT Critical error, such as hardware failure
LOG_ERR Errors
LOG_WARNING Warning
LOG_NOTICE Special conditions requiring attention
LOG_INFO Informational messages
LOG_DEBUG Debug messages
facility value(轉自syslog.h頭檔案):
#define LOG_KERN (0<<3)
#define LOG_USER (1<<3)
#define LOG_MAIL (2<<3)
#define LOG_DAEMON (3<<3)
#define LOG_AUTH (4<<3)
#define LOG_SYSLOG (5<<3)
#define LOG_LPR (6<<3)
#define LOG_NEWS (7<<3)
#define LOG_UUCP (8<<3)
#define LOG_CRON (9<<3)
#define LOG_AUTHPRIV (10<<3)
#define LOG_FTP (11<<3)
三、linux rsyslog配置
1)、syslog日志服務:
1、守護程序:syslog
2、端口:514
3、配置檔案:/etc/rsyslog.conf (centos6起/etc/syslog.conf不再有!而是/etc/rsyslog.conf代替!)
4、常見日志檔案:
/var/log/dmesg 核心引導資訊日志
/var/log/message 标準系統錯誤資訊日志
/var/log/maillog 郵件系統資訊日志
/var/log/cron 計劃任務日志
/var/log/secure 安全資訊日志
2)、 配置檔案:
syslog配置檔案如下
-----------------------------------------------------------------
[root@server ~]# vim /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.*
-----------------------------------------------------------------
配置檔案中每行表示一個項目,格式為:facility.level action
由兩個部分組成:
第一部分:選擇條件(可以有一個或者多個條件),分為兩個字段。
第二部分:操作動作;
1、選擇條件
選擇條件本身分為兩個字段,之間用一個小數點(.)分隔。前一字段是一項服務,後一字段是一個優先級。選擇條件是對消息類型的一種分類,這種分類便于人們把不同類型的消息發送到不同的地方。在同一個syslog配置行上允許出現一個以上的選擇條件,但必須用分号(;)隔開。
常見facility:
kern 核心資訊;
user 使用者程序資訊;
mail 電子郵件相關資訊;
daemon 背景程序相關資訊;
authpriv 包括特權資訊如使用者名在内的認證活動;
cron 計劃任務資訊;
syslog 系統日志資訊
lpr 列印服務相關資訊。
news 新聞討論區伺服器資訊
uucp uucp 生成的資訊
local0----local7 本地使用者資訊
例如:
52 # Log anything (except mail) of level info or higher.
53 # Don't log private authentication messages!
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
2、重要級:
重要級是選擇條件的第二個字段,它代表消息的緊急程度。
按嚴重程度由低到高排序:
debug 不包含函數條件或問題的其他資訊
info 提供資訊的消息
none 沒有重要級,通常用于排錯
notice 具有重要性的普通條件
warning 預警資訊
err 阻止工具或某些子系統部分功能實作的錯誤條件
crit 阻止某些工具或子系統功能實作的錯誤條件
alert 需要立即被修改的條件
emerg 該系統不可用
不同的服務類型有不同的優先級,數值較大的優先級涵蓋數值較小的優先級。如果某個選擇條件隻給出了一個優先級而沒有使用任何優先級限定符,對應于這個優先級的消息以及所有更緊急的消息類型都将包括在内。比如說,如果某個選擇條件裡的優先級是“warning”,它實際上将把“warning”、 “err”、“crit”、“alert”和“emerg”都包括在内。
3、操作動作
日志資訊可以分别記錄到多個檔案裡,還可以發送到命名管道、其他程式甚至另一台機器。
syslog 主要支援以下活動:
file 指定檔案的絕對路徑
terminal 或 prin 完全的串行或并行裝置标志符
@host(@IP位址) 遠端的日志伺服器
3)、 搭建Linux日志伺服器:
1、編輯/etc/sysconfig/syslog檔案,讓伺服器能夠接受用戶端傳來的資料:
在“SYSLOGD_OPTIONS”行上加“-r”選項以允許接受外來日志消息。
-----------------------------------------------------------------
[root@client ~]# vim /etc/sysconfig/syslog
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
#
SYSLOG_UMASK=077
# set this to a umask value to use for all log files as in umask(1).
# By default, all permissions are removed for "group" and "other".
-----------------------------------------------------------------
2、重新啟動syslog守護程序。
-----------------------------------------------------------------
[root@client ~]# service rsyslog restart
關閉核心日志記錄器: [确定]
關閉系統日志記錄器: [确定]
啟動系統日志記錄器: [确定]
啟動核心日志記錄器: [确定]
[root@client ~]#
-----------------------------------------------------------------
3、關閉iptables
[root@client ~]# service iptable stop
檢視防火牆狀态
# service iptable status
四、配置各用戶端:
1、配置/etc/syslog.conf
修改客戶機/etc/syslog.conf檔案,在有關配置行的操作動作部分用一個“@”字元指向日志伺服器
-----------------------------------------------------------------
[root@client ~]# vim /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
*.* @10.64.165.210
# The authpriv file has restricted access.
authpriv.* /var/log/secure
……下面省略
-----------------------------------------------------------------
另外如果配置了DNS域名的話可以使用域名。
2、重新開機用戶端syslog使設定生效。
檢測成果:
下圖是我們在用戶端重新開機iptables服務後在服務端看到的日志情況:
-----------------------------------------------------------------
[root@client ~]# cat /var/log/messages |tail
Nov 30 16:44:29 10.64.165.200 kernel: klogd 1.4.1, log source = /proc/kmsg started.
Nov 30 16:44:33 10.64.165.200 kernel: Removing netfilter NETLINK layer.
Nov 30 16:44:33 10.64.165.200 kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
Nov 30 16:44:33 10.64.165.200 kernel: Netfilter messages via NETLINK v0.30.
Nov 30 16:44:33 10.64.165.200 kernel: ip_conntrack version 2.4 (4096 buckets, 32768 max) - 228 bytes per conntrack
-----------------------------------------------------------------