問題來源
互聯網項目通常都是大用戶量缔御,大并發(fā),因此從技術架構上大多采用分布式架構構建成大型分布式系統皆刺,SOA或者是微服務少辣,一個請求涉及到多個子系統,如果某個請求的處理不正常芹橡,怎么排查定位問題呢毒坛?如果沒有合適的手段,排查問題無異大海撈針林说,為了提高解決問題的效率煎殷,迫切需要有一個技術手段能跟蹤整個處理環(huán)節(jié),并能夠快速定位腿箩。一種可行的方案就是跟蹤這個調用鏈豪直,把每次請求的完整處理環(huán)節(jié)串聯起來,這樣就可以實現對調用路徑的全程監(jiān)控珠移。
技術實現要點
采用日志埋點技術弓乙,在請求的處理入口處為該次請求分配一個TraceId(跟蹤Id),將此TraceId依次傳遞給下一個處理環(huán)節(jié)钧惧,在每一個處理環(huán)節(jié)記錄日志暇韧,這樣通過這個TraceId就可以查詢到從起始到處理完畢整個處理路徑中的日志信息。
埋點日志記錄的內容
TraceId浓瞪、RPCId懈玻、調用的開始時間,調用類型乾颁,協議類型涂乌,調用方ip和端口,請求的服務名等信息英岭;
調用耗時湾盒,調用結果,異常信息诅妹,消息報文等罚勾;
預留可擴展字段,為將來的擴展做預留吭狡;
記錄內容可以根據業(yè)務的需要詳細設計尖殃,原則就是要方便將來排查定位問題。
收集查詢的實現
把埋點日志數據收集起來赵刑,再搭建一個查詢系統就可以方便定位問題了,簡單的查詢分析系統可以采用ELK(Elasticsearch + Logstash + Kibana)來搭建场刑。
參考文獻般此,谷歌的Dapper論文:https://bigbully.github.io/Dapper-translation