問題來源 互聯網項目通常都是大用戶量,大併發,因此從技術架構上大多採用分散式架構構建成大型分散式系統,SOA或者是微服務,一個請求涉及到多個子系統,如果某個請求的處理不正常,怎麼排查定位問題呢?如果沒有合適的手段,排查問題無異大海撈針,為了提高解決問題的效率,迫切需要有一個技術手段能跟蹤整個處理環節 ...
問題來源
互聯網項目通常都是大用戶量,大併發,因此從技術架構上大多採用分散式架構構建成大型分散式系統,SOA或者是微服務,一個請求涉及到多個子系統,如果某個請求的處理不正常,怎麼排查定位問題呢?如果沒有合適的手段,排查問題無異大海撈針,為了提高解決問題的效率,迫切需要有一個技術手段能跟蹤整個處理環節,並能夠快速定位。一種可行的方案就是跟蹤這個調用鏈,把每次請求的完整處理環節串聯起來,這樣就可以實現對調用路徑的全程監控。
技術實現要點
採用日誌埋點技術,在請求的處理入口處為該次請求分配一個TraceId(跟蹤Id),將此TraceId依次傳遞給下一個處理環節,在每一個處理環節記錄日誌,通過這個TraceId就可以查詢到從起始到處理完畢整個處理路徑中的日誌信息。
埋點日誌記錄的內容
TraceId、RPCId、調用的開始時間,調用類型,協議類型,調用方ip和埠,請求的服務名等信息;
調用耗時,調用結果,異常信息,消息報文等;
預留可擴展欄位,為將來的擴展做預留;
記錄內容可以根據業務的需要詳細設計,原則就是要方便將來排查定位問題。
收集查詢的實現
把埋點日誌數據收集起來,再搭建一個查詢系統就可以方便定位問題了,簡單的查詢分析系統可以採用ELK(Elasticsearch + Logstash + Kibana)來搭建。
參考文獻,谷歌的Dapper論文:https://bigbully.github.io/Dapper-translation