系統環境
系統環境為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為后綴的。
所以可知rsyslog的配置文件為/etc/rsyslog.conf。
2.3 配置文件解析
rsyslog日志服務配置文件主要有三大模塊。
2.3.1 功能模塊配置(MODULES)
功能模塊是指rsyslog所開啟的功能,通過注釋符號“#”來標記一個模塊功能是否開啟。
2.3.2 全局配置 (GLIVAK DURECTUVES)
全局配置是指rsyslog服務中所有子配置文件都需要遵守的規則,當子配置文件與全局配置沖突的時候,采取全局配置生效。
2.3.3 規則(RULES)
這里定義着什么服務到達什么日志消息級別的日志記錄到哪里的信息。以*.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,查看一下日志信息的基本結構。
以Mar 13 22:39:27 localhost systemd: Started Hostname Service.
為例。
Mar 13 22:39:27
:時間localhost
:主機名稱systemd
:服務名稱started Hostname Service.
:事件
3.服務日志位置更改
要更改服務日志的位置,有以下幾個步驟。
3.1 修改服務日志組
以SSH服務為例,該服務的配置文件為/etc/ssh/sshd_config,進入編輯該服務配置文件。
可以看見原來SSH的日志寫入規則是定義在rsyslog的"authrriv"中的,由2.3.3中的截圖可知,如果不對其進行修改,該服務的日志的寫入位置應該為/var/log/secure中。先將SSH服務加入到自定義組LOCAL0中。(原有的配置最好采用注釋的方法使他不生效,如果出了故障,方便還原)
保存並退出。
3.2 修改rsyslog的日志組規則
在rsyslog的RULUES模塊下,定義新的日志組LOCAL0日志寫入規則
定義LOCAL0組內服務的所有日志全都寫在/var/log/ssh.log中。
保存並退出。
3.3 重啟rsyslog與對應服務
重啟rsyslog和ssh服務以使對應的配置文件生效。
3.4測試
測試使用ssh連接192.168.186.4.
查看/var/log/ssh.log是否有日志產生。
4.網絡日志傳輸
主機為192.168.186.5,想要將日志使用TCP連接方式,將日志傳輸到192.168.186.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行注釋刪掉)
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傳輸日志消息
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主機的時間
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(未改名的主機名稱)
將.5主機的網絡斷開重連后再次測試,主機名依舊沒有改變。重啟后主機名才變化。