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