介紹MinBox Logging內的概念及做用

I. 概念

minbox-logging日誌組件內設計了多個概念以及名詞定義,咱們本篇文章來說解下每一個概念的含義以及做用java

0. 源碼 & 文檔

1. Client

client在總體架構體系中是客戶端的概念,也就是咱們的業務服務角色,在用戶發起一個請求時,可能會通過多個業務服務來完成一系列的業務操做或者查詢結果的組裝,而每一個服務在minbox-logging內就是client的概念,client要完成的工做是日誌的採集上報緩存等。git

1.1 日誌採集

client目前版本支持採集spring-mvcweb應用程序請求日誌信息(目前版本暫未支持web-flux),經過攔截器獲取每次請求的鏈路編號(traceId)單元編號(spanId)請求參數請求主體Header列表請求路徑請求耗時等詳細信息,根據採集到的日誌參數能夠精準的定位到請求信息。web

1.2 日誌上報

client目前支持兩種上報方式,分別是:just(直接上報)timing(定時延遲上報),當採集到日誌信息後經過攔截LoggingWebInterceptor#afterCompletion方法來進行異步上報信息,在這裏採用異步上傳的方式,爲了防止出現日誌上報網絡延遲致使用戶發起的請求響應時間過長spring

1.3 日誌緩存

client端提供了短暫的內存方式緩存,當咱們使用timing方式進行上報日誌時,日誌臨時會存儲到memory(內存)中,每次定時上報會從內存緩存中取到配置數量的請求日誌一併上報到admin,一次上報的數量也有使用者自定義配置,默認爲10數據庫

client正常中止時,經過實現DisposableBean接口的destory方法內會一併將內存緩存的請求日誌一併上報到adminapi

2. Admin

admin在總體架構體系中擔任管理端的角色,用於接收client上報的請求日誌、存儲日誌日誌分析等操做。spring-mvc

minbox-logging體系中 admin並非必須存在的,若是是單體應用程序,可單獨使用 client在本地進行採集、存儲、分析等。

2.1 日誌接收

admin內部提供了一個上報日誌的端點,該端點是一個標準的REST接口定義,可一次性接收一個client上傳的多條請求日誌。緩存

執行順序:服務器

  1. 檢查client是否爲第一次上報日誌,若是是則執行保存服務器基本信息
  2. 執行保存該client對應服務器的請求日誌信息到數據庫

2.2 日誌存儲

admin內部提供了數據庫方式的存儲實現類LoggingDataSourceStorage,經過建立LoggingDataSourceStorage的對象而且設置到LoggingAdminFactoryBean內便可完成配置,在建立LoggingDataSourceStorage對象時須要傳遞數據源,內部是經過JDBC直接操做SQL來完成的數據操做,這樣不依賴任何第三方ORM框架, 只須要DataSource對象便可。網絡

2.3 自定義存儲

目前版本admin僅提供了一個數據源方式存儲,若是咱們須要自定義存儲能夠經過實現LoggingStorage接口,而後建立自定義的對象實例後設置到LoggingAdminFactoryBean內便可。

2.4 日誌分析(規劃中)

admin端,咱們拿到數據後能夠針對某一些點進行分析,好比:請求耗時較多的接口、接口的調用頻率,針對調用頻率能夠有效的擴展對應服務的節點數量來應對流量。

3. Cache

cache用於臨時緩存請求日誌,盡在timing上報方式下生效。

4. ReportScheduled

定時上報日誌,應用於timing上報方式,內部是一個定時線程,間隔一段時間調用上報日誌方法。

每次默認會上報10條請求日誌,每間隔5秒執行一次。

5. AdminDiscovery

AdminDiscoveryclient用於發現admin服務的接口定義,在client內提供了兩種方式,分別是:LoggingAppointAdminDiscoveryLoggingRegistryCenterAdminDiscovery

經過LoggingFactoryBean#setLoggingAdminDiscovery方法進行設置。

5.1 LoggingAppointAdminDiscovery

指定admin具體地址信息的發現方式,經過構造函數能夠指定多個admin地址,並且每一個admin地址可使用不一樣的basic基礎認證信息。

當指定多個admin時,默認經過平滑輪詢策略負載均衡方式上報,可自定義指定隨機策略負載均衡方式。

admin地址的格式爲: user:123456@localhost:9090@前面爲 basic認證信息。

5.2 LoggingRegistryCenterAdminDiscovery

admin支持從服務註冊中心(Eureka、Consul、Nacos Discovery、Zookeeper等)內讀取指定applicationId的服務節點列表,經過ribbon默認的負載均衡策略進行獲取可用admin節點信息。

若是是 SpringCloud構建的項目,建議使用這種方式。

6. LoggingNotice

client的日誌通知方法,默認該接口有兩個實現類,分別是:LoggingLocalNoticeLoggingAdminNotice,當一個請求完成時,client會發佈一個LoggingNoticeEvent事件,該事件的監聽者會獲取LoggingNotice的所有實現類,根據getOrder方法的值順序執行,值越大越靠前。

6.1 LoggingLocalNotice

client的本地控制檯輸出日誌、控制檯格式化日誌的LoggingNotice實現類,會第一個被執行

6.2 LoggingAdminNotice

client的上報日誌到admin入口,會根據上報方式進行執行對應的業務邏輯。

  • timing(延遲上報)

    會將本次的MinBoxLog對象緩存到cache,放入內存。

  • just(直接上報)

    經過LoggingFactoryBean獲取LoggingAdminReport實現類,調用report方法進行上報日誌信息到admin

7. ReportLogEvent

client將日誌上報到admin後,admin會經過ApplicationContext發佈ReportLogEvent事件,在admin內提供了兩個該事件的監聽實現,分別是:ReportLogJsonFormatListenerReportLogStorageListener

7.1 ReportLogJsonFormatListener

用於格式化並在控制檯顯示client上報的日誌信息。

7.2 ReportLogStorageListener

獲取LoggingAdminFactoryBean提供的LoggingStorage接口實現類實例來進行持久化請求日誌。

7.3 自定義監聽

經過實現Spring提供的SmartApplicationListener監聽器接口來自定義日誌的存儲或者其餘分析操做,具體實現詳見文檔。

相關文章
相關標籤/搜索