返回專案列表

API Latency 儀表板

以 Trace ID 串起 API、外部呼叫與 DB 耗時,用 OpenSearch Dashboards 找出慢 API 與重複呼叫

透過 Filebeat 收集帶有同一個 Trace ID 的 Log,送進 OpenSearch,並以 OpenSearch Dashboards 的趨勢圖呈現各 API、外部 API 與 DB 的耗時與呼叫次數。團隊可以直接看到哪些 API 偏慢、哪些 API 呼叫最頻繁,以及哪些請求重複呼叫同一支外部 API 或出現 N+1 DB query,不必再逐筆翻 Log 排查。

角色
需求分析、架構設計、開發、測試
使用技術
JavaSpring BootSLF4J MDCFilebeatOpenSearchOpenSearch Dashboards
01.

要解決的問題

系統變慢或出現異常時,只能憑印象猜是哪支 API,再逐筆翻 Log 確認,排查很花時間。

具體來說有三件事看不到:哪些 API 回應偏慢、哪些 API 呼叫次數最多,以及哪些 API 在一次請求裡重複呼叫同一支外部 API,或出現 N+1 DB query。

這個儀表板把每次請求經過的各個節點(API、外部呼叫、DB)的耗時都記錄下來,並以同一個 Trace ID 串起來,讓問題從「猜」變成「看得到」。

02.

運作流程

  1. 01

    請求進入

    每個請求在入口產生 Trace ID,放進 MDC,讓同一個請求的所有 Log 都帶有它。

  2. 02

    記錄各節點耗時

    API 本身、外部 API 呼叫、DB 呼叫各自記錄耗時與目標,輸出成結構化 Log。

  3. 03

    Filebeat 收集

    Filebeat 讀取 Log 檔案,送進 OpenSearch。

  4. 04

    建立索引與欄位

    Trace ID、類型、API 名稱、呼叫目標與耗時都成為可查詢、可聚合的欄位。

  5. 05

    儀表板呈現

    OpenSearch Dashboards 以趨勢圖與統計圖呈現耗時、呼叫次數與重複呼叫。

  6. 06

    往下追蹤

    從異常的 API 用 Trace ID 查出該次請求的每一個外部呼叫與 SQL。

03.

三個要回答的問題

每個問題對應一組圖表,用趨勢圖觀察變化,也方便比對上線前後。

  • 哪些 API 回應偏慢

    依 API 統計耗時(建議看 p95 而不是平均值),以趨勢圖呈現。耗時突然上升,可以對照上線時間找原因。

  • 哪些 API 呼叫最多

    依時間範圍統計各 API 的呼叫次數,找出流量最大的 API,作為優化優先順序的參考。

  • 哪些 API 重複呼叫外部 API 或有 N+1

    以 Trace ID 為單位,統計同一個外部 API 或同一種 SQL 在一次請求內出現的次數,次數異常多的就是需要檢查的對象。

04.

Log 範例

同一個 Trace ID 下,一次請求會留下 API、外部呼叫與多筆 DB 呼叫的紀錄。下面的例子中,同一種 SQL 重複出現,就是典型的 N+1。

{"traceId":"a1b2c3d4","type":"API","api":"GET /orders/{id}","durationMs":1280}
{"traceId":"a1b2c3d4","type":"EXTERNAL","target":"POST payment-service/query","durationMs":310}
{"traceId":"a1b2c3d4","type":"EXTERNAL","target":"POST payment-service/query","durationMs":295}
{"traceId":"a1b2c3d4","type":"EXTERNAL","target":"POST payment-service/query","durationMs":302}
{"traceId":"a1b2c3d4","type":"DB","sqlId":"selectOrderItemByOrderId","durationMs":12}
{"traceId":"a1b2c3d4","type":"DB","sqlId":"selectOrderItemByOrderId","durationMs":11}
{"traceId":"a1b2c3d4","type":"DB","sqlId":"selectOrderItemByOrderId","durationMs":13}

示意用的 Log 格式,API 名稱、SQL 名稱與數值皆為假資料。

05.

成果

  • >慢 API 與高流量 API 可以直接在儀表板看到排名與趨勢,不再靠印象判斷。
  • >重複呼叫外部 API 與 N+1 DB query 可以被統計出來,不必逐筆翻 Log。
  • >以 Trace ID 從單一請求往下追到每個外部呼叫與 SQL,加速異常排查。