Core + Vue 後台管理基礎框架9——統一日誌
- 2020 年 8 月 15 日
- 筆記
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中效果