軟件工程之美38講——日誌管理:如何藉助工具快速發現和定位產品問題 ?

軟件工程之美38講——日誌管理:如何藉助工具快速發現和定位產品問題 ?

什麼是日誌管理

日誌就是操作系統和應用軟件自動生成的事件說明或者消息記錄,包含了時間、日誌信息。舉例來說,下面就是一個典型的 Web 請求日誌:
10.0.1.22 – – [15/Oct/2018:13:46:46 -0700] “GET /favicon.ico HTTP/1.1” 40410.0.1.22 – – [15/Oct/2018:13:46:58 -0700] “GET / HTTP/1.1” 200從上面的日誌中,可以看出來,日誌包含兩次 http 請求,它們發生的時間、請求的 URL、請求的 IP 地址、最後返回的狀態碼等信息。在日誌數量不多的時候,憑藉肉眼或者藉助文本編輯器,還能大概看出日誌的內容,

日誌管理系統架構

  • 日誌採集和解析

  要想對日誌進行統一管理,就必須要從各個應用系統收集日誌。Logstash 就可以幫助實現對日誌的採集。如果日誌文件只是一行行帶時間戳的文本,那其實是無法有效檢索的,必須將其解析成結構化的數據,才能方便地檢索。另外,一套系統可能由不同的應用類型組成,有的是 Java 寫的,有的是 Go 寫的,日誌格式可能完全是不一樣的,所以還有必要在對日誌解析後,提取公共元素,比如時間、IP 地址、主機名、應用名稱等。Logstash 不僅可以對日誌數據進行收集,還能對日誌數據進行過濾和解析,解析完成後再將解析好的數據發送給 ElasticSearch。
存儲和搜索當所有的日誌數據都被集中存儲後,可以想象這個日誌數據庫是相當龐大的,直接查詢效率是比較低下的,這就意味着還需要對日誌數據進行索引和分析,從而讓你可以快速地檢索出來結果。ElasticSearch 就是一套專業的全文檢索和數據存儲系統,同時還有一套類似於 SQL 的查詢語句,這樣你就可以基於它,方便對收集好的日誌數據進行檢索了。但 ElasticSearch 本身類似於數據庫,沒有圖形化界面。

  • 結果可視化

  可視化是日誌管理的另一項重要功能。通過可視化的圖表,可以直觀地看到數據的走勢,以及方便地和歷史數據進行對比。比如說通過觀察交易數據的走勢曲線,就能看出來這周的交易數據比上週是增長還是下降;根據 API 響應速度的走勢,可以看得出新版本部署後,性能是提升了還是下降了。像 Kibana 就是一套專門針對 ElasticSearch 的圖形化操作工具,可以方便對 ElasticSearch 數據進行檢索,也可以對結果用圖表的方式展現。

  • 監控和報警ELK

  本身只是提供了一套基礎的日誌管理框架,但是基於它之上還可以有很多擴展,比如說自動報警就是一個非常典型的場景,可以基於已經存儲和索引好的日誌數據,制定相應的自動報警規則,當線上服務發生異常時,可以自動地觸發報警,通知相關值班人員及時處理。ELK 可以通過插件的方式,安裝像 ElastAlert 或Watcher這樣的自動報警插件,實現自動報警功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章