后端埋點方案:
本文簡單對后端埋點方案做了分析,但是還有很多未涉及的方面。主要用於學習交流和分享個人的經驗
基本路線:filebeat + logstash 日志埋點分析
后端埋點的基本框架是通過filebeat+ logstash讀取日志文件進行日志分析處理,這種方案是代碼侵入比較低的一種方案。
使用的原因:
-
這兩者都是開源免費使用的框架
-
這種日志采集方案發展到現在已經十分成熟,有大量的文檔和社區實踐分享。覆蓋的數據處理技能很豐富,處理效果也十分不錯。
-
並且在這些年已經有許多的使用案例,像是神策數據的文檔中也有使用到該種方案進行數據的對接工作。
1. 采集流程
1.1 filebeat
filebeat是一款開源的輕量級日志采集工具,主要用於整合各個路徑下的各種不同的日志文件,並且統一輸出到指定的輸出點。
對於filebeat的配置較為簡單,而filebeat提供的功能也十分有限,只能進行簡單的日志采集工作,所以需要和logstash配和使用
1.2 logstash
logstash相對filebeat更強大,但是占用的系統資源也較多
首先配置指定的日志文件的路徑供filebeat讀取。
配置好 logstash 的過濾規則,input 及 output 方式,將 filebeat 和 logstash 對接到一起。
最后啟動 filebeat 和 logstash ,開始進行日志文件的數據讀取和寫入。
3. 綜合分析
后端埋點的優點在於,可以在采集需求發生變化時,修改服務端代碼就可發立刻發布生效。能夠有效地應對各種需求變化。相對地,前端埋點可能會遇到上線流程慢,用戶不更新最新版本所導致的數據不准確。
但是后端埋點的缺點在於,只能收集前端請求后端的業務行為,而無法對前端存在業務意義的一些交互行為進行信息的采集。
對於產生日志的這一過程,又有幾種不同的思路可以討論:
2. 日志文件來源
2.1 nginx 日志埋點
目前基本上所有后端服務器接受的請求都要經過nginx轉發,通過nginx的access.log日志,可以獲取大部分最基本的請求信息。
同時可以通過配置nginx.conf
中的log_format
來自定義日志輸出的內容和格式:
101.133.129.17 [07/Jun/2020:23:29:04 +0800] [ ] "GET /favicon.ico HTTP/1.1" 0.000 67646 200 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" - - -
27.38.4.24 [06/Jun/2020:18:49:22 +0800] [ ] "POST /api/auth/login HTTP/1.1" 0.028 69 401 "http://47.114.87.23:7000/" " Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:76.0) Gecko/20100101 Firefox/76.0" 192.168.0.33:8020 0.028 401
優點:
- 后端不需要修改代碼
- 只需要對一個日志文件進行分析,不會漏掉或忽略部分內容
缺點:
- 信息較單一,只能記錄一些http信息,如果想要獲取更多的信息,需要前端在請求頭中提供。如果需要分析前端目前沒有提供的的信息,可能涉及到前端的修改
- 可能會出現干擾性的數據,比如一些靜態資源的獲取,或者當nginx同時進行2個服務的轉發。需要進行數據的過濾
- 對於前端沒有傳入的信息,可能出現缺失部分
改進方案:
對於token , 請求body,請求參數這些信息,可以通過lua腳本,或者在logstash處理,或者抽取到數據庫中2次加工,來解析其中的內容,提取更多有效的信息。
2.2 logback 日志埋點
通過使用logback,log4j,slf4j 等日志框架在后端對應的業務請求接口進行日志信息的輸出。需要對后端服務的java代碼進行修改,但是修改量相對不大。
日志埋點的規范有一些文章可以參考:
- 阿里雲官方日志埋點的規范:https://help.aliyun.com/document_detail/54477.html
優點:
- 可以自定義日志輸出的內容和格式,比如一些業務信息和數據,比nginx日志的信息更全面
缺點:
- 要修改后端代碼
改進方案:
可以進行一些簡單的封裝,抽象出一些常用的類和方法,提高代碼的復用性,和后續的可擴展性。可能延長開發周期。
2.3 神策SDK埋點
使用神策的開源sdk進行后端的埋點,其基本思路和過程和日志埋點十分類似。要在項目中引入神策的javasdk,並對后端的代碼進行修改,在其中使用sdk中提供的方法。
優點:
- 無需封裝一套框架,可以直接使用
缺點:
- 需要修改后端代碼
- 后續框架擴展性不高
- 商業問題?