微服務業務監控和行為分析怎麼做?試試日誌埋點
- 2019 年 11 月 11 日
- 筆記
一、說明
互聯網公司一般都會有專門的數據團隊對公司的一些業務指標負責;為了拿到這些基本的業務指標,一般也要工程團隊去配合做一些數據採集工作,於是埋點誕生了。
埋點的方式有很多種,本文主要介紹 日誌埋點
這種方式以及實現思路和案例。
日誌埋點
就是通過程序打印log
日誌的方式進行業務/行為數據的記錄
二、總體架構
通過 日誌埋點
來實現業務監控和行為分析主要需要以下4個步驟
- 數據生成(埋點)
- 數據收集
- 數據解析(結構化)
- 數據落盤
- 數據使用(展示/分析)
三、方案說明
3.1. 數據生成
日誌數據的生成直接使用 Logback
等日誌框架就可以了,可以自己封裝公共方法、aop、註解等方式來生成指定的埋點日誌
但是為了便於後面的數據解析,日誌數據需要規範先行
-
所有的埋點日誌必需約定好統一的格式,例如:{時間}|{來源}|{對象id}|{類型}|{對象屬性(以&分割)}
按上面的格式生成的日誌為:
2019-11-07 10:32:01|api-gateway|1|request-statistics|ip=171.221.203.106&browser=CHROME&operatingSystem=WINDOWS_10 -
避免埋點的日誌文件和系統本身輸出的日誌混淆
埋點的日誌輸出的目錄、文件等需要和應用本身的日誌分離,通過
Logback
的配置就能實現
埋點案例
生成日誌
網關埋點用戶請求
3.2. 數據收集
關於日誌數據的收集可選擇的中間件比較多,除了圖中的 FileBeat
之外還有 Flume
、Fluentd
、rsyslog
等;需要每台服務器都部署一個收集中間件。
每台服務器部署一個就行了,就算一台服務器中啟了多個微服務也是可以一齊收集
PS:日誌收集後面的 消息隊列
並不是必需的可以去掉,但是增加 消息隊列
後有以下兩個優點
- 削峰填谷:減輕後面日誌解析的壓力
- 數據共享:日誌數據除了提供給日誌系統之外,可以增加消費端的同時提供給其他地方使用,如流計算等
3.3. 數據解析
使用 Logstash
的grok表達式解析日誌數據並結構化,以上面的日誌數據為例
2019-11-07 10:32:01|api-gateway|1|request-statistics|ip=171.221.203.106&browser=CHROME&operatingSystem=WINDOWS_10
結構化後的日誌數據為:
{ timestamp: '2019-11-07 10:32:01', appName: 'api-gateway', resouceid: '1', type: 'request-statistics', ip: '171.221.203.106', browser: 'CHROME', operatingSystem: 'WINDOWS_10' }
3.4. 數據落盤
通過 Logstash
能自動創建 Elasticsearch
索引並以天為單位分片
可以通過索引模板來指定每個字段的類型和分詞器等屬性
3.5. 數據使用
日誌數據落盤到 Elasticsearch
後,就可以通過聚合查詢等方式實時顯示監控數據或者分析日誌數據
監控案例
四、總結
日誌埋點
只是其中一種埋點手段而已,優點是系統無入侵且靈活;日誌收集、解析、落盤等都可以靈活搭配選擇不同的中間件,並且不需要修改源系統的代碼;並且可以方便對接其他分析平台(例如: 大數據平台)
PS:業務監控是否可以不做日誌埋點,直接查詢業務的數據庫呢?(不建議這樣做)
- 使用日誌埋點能實現監控數據與業務數據分離,監控平台不會影響或增加業務數據庫的壓力
-
使用日誌埋點能方便實現實時業務數據預警
舉個栗子:日誌收集後面添加流計算中間件,計算某個時間窗口內優惠卷日誌的數量或者金額大於某個閥值,則發出預警
推薦閱讀
- 日誌排查問題困難?分佈式日誌鏈路跟蹤來幫你
- zuul集成Sentinel最新的網關流控組件
- Spring Cloud開發人員如何解決服務衝突和實例亂竄?
- Spring Cloud同步場景分佈式事務怎樣做?試試Seata
- Spring Cloud異步場景分佈式事務怎樣做?試試RocketMQ
- Spring Cloud Gateway的動態路由怎樣做?集成Nacos實現很簡單
掃碼關注有驚喜!