1、背景
前陣子有園友留言,提到日誌相關的東西,同時,最近圈子裡也有提到日誌這個東西。一個充分、集中的統一日誌平臺還是很有必要的,否則系統出問題了只能靠猜或者乾瞪眼。何謂充分,日誌記錄滿足最低要求、出問題方便定位、可追溯、可追責,最重要的,方便扯皮;何謂集中,各子系統或服務日誌都懟到一個地方,想看日誌直接去日誌平臺去看,且方便檢索、聚類,而不是需要每個服務、每臺伺服器逐個遠端去翻扯。這裡,就結合專案實踐,聊下怎麼方便、快捷、低成本的實現統一日誌平臺。
2、技術棧
.NET CORE + log4net + EFK
.NET CORE自不必說,系統基於.NET CORE的;log4net用於將日誌輸出到伺服器本地;EFK中E(ES)用於儲存日誌,F(filebeat)用於蒐集本地日誌傳送到遠端ES,K(Kibana)用於日誌檢索。
其中.NET CORE、log4net部分均可自由切換,是系統、能把日誌輸出到伺服器本地即可;EFK則通用。
選擇EFK是因為之前監控、PCI認證已經搭建好了ELK環境,這裡就直接使用不再重複建設其他平臺。
3、log4net配置
紅框圈起來部分,[%d]設定輸出行首日期部分被中括號([])包圍,具體原因我們後文贅述。log4net與.NET CORE的整合很多資料自行查閱。設定完畢,日誌本地輸出類似如下:
4、filebeat配置
伺服器上安裝完成filebeat之後,編輯/etc/filebeat/filebeat.yml配置檔案:
這裡開啟了多行日誌匹配模式,正如上圖的日誌輸出截圖,實際當中一條日誌記錄佔用多行再正常不過,filebeat不做任何設定則會每一行作為作為一條被收割,檢索、分析、儲存都是個問題。正規表示式代表匹配方括號括起來的時間,比如[2020-08-15 12:00:00],從這裡開始只到下一個匹配項之間的部分作為該條日誌記錄被髮送到ES。配置完畢,重啟filebeat服務。
5、kibana中效果