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中效果