背景
對(duì)業(yè)務(wù)Api接口日志記錄屬于空白階段拍埠,當(dāng)偶現(xiàn)問(wèn)題發(fā)生時(shí)給開(kāi)發(fā)帶來(lái)較多的時(shí)間成本去解決;
為了后續(xù)在解決毁兆、定位問(wèn)題時(shí)更加迅速想许,我們萌生構(gòu)建基于App Api的業(yè)務(wù)接口日志系統(tǒng)的想法;
一沃呢、平臺(tái)構(gòu)思
二年栓、目標(biāo)
1、解決因后端服務(wù)Api不穩(wěn)定在App上表現(xiàn)的偶現(xiàn)Bug排查難的問(wèn)題薄霜,我們可提供必要日志某抓;
2、通過(guò)對(duì)上報(bào)日志分析惰瓜,實(shí)時(shí)可統(tǒng)計(jì)出接口響應(yīng)時(shí)間否副、流量吞吐情況、錯(cuò)誤日志崎坊、各端訪問(wèn)情況等信息备禀;
3、支持對(duì)異常信息實(shí)時(shí)告警至開(kāi)發(fā)群奈揍,減少提排錯(cuò)響應(yīng)時(shí)間曲尸;
4、通過(guò)對(duì)日志信息比對(duì)男翰,快速還原當(dāng)時(shí)場(chǎng)景另患;
5、希望成為一個(gè)App基礎(chǔ)服務(wù)奏篙,為后續(xù)業(yè)務(wù)的增加附能柴淘;
6迫淹、支持在App上本地快速查詢;
三为严、使用技術(shù)
3.1 后端服務(wù)
Elastic + Logstash + Kibana + SpringBoot
3.2 前端服務(wù)
Android + iOS +? ReactNative?
3.3 數(shù)據(jù)流轉(zhuǎn)過(guò)程
1敛熬、由App端對(duì)Http日志截獲到的信息請(qǐng)求匯總;
2第股、上傳至api-log-server (springboot)
3应民、api-log-server 對(duì)數(shù)據(jù)分析預(yù)處理
4、api-log-server 將數(shù)據(jù)同步至logstash;
5夕吻、logstash 將數(shù)據(jù)存儲(chǔ)于elastic 形成索引入庫(kù)诲锹;
6、登陸 kibana 查詢所需數(shù)據(jù)涉馅;
四归园、搭建步驟
基于docker compose搭建
代碼地址:
git clone
cd VvLog-Elk
docker-compose up
....漫長(zhǎng)的等待
ctrl+C
docker-compose restart
至此后端服務(wù)大致部署完畢,
登陸至kibana后臺(tái)? ?:http://[部署的主機(jī)ip]:5601/
用戶名: elastic
密碼: changeme? ?
spring boot 日志收集服務(wù)
地址
修改其對(duì)應(yīng)的logstash 所在主機(jī)的ip?
要求上報(bào)日志數(shù)據(jù)結(jié)構(gòu)
/**
* 日志文件
*/
public class LogBean {
? ? /**
? ? * 用戶信息
? ? */
? ? public String userFrom = "";
? ? /**
? ? * 設(shè)備信息
? ? */
? ? public String deviceName = "";
? ? /**
? ? * 項(xiàng)目名稱
? ? */
? ? public String projectName = "";
? ? /**
? ? * 請(qǐng)求方式
? ? */
? ? public String requestMethod = "";
? ? /**
? ? * 發(fā)起請(qǐng)求時(shí)間
? ? */
? ? public String requestTime = "";
? ? /**
? ? * 響應(yīng)時(shí)間
? ? */
? ? public String responseTime = "";
? ? /**
? ? * 響應(yīng)時(shí)長(zhǎng)
? ? */
? ? public int duration = 0;
? ? /**
? ? * 發(fā)起請(qǐng)求參數(shù)
? ? */
? ? public JSONObject params;
? ? /**
? ? * 對(duì)應(yīng)接口地址 host+path
? ? */
? ? public String apiPath = "";
? ? /**
? ? * 服務(wù)端響應(yīng)數(shù)據(jù)回執(zhí)
? ? */
? ? public JSONObject response;
? ? /**
? ? * 響應(yīng)消息回執(zhí)
? ? */
? ? public int responseCode = 200;
? ? /**
? ? * 應(yīng)用業(yè)務(wù)頁(yè)面來(lái)源: android/ios/rn/web
? ? */
? ? public String platform = "";
? ? /**
? ? * 版本號(hào) EX: 1.8.1
? ? */
? ? public String versionName = "";
? ? /**
? ? * 用于存儲(chǔ)userAgent(訪問(wèn)設(shè)備的一些額外信息)
? ? */
? ? public String agent = "";
}