日誌系統的架構設計方案
日誌對於我們開發人員是非常重要的,當我們的系統會出現異常或者業務出現錯誤的時候,我們都是利用日誌來定位問題,問題定位到之後就可以有針對性的來解決這個問題,下面我們來聊聊日誌系統架構的常見設計方案。
1、單體應用下的日誌系統設計
在互聯網初期的業務系統都是單體架構部署的,所以針對這種架構下的日誌一般都是採用文件的形式存儲日誌,如下所示:
用戶在使用系統的過程中,系統中採用 log4j 或者 logback 方案來記錄日誌數據到日誌文件中,如果項目中出現問題之後,開發人員可以直接從日誌文件中定位系統的問題點。
這種單體方案下的日誌架構設計的優勢是部署簡單、成本低、性能高,但是在當下微服務架構中就不太適用了。
2、微服務架構下的日誌系統設計
隨着業務的發展,很多公司都是採用微服務架構部署應用,如下圖所示的微服務圖:
如果微服務架構下我們依然採用文件的形式來保存日誌的話,一旦系統出現問題就非常的難定位問題,所以在微服務架構下我們需要一個統一的日誌管理系統來幫助我們存儲日誌和提供頁面查詢日誌功能。
在微服務架構下需要設計一套不僅可以收集日誌,而且還提供日誌查詢功能的日誌管理系統,但是這個日誌系統一方面不能影響我們正常的業務執行,另一方面還需要具有可擴展性,用於方便後續的其他系統日誌接入。目前比較主流的日誌架構設計方案有如下幾種:
(1)ELK 日誌架構方案
ELK 方式的是目前比較主流的方案,這種方案的一個比較全面、功能比較齊全的日誌系統實現方案,實現的原理是通過 filebeat 採集日誌信息並推送到 MQ 上,MQ 將日誌信息讓 logstash 消費,logstash 通過日誌的過濾和轉化之後將日誌存儲到 ES 中,開發人員通過 Kibana 查詢 ES 中的日誌數據。之前龍蝦分享給 ELK 的搭建過程,有興趣的朋友可以看一下:
(2)採用 mongodb 實現日誌系統的方案
此方案的原理是各個服務中的日誌採集後通過異步消息的方式存儲到 mongodb 中,由於 mongodb 是一個 nosql 的數據庫,它通過 json 的方式存儲日誌數據並且支持非常豐富的查詢語句,可以幫助我們對日誌的數據來進行過濾查詢,最後開發人員通過 web 頁面就可以實現對日誌的查詢功能。
由於 mongodb 是存儲 json 數據格式,所以它可以存儲非常靈活的日誌數據結構,並且它也支持分片和複製等功能,mongodb 適合大規模的日誌數據存儲、複雜的查詢場景下的日誌系統實現方案。
(3)Loki 日誌系統實現方案
Loki 是 grafana 提供的一個插件,它類似 es 一樣存儲了日誌信息,通過 promtail 收集日誌數據,然後將日誌的數據推送到 Loki 中存儲,最後開發人員通過 grafana 查詢日誌數據。
這種方案比較適用於應用系統有部署 granfan 並且公司只需要一個輕量級的日誌收集系統前提下使用。
總結:
市面上比較成熟的方案有 ELK、mongodb 方案、Loki 方案,每種方案都有各自的特點,在搭建日誌系統的時候我們可以根據實際的業務需要選擇合適的方案。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/zlLPR50dizNRwUqCfPMyBw