日志系統(tǒng)的架構(gòu)設(shè)計(jì)方案
日志對(duì)于我們開發(fā)人員是非常重要的,當(dāng)我們的系統(tǒng)會(huì)出現(xiàn)異?;蛘邩I(yè)務(wù)出現(xiàn)錯(cuò)誤的時(shí)候,我們都是利用日志來定位問題,問題定位到之后就可以有針對(duì)性的來解決這個(gè)問題,下面我們來聊聊日志系統(tǒng)架構(gòu)的常見設(shè)計(jì)方案。
1、單體應(yīng)用下的日志系統(tǒng)設(shè)計(jì)
在互聯(lián)網(wǎng)初期的業(yè)務(wù)系統(tǒng)都是單體架構(gòu)部署的,所以針對(duì)這種架構(gòu)下的日志一般都是采用文件的形式存儲(chǔ)日志,如下所示:

用戶在使用系統(tǒng)的過程中,系統(tǒng)中采用log4j或者logback方案來記錄日志數(shù)據(jù)到日志文件中,如果項(xiàng)目中出現(xiàn)問題之后,開發(fā)人員可以直接從日志文件中定位系統(tǒng)的問題點(diǎn)。
這種單體方案下的日志架構(gòu)設(shè)計(jì)的優(yōu)勢(shì)是部署簡(jiǎn)單、成本低、性能高,但是在當(dāng)下微服務(wù)架構(gòu)中就不太適用了。
2、微服務(wù)架構(gòu)下的日志系統(tǒng)設(shè)計(jì)
隨著業(yè)務(wù)的發(fā)展,很多公司都是采用微服務(wù)架構(gòu)部署應(yīng)用,如下圖所示的微服務(wù)圖:

如果微服務(wù)架構(gòu)下我們依然采用文件的形式來保存日志的話,一旦系統(tǒng)出現(xiàn)問題就非常的難定位問題,所以在微服務(wù)架構(gòu)下我們需要一個(gè)統(tǒng)一的日志管理系統(tǒng)來幫助我們存儲(chǔ)日志和提供頁面查詢?nèi)罩竟δ堋?span>

在微服務(wù)架構(gòu)下需要設(shè)計(jì)一套不僅可以收集日志,而且還提供日志查詢功能的日志管理系統(tǒng),但是這個(gè)日志系統(tǒng)一方面不能影響我們正常的業(yè)務(wù)執(zhí)行,另一方面還需要具有可擴(kuò)展性,用于方便后續(xù)的其他系統(tǒng)日志接入。目前比較主流的日志架構(gòu)設(shè)計(jì)方案有如下幾種:
(1)ELK日志架構(gòu)方案
圖片
ELK方式的是目前比較主流的方案,這種方案的一個(gè)比較全面、功能比較齊全的日志系統(tǒng)實(shí)現(xiàn)方案,實(shí)現(xiàn)的原理是通過filebeat采集日志信息并推送到MQ上,MQ將日志信息讓logstash消費(fèi),logstash通過日志的過濾和轉(zhuǎn)化之后將日志存儲(chǔ)到ES中,開發(fā)人員通過Kibana查詢ES中的日志數(shù)據(jù)。
(2)采用mongodb實(shí)現(xiàn)日志系統(tǒng)的方案
圖片
此方案的原理是各個(gè)服務(wù)中的日志采集后通過異步消息的方式存儲(chǔ)到mongodb中,由于mongodb是一個(gè)nosql的數(shù)據(jù)庫,它通過json的方式存儲(chǔ)日志數(shù)據(jù)并且支持非常豐富的查詢語句,可以幫助我們對(duì)日志的數(shù)據(jù)來進(jìn)行過濾查詢,最后開發(fā)人員通過web頁面就可以實(shí)現(xiàn)對(duì)日志的查詢功能。
由于mongodb是存儲(chǔ)json數(shù)據(jù)格式,所以它可以存儲(chǔ)非常靈活的日志數(shù)據(jù)結(jié)構(gòu),并且它也支持分片和復(fù)制等功能,mongodb適合大規(guī)模的日志數(shù)據(jù)存儲(chǔ)、復(fù)雜的查詢場(chǎng)景下的日志系統(tǒng)實(shí)現(xiàn)方案。
(3)Loki日志系統(tǒng)實(shí)現(xiàn)方案

Loki是grafana提供的一個(gè)插件,它類似es一樣存儲(chǔ)了日志信息,通過promtail收集日志數(shù)據(jù),然后將日志的數(shù)據(jù)推送到Loki中存儲(chǔ),最后開發(fā)人員通過grafana查詢?nèi)罩緮?shù)據(jù)。
這種方案比較適用于應(yīng)用系統(tǒng)有部署granfan并且公司只需要一個(gè)輕量級(jí)的日志收集系統(tǒng)前提下使用。
總結(jié):
市面上比較成熟的方案有ELK、mongodb方案、Loki方案,每種方案都有各自的特點(diǎn),在搭建日志系統(tǒng)的時(shí)候我們可以根據(jù)實(shí)際的業(yè)務(wù)需要選擇合適的方案。


























