rsyslog介紹與使用
Tags: Linux, Monitoring, Log, Rsyslog

1. 介紹

在 Cent OS 中，日志是使用rsyslogd守護進程進行管理的，該進程是之前版本的系統中syslogd的升級版，對原有的日志系統進行了功能的擴展，提供了諸如過濾器，日志加密保護，各種配置選項，輸入輸出模塊，支持通過 TCP 或者 UDP 協議進行傳輸等。

rsyslog的配置文件為 /etc/rsyslog.conf , 大多數日志文件都位於 /var/log/ 目錄中。 大多數日志文件都位於 /var/log/ 目錄中。在該目錄中，你可能註意到很多日志文件末尾包含一串數字（如 maillog-20150301 ），這說明這些日志文件經過了日志轉儲，這樣可以避免日志文件過大。

2. 配置解說

Rsyslog 的主要配置文件為 /etc/rsyslog.conf 文件。這個檔案規定了『(1)什麼服務 (2)的什麼等級訊息 (3)需要被記錄在哪裡(裝置或檔案)』 這三個咚咚，所以設定的語法會是這樣：

服務名稱.[=!]訊息等級 訊息記錄的檔名或裝置或主機

# 底下以 mail 這個服務產生的 info 等級為例： mail.info /var/log/maillog_info # 這一行說明：mail 服務產生的大於等於 info 等級的訊息，都記錄到

# /var/log/maillog_info 檔案中的意思。

我們將上面的資料簡單的分為三部分來說明：

服務名稱 rsyslogd 主要還是透過 Linux 核心提供的 syslog 相關規範來設定資料的分類的，Linux 的 syslog 本身有規範一些服務訊息， 你可以透過這些服務來儲存系統的訊息。Linux 核心的 syslog 認識的服務類型主要有底下這些： (可使用 man 3 syslog 查詢到相關的資訊，或查詢 syslog.h 這個檔案來了解的！)

訊息等級 同一個服務所產生的訊息也是有差別的，有啟動時僅通知系統而已的一般訊息 (information)， 有出現還不至於影響到正常運作的警告訊息 (warn) ，還有系統硬體發生嚴重錯誤時，所產生的重大問題訊息 (error 等等)； 訊息到底有多少種嚴重的等級呢？基本上，Linux 核心的 syslog 將訊息分為七個主要的等級，根據 syslog.h 的定義，訊息名稱與數值的對應如下：

特別留意一下在訊息等級之前還有 .[=!] 的連結符號喔！他代表的意思是這樣的：

1 . ：代表『比後面還要嚴重的等級 (含該等級) 都被記錄下來』的意思，例如： mail.info 代表只要是 mail 的資訊，而且該資訊等級嚴重於 info (含 info 本身)時，就會被記錄下來的意思。 2 .=：代表所需要的等級就是後面接的等級而已， 其他的不要！ 3 .!：有點反向選擇的感覺，代表忽略大於等於這個等級的訊息！ 亦即是低於這個等級的才會被紀錄的意思！

一般來說，我們比較常使用的是『.』這個連結符號啦！

訊息記錄的檔名或裝置或主機 這個訊息要放置在哪裡的設定了。通常我們使用的都是記錄的檔案啦！但是也可以輸出到裝置呦！ 例如印表機之類的！也可以記錄到不同的主機上頭去呢！底下就是一些常見的放置處：

檔案的絕對路徑：通常就是放在 /var/log 裡頭的檔案啦！ 印表機或其他：例如 /dev/lp0 這個印表機裝置 使用者名稱：顯示給使用者囉！ 遠端主機：例如 @study.vbird.tsai 當然啦，要對方主機也能支援才行！ *：代表『目前在線上的所有人』，類似 wall 這個指令的意義！

看完上面的說明，相信你一定會越來越迷糊！啊！怎麼會有 syslog, rsyslogd, rsyslog.service！見鬼～名稱都不相同！那是啥東西？ 基本上，這幾個東西你應該要這樣看：

syslog 這個是 Linux 核心所提供的登錄檔設計指引，所有的要求大概都寫入道一個名為 syslog.h 的標頭檔案中。如果你想要開發與登錄檔有關的軟體， 那你就得要依循這個 syslog 函數的要求去設計才行！可以使用 man 3 syslog 去查詢一下相關的資料！ rsyslogd 為了要達成實際上進行訊息的分類所開發的一套軟體，所以，這就是最基本的 daemon 程式！ rsyslog.service 為了加入 systemd 的控制，因此 rsyslogd 的開發者設計的啟動服務腳本設定！

這樣簡單的分類，應該比較容易了解名稱上面的意義了吧？早期 CentOS 5.x 以前，要達成 syslog 的功能是由一隻名為 syslogd 的 daemon 來完成的， 從 CentOS 6 以來 (包含 CentOS 7) 則是透過 rsyslogd 這個 daemon 囉！

3. 設定檔完全解說

rsyslog.conf 註解

# rsyslog configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html

# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html #### MODULES ####################################################################### # The imjournal module bellow is now used as a message source instead of imuxsock.

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)

＃提供對本地系統日誌記錄的支持 $ModLoad imjournal # provides access to the systemd journal #提供对systemd日志的访問

#$ModLoad imklog # reads kernel messages (the same are read from journald) ＃提供內核日誌記錄支持

#$ModLoad immark # provides --MARK-- message capability ＃提供--MARK--消息功能 # Provides UDP syslog reception

#$ModLoad imudp

#$UDPServerRun 514 # Provides TCP syslog reception

#$ModLoad imtcp

#$InputTCPServerRun 514 # 上面的是 UDP 埠口，底下的是 TCP 埠口！如果你的網路狀態很穩定，就用 UDP 即可。

# 不過，如果你想要讓資料比較穩定傳輸，那麼建議使用 TCP 囉！所以修改底下兩行即可！ #### GLOBAL DIRECTIVES #####定義日誌格式默認模板################################################ # Where to place auxiliary files # 工作目錄

$WorkDirectory /var/lib/rsyslog # Use default timestamp format

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

＃使用傳統的時間戳格式。 ＃要啟用高精度時間戳，請註釋掉以下行。 # File syncing capability is disabled by default. This feature is usually not required,

# not useful and an extreme performance hit

#$ActionFileEnableSync on # Include all config files in /etc/rsyslog.d/

$IncludeConfig /etc/rsyslog.d/*.conf

＃在/etc/rsyslog.d/中包含所有配置文件 # Turn off message reception via local log socket;

# local messages are retrieved through imjournal now.

$OmitLocalLogging on # File to store the position in the journal

$IMJournalStateFile imjournal.state

#### RULES ################################################################################# # Log all kernel messages to the console.

# Logging much else clutters up the screen.

#kern.* /dev/console

#kern.*：只要是核心產生的訊息，全部都送到 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

#由於 mail, authpriv, cron 等類別產生的訊息較多， 且已經寫入底下的數個檔案中，因此在 /var/log/messages 裡面就不記錄這些項目。除此之外的其他訊息都寫入 /var/log/messages 中。這也是為啥我們說這個 messages 檔案很重要的緣故！

# The authpriv file has restricted access.

authpriv.* /var/log/secure

#認證方面的訊息均寫入 /var/log/secure 檔案；

# Log all the mail messages in one place.

mail.* -/var/log/maillog

#郵件方面的訊息則均寫入 /var/log/maillog 檔案；

#在記錄的檔案 /var/log/maillog 前面還有個減號『 - 』是幹嘛用的？由於郵件所產生的訊息比較多，因此我們希望郵件產生的訊息先儲存在速度較快的記憶體中 (buffer) ，等到資料量夠大了才一次性的將所有資料都填入磁碟內，這樣將有助於登錄檔的存取性能。 只不過由於訊息是暫存在記憶體內，因此若不正常關機導致登錄資訊未回填到登錄檔中，可能會造成部分資料的遺失。

# Log cron stuff

cron.* /var/log/cron

#例行性工作排程均寫入 /var/log/cron 檔案；

# Everybody gets emergency messages

*.emerg :omusrmsg:*

#當產生最嚴重的錯誤等級時，將該等級的訊息以 wall 的方式廣播給所有在系統登入的帳號得知， 要這麼做的原因是希望在線的使用者能夠趕緊通知系統管理員來處理這麼可怕的錯誤問題。 # Save news errors of level crit and higher in a special file.

uucp,news.crit /var/log/spooler

#uucp 是早期 Unix-like 系統進行資料傳遞的通訊協定，後來常用在新聞群組的用途中。 news 則是新聞群組。當新聞群組方面的資訊有嚴重錯誤時就寫入 /var/log/spooler 檔案中；

# Save boot messages also to boot.log

local7.* /var/log/boot.log

#將本機開機時應該顯示到螢幕的訊息寫入到 /var/log/boot.log 檔案中； # ### begin forwarding rule######转发规则################################################## # The statement between the begin ... end define a SINGLE forwarding

# rule. They belong together, do NOT split them. If you create multiple

# forwarding rules, duplicate the whole block!

# Remote Logging (we use TCP for reliable delivery)

#

# An on-disk queue is created for this action. If the remote host is

# down, messages are spooled to disk and sent when it is up again. #$ActionQueueFileName fwdRule1 # unique name prefix for spool files #唯一名称前缀

#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #1gb空间限制（尽可能多使用）

#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown #关闭时将消息保存到磁盘

#$ActionQueueType LinkedList # run asynchronously #使用链接列表模式

#$ActionResumeRetryCount -1 # infinite retries if host is down #如果主机关闭，则会无限重试 # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional

#*.* @@remote-host:514

#指定某個資訊傳送到這部主機！ 舉例來說，我們的登錄檔伺服器 IP 為 192.168.1.100 ，而 client 端希望所有的資料都>送給主機， 所以，可以在 /etc/rsyslog.conf 裡面新增這樣的一行:

*.* @@192.168.1.100

#*.* @192.168.1.100 # 若用 UDP 傳輸，設定要變這樣！ # ### end of the forwarding rule ###

參考網站 認識與分析登錄檔

Linux 系统使用rsyslog管理日誌

## 如何对rsyslog进行配置

# 用rsyslog現在與logrotate的管理日誌