查詢剖析器日誌

更新時間:
Copy as MD

本文通過查詢、關聯分析、統計分析等情境介紹如何使用Log Service對程式日誌進行查詢和分析。

背景資訊

程式日誌內容全、存在一定共性,它是營運程式的重要訊息,但程式日誌具有如下不便於儲存與分析的特性:

  • 格式隨意:不同開發人員的代碼風格不同,對應的日誌風格也不同,難以統一。

  • 資料量大:程式日誌一般比訪問日誌大1個數量級。

  • 分布的伺服器多:大部分應用為無狀態模式,運行在不同架構中,例如雲端服務器、Container Service等,對應的執行個體數從幾個到數千個,需要有一種跨伺服器的日誌採集方案。

  • 運行環境複雜:程式運行在不同的環境中,產生的日誌也儲存在不同的環境中,例如應用相關的日誌在容器中、API相關日誌在FunctionCompute中、舊系統日誌在本地IDC中、移動端相關日誌在使用者處、網頁端日誌在瀏覽器中等。

為了能夠獲得全量日誌,必須把所有日誌統一儲存。針對該情境,Log Service提供多樣化的日誌採集方式及一站式分析功能,您可通過查詢+SQL92文法對日誌進行即時分析,並以圖表形式直觀展示分析結果。和開源方案對比,Log Service提供的解決方案在查詢分析成本上僅是開源方案的25%。

查詢程式日誌

例如某App出現訂單錯誤或請求延時等問題,您可以通過查詢語句在TB級資料量的日誌中快速(1s內)定位問題。還可以根據業務需求,設定時間範圍、查詢關鍵字等資訊,更精準地返回查詢結果。

  • 查詢延時大於1s,並且要求方法是以Post開頭的請求資料。

    Latency > 1000000 and Method=Post*
  • 尋找包含error關鍵詞但不包含merge關鍵詞的日誌。

    error not merge

關聯剖析器日誌

關聯分析包括進程內關聯與跨進程關聯,區別如下:

  • 進程內關聯:一般比較簡單,因為同一個進程前後日誌都在一個檔案中。在多線程環境中,只需根據線程ID進行過濾即可。

  • 跨進程關聯:跨進程的請求一般沒有明確線索,一般通過RPC中傳入的TracerId來進行關聯。

  • 進程內關聯

    通過上下文查詢查看關聯日誌。例如通過關鍵詞查詢定位到一個異常日誌,然後單擊上下文瀏覽,查看該日誌前後N條日誌,操作步驟請參見上下文查詢。在Log Service原始日誌頁簽中,選擇原始顯示模式,單擊目標日誌條目左側的上下文瀏覽表徵圖(放大鏡表徵圖),即可查看該條日誌的上下文資訊,實現進程內關聯分析。

    上下文查詢結果:在上下文瀏覽頁面中,當前日誌(位置 0)以高亮顯示,上下文範圍為前後各 3 條日誌(-3 到 +3)。頁面還提供高亮顯示過濾條件輸入框,便於快速定位關鍵資訊。

  • 跨進程關聯

    跨進程關聯也叫Tracing,比較常見的工具有鷹眼、Dapper、StackDriver Trace、Zipkin、Appdash、X-ray等。

    此處基於Log Service,實現基本的Tracing功能。您可以在各模組日誌中輸出Request_id、OrderId等可以關聯的識別欄位,通過在不同的日誌庫中尋找,擷取所有相關日誌。在Log Service(SLS)查詢介面的搜尋欄中輸入 request_id595F9A92D30E8E444FC971F4 進行查詢,時間範圍設為 15分鐘(相對),共找到 15 條關聯日誌,查詢狀態為結果精確。展開第一條日誌詳情,可見該請求對應的 Nginx 訪問日誌狀態代碼為 status:404,日誌時間為 22/Oct/2020:11:08:52,來源 IP 為 172.16.64.165,記錄檔路徑為 /root/testnginx/acce...1.log。通過 request_id 可實現跨進程的日誌關聯分析,快速定位問題請求的完整鏈路。

    例如通過SDK查詢前端機、後端機、支付系統、訂單系統等日誌。獲得結果後,製作一個前端頁面將跨進程分析關聯起來。在Tracing系統中,選擇具體的Trace ID後,可查看完整的調用鏈樹形結構,包括各方法的調用層級與耗時。例如,ServerBase::HandleRequest下的KVEngine::QueryInterval耗時61935us,佔總耗時的98.99%,為主要效能瓶頸;YouchaoFile::CreateBlock耗時19603us,佔31.32%。通過調用鏈分析,可快速定位跨進程請求中的效能瓶頸方法。

統計剖析器日誌

查詢到日誌後,您還可以做進一步統計分析。

執行如下查詢分析語句,統計所有錯誤發生的類型和位置的分布。

__level__:error | select __file__, __line__, count(*) as c group by __file__, __line__ order by c desc

錯誤類型和位置

相關操作

  • 備份日誌

    將記錄備份至OSS、MaxCompute等產品中。

  • 關鍵詞警示

    通過CloudMonitor警示

  • 日誌查詢許可權分配管理

    可以通過RAM使用者授權方法隔離開發、PE等許可權。