天天看點

centos7的syslog知識點

一、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)、日志裝置(可以了解為日志類型):

​auth            --pam産生的日志​

​authpriv        --​

​​

​ssh​

​​

​,​

​​

​ftp​

​​

​等登入資訊的驗證資訊​

​cron​

​​            ​

​ --定時任務​

​kern            --核心​

​lpr​

​​             ​

​ --列印​

​mail            --郵件​

​mark(syslog)    --rsyslog服務内部的資訊,時間辨別​

​news            --新聞討論區​

​user            --使用者程式産生的相關資訊​

​uucp            --unix to unix copy, unix主機之間相關的通訊​

​local​

​​ ​

​ 1~7       --自定義的日志裝置​

b)、日志級别,從上到下,級别從高到低,記錄的資訊越來越少。

​debug       --有調式資訊的,日志資訊最多​

​info        --一般資訊的日志,最常用​

​notice      --最具有重要性的普通條件的資訊​

​warning     --警告級别​

​err         --錯誤級别,阻止某個功能或者子產品不能正常工作的資訊​

​crit        --嚴重級别,阻止整個系統或者整個軟體不能正常工作的資訊​

​alert       --需要立刻修改的資訊​

​emerg       --核心崩潰等嚴重資訊​

​none        --什麼都不記錄​

c)、連接配接符号,其中的xxx表示某一日志級别

​.xxx        表示小于等于xxx級别的日志資訊​

​.=xxx       表示等于xxx級别的日志資訊​

​.!xxx       表示在xxx之外的等級的日志資訊​

​.*          所有等級的日志資訊​

d)、日志處理方式,意思就是将特定的日志做怎樣的處理。

​1. 記錄到普通檔案或裝置檔案::​

​/var/log/file​

​​

​.log   ​

​​

​#将日志記錄到檔案/var/log/file.log​

​/dev/pts/0​

​​          ​

​ #将日志記錄在裝置/dev/pts/0​

​2. 轉發到遠端的日志伺服器​

​@192.168.0.1            ​

​​

​#使用UDP協定轉發到192.168.0.1的514(預設)端口​

​@@192.168.0.1:10514     ​

​​

​#使用TCP協定轉發到192.168.0.1的10514端口,這是指定非預設端口10514,tcp的預設端口也是514​

​3. 發送給使用者(需要線上才能收到)::​

​root                  ​

​​

​#發給root使用者​

​root,kadefor,up01     ​

​​

​#使用,号分隔多個使用者​

​*                     ​

​​

​#*号表示所有線上使用者​

​4. 忽略,丢棄::​

​~                     ​

​​

​# 忽略丢棄日志​

​5. 執行腳本::​

​^​

​​

​/tmp/test​

​​

​.sh         ​

​​

​#^号後跟可執行腳本或程式的絕對路徑,這個可以用來觸發報警動作。​

舉2個例子

将mail的所有級别的日志,記錄到檔案/var/log/maillog中,其中的符号”-“表示使用緩存模式

​mail.*                                                  -​

​​

​/var/log/maillog​

将所有日志的所有級别的資訊采用UDP協定送給遠端伺服器192.168.186.134一份

​*.*  @192.168.186.134​

2、用執行個體說話

a)、将所有伺服器的系統日志送給遠端日志伺服器,遠端伺服器用來接收和集中所有伺服器送來的系統日志。

采用UDP協定發送和接收,在遠端伺服器端配置檔案/etc/rsyslog.conf開啟下面兩行

​# Provides UDP syslog reception​

​$ModLoad imudp​

​$UDPServerRun 514​

客服端的配置檔案/etc/rsyslog.conf最後新增加一行,用來将所有的日志資訊發送給遠端的伺服器192.168.186.134

​*.*  @192.168.186.134​

每次更改配置檔案後不要忘記重新開機rsyslog服務。

測試:重新開機某台伺服器的rsyslog服務看看遠端的伺服器能不能收到日志

​[root@syndic02 ~]​

​​

​# /etc/init.d/rsyslog restart​

​關閉系統日志記錄器:                                       [确定]​

​啟動系統日志記錄器:                                       [确定]​

​[root@syndic02 ~]​

​​

​#​

看遠端的伺服器已經收到了相應的日志,如果沒有收到日志是不是防火牆擋住了,如果沒有使用标準的端口還要看看是不是SELinux服務開啟了。

​[root@saltstack ~]​

​​

​# tailf /var/log/messages​

​... ... ...​

​Nov 13 14:32:50 syndic02 kernel: Kernel logging (proc) stopped.​

​Nov 13 14:32:50 syndic02 rsyslogd: [origin software=​

​​

​"rsyslogd"​

​​ ​

​ swVersion=​

​​

​"5.8.10"​

​​ ​

​ x-pid=​

​​

​"1641"​

​​ ​

​ x-info=​

​​

​"http://www.rsyslog.com"​

​​

​] exiting on signal 15.​

​Nov 13 14:32:50 syndic02 kernel: imklog 5.8.10, log ​

​​

​source​

​​ ​

​ = ​

​​

​/proc/kmsg​

​​ ​

​ started.​

​Nov 13 14:32:50 syndic02 rsyslogd: [origin software=​

​​

​"rsyslogd"​

​​ ​

​ swVersion=​

​​

​"5.8.10"​

​​ ​

​ x-pid=​

​​

​"1657"​

​​ ​

​ x-info=​

​​

​"http://www.rsyslog.com"​

​​

​] start​

b)自定義裝置,手動将日志送給rsyslog服務

先修改配置檔案,新增自定義裝置local0并将其info級别及其以下級别的日志記錄到檔案/var/log/test.log檔案中

​local0.info                                             ​

​​

​/var/log/test​

​​

​.log​

修改配置檔案後不要忘記重新開機rsyslog服務使其生效

然後我們用logger指令向裝置local0送日志,總共發送了4次日志,前三次的級别都是info及其以下級别的日志,第四次是debug級别的日志。參數”-t”是将每次發送的日志資訊打上自定義标簽。

​[root@syndic02 ~]​

​​

​# logger -p local0.info "hello world"​

​[root@syndic02 ~]​

​​

​# logger -t "This is Test" -p local0.info "hello world"​

​[root@syndic02 ~]​

​​

​# logger -t "This is Test" -p local0.warning "hello world"​

​[root@syndic02 ~]​

​​

​# logger -t "This is Test" -p local0.debug "hello world"​

​[root@syndic02 ~]​

​​

​#​

結果是前三次都記錄到了檔案/var/log/test.log中,第四條由于超過info級别為debug級别故忽略了。

​[root@syndic02 ~]​

​​

​# tailf /var/log/test.log​

​Nov 13 14:41:27 syndic02 root: hello world​

​Nov 13 14:42:22 syndic02 This is Test: hello world​

​Nov 13 14:42:56 syndic02 This is Test: hello world​

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

-----------------------------------------------------------------

繼續閱讀