作者:徐煒峰,單位:中國移動智慧家庭運(yùn)營中心
在現(xiàn)代計算和網(wǎng)絡(luò)環(huán)境中,日志管理變得至關(guān)重要,尤其是在企業(yè)日志管理、應(yīng)用故障排除以及安全事件監(jiān)控中。無論是在企業(yè)內(nèi)部的服務(wù)器集群中,還是在公有云中的分布式應(yīng)用系統(tǒng)中,分析日志數(shù)據(jù)對于監(jiān)控、故障排除、性能優(yōu)化和安全性都至關(guān)重要。而 rsyslog作為一個功能強(qiáng)大的開源工具,因其可靠性、靈活性和可擴(kuò)展性而成為許多組織和開發(fā)人員的首選。
Part 01●??rsyslog介紹?●
1.1 rsyslog日志服務(wù)簡介
rsyslog (rocket-fast system for log)是基于syslog協(xié)議完成系統(tǒng)日志的處理轉(zhuǎn)發(fā),它是一個極速的日志處理系統(tǒng),性能可以達(dá)到每秒百萬級別。它提供高性能、極好的安全功能和模塊化設(shè)計。
特性:
①高性能:rsyslog采用了高效的線程模型和異步處理機(jī)制,能夠快速而穩(wěn)定地處理大量的日志數(shù)據(jù)。
②靈活強(qiáng)大:rsyslog支持多種輸入和輸出模塊,可以與各種設(shè)備和系統(tǒng)集成,例如syslog、tcp、udp、tls等。同時,rsyslog還支持多種過濾和處理規(guī)則,可以根據(jù)需求定制化日志的存儲、轉(zhuǎn)發(fā)和處理方式。
③可擴(kuò)展性:rsyslog具有良好的可擴(kuò)展性,可以根據(jù)需求進(jìn)行定制開發(fā)和插件擴(kuò)展,滿足不同場景下的日志管理需求。
④安全性:rsyslog支持加密傳輸和認(rèn)證機(jī)制,保證日志數(shù)據(jù)的安全性和完整性。
圖1 rsyslog架構(gòu)圖
如圖1所示,rsyslog的消息流是從輸入模塊->預(yù)處理模塊->主隊列->過濾模塊- >執(zhí)行隊列->輸出模塊。
1.2 rsyslog基本配置
rsyslog引入了facility(設(shè)施)的概念,也就是 rsyslog服務(wù)進(jìn)程所要接收日志的各代理,這些代理負(fù)責(zé)收集對應(yīng)的日志信息;常用的日志設(shè)施有如下幾種:
auth , authpriv , cron , daemon , kern , lpr , mail , news , syslog , user, ftp , uucp , security, local0 ~ local7 ;另外系統(tǒng)日志還有priority優(yōu)先級概念,可用的優(yōu)先級包含 debug (7) , info (6) , notice (5) , warning (4) , err (3) , crit (2) , alert (1) , emerg (0) ,如圖2所示:
圖2 rsyslog的設(shè)施/優(yōu)先級圖
基于設(shè)施/優(yōu)先級的過濾器是最常用的方法,語法如下:FACILITY.PRIORITY,如圖3所示,為rsyslog的默認(rèn)規(guī)則。
圖3 rsyslog默認(rèn)rules圖
基礎(chǔ)格式,即最簡單的配置格式,沒有任何多余的功能,配置中默認(rèn)的內(nèi)容即為此格式。
# 郵件的所有信息存在/var/log/maillog;這里有一個“-”符號表示是使用異步的方式記錄
mail.* -/var/log/maillog
# 郵件的錯誤信息轉(zhuǎn)發(fā)到server.example.com,使用tcp連接(@@)
mail.error @@server.example.com
高級格式,支持更多模塊,更多參數(shù),更多選項,并且允許對日志格式,內(nèi)容等進(jìn)行自定義修改的格式。
# 郵件的所有信息存在/var/log/maillog;這里有一個“-”符號表示是使用異步的方式記錄
mail.* action(type="omfile" File="/var/log/maillog")
# 郵件的錯誤信息轉(zhuǎn)發(fā)到server.example.com,使用tcp連接(@@)
mail.error action(type="omfwd" Target="server.example.com" Port="10514" Protocol="tcp")
rsyslog.conf中還包括用于指定日志的輸入、輸出、過濾、格式化等操作,以下是rsyslog.conf配置文件的詳解:
1.2.1 輸入模塊配置
rsyslog.conf文件中的輸入模塊用于指定從哪些源獲取日志信息,包括本地日志、遠(yuǎn)程日志、系統(tǒng)日志等。常用的輸入模塊包括:
imuxsock: 用于從Unix域套接字讀取本地日志信息。
imudp: 用于從UDP協(xié)議接收遠(yuǎn)程日志信息。
imtcp: 用于從TCP協(xié)議接收遠(yuǎn)程日志信息。
imiournal: 用于從systemd-iournald服務(wù)讀取系統(tǒng)日志信息。
1.2.2 過濾模塊配置
rsyslog.conf文件中的過濾模塊用于根據(jù)規(guī)則過濾日志信息,只保留符合條件的日志信息。常用的過濾模塊包括:
if: 用于根據(jù)條件過濾日志信息。
regex: 用于根據(jù)正則表達(dá)式過濾日志信息。
property: 用于根據(jù)屬性過濾日志信息。
1.2.3 輸出模塊配置
rsyslog.conf文件中的輸出模塊用于指定將日志信息輸出到哪些目標(biāo),包括文件、數(shù)據(jù)庫、網(wǎng)絡(luò)等。常用的輸出模塊包括:
omfile: 用于將日志信息輸出到文件。
ommysgl: 用于將日志信息輸出到MySQL數(shù)據(jù)庫。
omelasticsearch: 用于將日志信息輸出到Elasticsearch搜索引警。
omfwd: 用于將日志信息轉(zhuǎn)發(fā)到遠(yuǎn)程rsyslog服務(wù)器。
1.2.4 格式化模塊配置
rsyslg.conf文件中的格式化模塊用于指定日志信息的格式,包括時間、主機(jī)名、進(jìn)程名、日志級別等。常用的格式化模塊包括:
template: 用于定義日志信息的格式模板。
property: 用于指定日志信息中的屬性,如時間、主機(jī)名、進(jìn)程名等。
msg: 用于指定日志信息的內(nèi)容。
Part 02●??rsyslog轉(zhuǎn)發(fā)?●
2.1 客戶端配置
對于客戶端,我們需要在rsyslog的配置文件中進(jìn)行一些設(shè)置。首先,我們需要指定要發(fā)送的目標(biāo)主機(jī)和端口號。這可以通過設(shè)置*.* @@<目標(biāo)主機(jī)>:<端口號>來實現(xiàn),如下所示。
*.* @@192.168.75.137:514 # tcp 協(xié)議
*.* @192.168.75.137:514 # udp 協(xié)議
接著,我們可以設(shè)置一些過濾條件,以便只將某些特定類型的日志消息發(fā)送到目標(biāo)系統(tǒng)。這可以通過設(shè)置類似于if $msg contains '<關(guān)鍵詞>' then @@<目標(biāo)主機(jī)>:<端口號>的語句來實現(xiàn)。最后,我們還可以設(shè)置一些其他的參數(shù),如發(fā)送協(xié)議、超時時間等等。
2.2 服務(wù)端配置
對于服務(wù)端,我們需要配置rsyslog服務(wù)器來接收和處理轉(zhuǎn)發(fā)過來的日志消息。首先,我們需要設(shè)置rsyslog服務(wù)器監(jiān)聽的端口號,接著,我們需要在配置文件中指定處理轉(zhuǎn)發(fā)過來的日志消息的方式,如將其志消息保存到本地文件中、存儲到數(shù)據(jù)庫中、發(fā)送到其他系統(tǒng)等等。這可以通過在配置文件中設(shè)置類似于*.* /var/log/file的語句來實現(xiàn)。
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
$AllowedSender tcp, 192.168.34.100/24
$template RemoteLogs,"/var/log/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
*.* ?RemoteLogs
可以通過$AllowedSender控制只允許192.168.34.0網(wǎng)段內(nèi)的主機(jī)以 tcp 協(xié)議來傳輸。
$template Remote定義了模板,保存的路徑和文件名均可自定義,同時也區(qū)分了不同主機(jī)的日志。
$InputTCPServerRun 514開啟tcp,tcp和udp可以共存的。
Part 03●? rsyslog加密?●
除了轉(zhuǎn)發(fā)日志消息,rsyslog還提供了加密傳輸日志消息的功能。當(dāng)我們需要在公共網(wǎng)絡(luò)上傳輸敏感信息時,如個人身份信息、密碼等等,加密傳輸就變得尤為重要。rsyslog提供了基于TLS/SSL協(xié)議的加密傳輸功能,可以保證日志消息在傳輸過程中的機(jī)密性和完整性。如圖4所示,非加密方式與加密方式客戶端服務(wù)端的對比:
圖4 非加密方式與加密方式客戶端服務(wù)端對比
下面我來介紹下如何加密:
步驟1:安裝gnutls-utils
yum install gnutls-utils
步驟2:生成證書和密鑰
certtool --generate-privkey --outfile ca-key.pem --bits 2048
certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca.pem --template ca.cfg
步驟3:生成&分發(fā)各機(jī)器需要的證書
certtool --generate-privkey --outfile key.pem --sec-param 2048
certtool --generate-request --load-privkey key.pem --outfile request.pem
certtool --generate-certificate --load-request request.pem --outfile cert.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem
步驟4:配置rsyslog
$ DefaultNetstreamDriver gtls
#證書文件
$DefaultNetstreamDriverCAFile="/etc/rsyslog.d/gnutls/ca.pem"
$DefaultNetstreamDriverCertFile="/etc/rsyslog.d/gnutls/server-cert.pem"
$DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/gnutls/server-key.pem"
步驟5:重啟rsyslog服務(wù)
service rsyslog restart
Part 04●? 應(yīng)用場景?●
應(yīng)用場景1:對多臺服務(wù)器日志進(jìn)行匯聚,通過Kafka+ELK(Elasticsearch、Logstash和Kibana)的形式對日志進(jìn)行過濾、存儲、分析、提供復(fù)雜的搜索和可視化功能,如圖1所示:
圖5 應(yīng)用場景1
應(yīng)用場景2:對多臺服務(wù)器日志進(jìn)行匯聚存儲后,經(jīng)過LogCheck對日志文件的監(jiān)控和審查,檢查和過濾系統(tǒng)日志文件中的特定事件或錯誤,通過mail或其他形式進(jìn)行反饋;同時經(jīng)過LogAnalyzer對體制進(jìn)行分析和可視化各種日志數(shù)據(jù)。并提供實時搜索、過濾、報表和圖表等功能,展示給用戶。如圖2所示:
圖6 應(yīng)用場景2
Part 05●? 總結(jié)?●
rsyslog是一種功能強(qiáng)大的日志管理工具,具有可靠性、靈活性和可擴(kuò)展性。無論是企業(yè)日志管理、應(yīng)用故障排除還是安全事件監(jiān)控,rsyslog都能提供強(qiáng)大的日志收集、過濾、處理和存儲功能。通過使用 rsyslog,可以更高效地管理日志數(shù)據(jù),提高系統(tǒng)可用性、性能和安全性。
參考文獻(xiàn)
[1]?配置Rsyslog使用TCP/TLS協(xié)議加密傳輸日志,2023年3月3日,https://www.hesc.info/archives/106【訪問日期:2023年9月1日】.
[2] Linux原生日志系統(tǒng)Rsyslog詳解,2022年10月25日,http://e.betheme.net/zz/239280.html?action=onClick【訪問日期:2023年9月1日】.