Linux-本地日誌服務管理(rsyslog基礎)

發表於2022-03-14

系統環境

系統環境為CentOS Linux release 7.6.1810 (Core)

1.常見的兩種日誌管理服務

1.1 RSYSLOG系統日誌服務

rsyslog是CentOS 6以後版本的系統管理服務,相較於Centos5的日誌管理服務sysklogd,rsyslog提供了高效能,出色的安全性和模組化設計。如今大多數的Linux服務都提供了對應的rsyslog介面,以方便使用rsyslog來管理對應的服務日誌。但具體是否支援還是需要靠經驗與對應服務的官網介紹來了解。

1.2 ELK

當管理大量伺服器的日誌時,使用rsyslog便顯得有些力不從心,因此在面臨叢集伺服器的時候,便回採取ELK進行日誌管理服務。
ELKELK平臺是一套完整的日誌集中處理解決方案,將ElasticSearch、Logstash和Kiabana三個開源工具配合使用,完成更強大的使用者對日誌的查詢、排序、統計需求。
這裡僅進行簡單介紹,具體部署以後再說。

2.RSYSLOG日誌服務的相關知識

2.1 RSYSLOG日誌訊息級別

系統日誌級別共分為7類

等級名稱 說 明
debug (LOG_DEBUG) 一般的除錯資訊說明
info (LOG_INFO) 基本的通知資訊
notice (LOG_NOTICE) 普通訊息,但是有一定的重要性
warning(LOG_WARNING) 警吿資訊,但是還不會影響到服務或系統的執行
error(LOG_ERR) 錯誤資訊, 一般達到err等級的資訊已經可以影響到服務成系統的執行了
crit (LOG_CRIT) 臨界狀況信思,比err等級還要嚴重
alert (LOG_ALERT) 警告資訊,比crit等級還要嚴重,必須立即採取行動
emerg (LOG_EMERG) 緊急等級資訊,系統已經無法使用了

一般來說當出現error級別的資訊時,就應該對服務系統進行對應的處理,否則到達更高階別的告警時,系統服務會出現嚴重問題,造成生產事故。

2.2 RSYSLOG日誌服務的配置檔案位置

使用rpm -qc rsyslog可以檢視rsyslog的相關的配置檔案,一般來說服務的配置檔案都是以.conf為字尾的。

image

所以可知rsyslog的配置檔案為/etc/rsyslog.conf。

2.3 配置檔案解析

rsyslog日誌服務配置檔案主要有三大模組。

2.3.1 功能模組配置(MODULES)

image

功能模組是指rsyslog所開啟的功能,通過註釋符號“#”來標記一個模組功能是否開啟。

2.3.2 全域性配置 (GLIVAK DURECTUVES)

image

全域性配置是指rsyslog服務中所有子配置檔案都需要遵守的規則,當子配置檔案與全域性配置衝突的時候,採取全域性配置生效。

2.3.3 規則(RULES)

image
這裡定義著什麼服務到達什麼日誌訊息級別的日誌記錄到哪裡的資訊。以*.info;mail.none;authpriv.none;cron.none /var/log/messages為例。

  • *.info:所有服務到達info級別的日誌都將被記錄在日誌檔案中
  • /var/log/messages:日誌檔案記錄位置
  • mail.none:mail組的日誌不記錄在這個日誌裡,其餘的.none意義相同

具體服務屬於什麼組,這由各個服務的配置檔案決定(支援rsyslog的服務)。

除這裡由rsyslog定義的組外,還有自定義LOCAL0-7共8個組由自己自定義規則,並將服務加入在對應組當中。

2.4 日誌格式解析

由2.3.3可知,一般服務的日誌都儲存在/var/log/messages中,這裡使用cat,檢視一下日誌資訊的基本結構。

image

Mar 13 22:39:27 localhost systemd: Started Hostname Service.為例。

  • Mar 13 22:39:27:時間
  • localhost:主機名稱
  • systemd:服務名稱
  • started Hostname Service.:事件

3.服務日誌位置更改

要更改服務日誌的位置,有以下幾個步驟。

graph TD A[定位服務配置檔案] --> B[修改該服務的日誌組] B --> C[在rsyslog定義該日誌組的日誌記錄規則] C --> D[重啟rsyslod與對應服務]

3.1 修改服務日誌組

以SSH服務為例,該服務的配置檔案為/etc/ssh/sshd_config,進入編輯該服務配置檔案。
image

可以看見原來SSH的日誌寫入規則是定義在rsyslog的"authrriv"中的,由2.3.3中的截圖可知,如果不對其進行修改,該服務的日誌的寫入位置應該為/var/log/secure中。先將SSH服務加入到自定義組LOCAL0中。(原有的配置最好採用註釋的方法使他不生效,如果出了故障,方便還原)

image

儲存並退出。

3.2 修改rsyslog的日誌組規則

在rsyslog的RULUES模組下,定義新的日誌組LOCAL0日誌寫入規則
定義LOCAL0組內服務的所有日誌全都寫在/var/log/ssh.log中。

image

儲存並退出。

3.3 重啟rsyslog與對應服務

重啟rsyslog和ssh服務以使對應的配置檔案生效。
image

3.4測試

測試使用ssh連線192.168.186.4.
image

檢視/var/log/ssh.log是否有日誌產生。

image

4.網路日誌傳輸

主機為192.168.186.5,想要將日誌使用TCP連線方式,將日誌傳輸到192.168.186.4 分為以下幾個步驟。

graph TD A[.4主機防火牆開啟514埠] --> B[.4主機配置rsyslog檔案開啟TCP接收日誌服務] B --> C[.5主機配置日誌傳輸至.4主機]

4.1 .4主機配置

1.防火牆開啟514埠

[root@localhost ~]# firewall-cmd --zone=public --add-port=514/tcp --permanent
success

2.編輯/etc/rsyslog.conf,開啟TCP接收日誌功能(19,20行註釋刪掉)
image

3.重啟防火牆服務與rsyslog服務

[root@localhost ~]# systemctl restart firewalld.service rsyslog.service

4.檢視514埠是否正常開啟

[root@localhost ~]# ss -ntap |grep 514
LISTEN     0      25           *:514                      *:*                   users:(("rsyslogd",pid=9617,fd=3))
LISTEN     0      25          :::514                     :::*                   users:(("rsyslogd",pid=9617,fd=4))

4.2 .5主機配置

1.配置TCP傳輸日誌訊息

image

2.重啟rsyslog服務
[root@localhost ~]# systemctl restart rsyslog.service

4.3 測試

1.在.5主機輸入

logger "this is testing log from 192.168.186.5"

2.在.5主機檢視messages資訊,這條日誌的時間是顯示的是.4主機的時間
image

4.4是不是虛擬機器BUG呢

由於rsyslog日誌中在未經過特殊設定只顯示主機名,不顯示IP地址,所以區分不同主機的資訊需要更改主機名稱。
將.5主機的主機名稱設定為store5。

[root@localhost ~]# hostnamectl set-hostname store5
[root@localhost ~]# su root
[root@store5 ~]# 

測試日誌訊息為
logger "this is test log from store5"

.4主機接收到的日誌中主機名依舊為localhost(未改名的主機名稱)

image

將.5主機的網路斷開重連後再次測試,主機名依舊沒有改變。重啟後主機名才變化。

image

相關文章