Span Metrics#
上一章提到 Traces 可以衍生出 Metrics。這一章深入探討這個「鍊金術」:如何從 Trace 的 Span 資料中,自動產生出有用的服務層級指標,而不需要額外的 Metrics Instrumentation。
Metrics from Traces#
Span Metrics 的核心概念很直覺:每一個 Span 記錄了「誰在什麼時候做了什麼操作、花了多久、結果是成功還是失敗」。當你擁有大量的 Span 資料,把它們按照服務和操作名稱聚合起來,就能得到:
- Request Rate:每個服務/操作每秒處理多少請求
- Error Rate:其中有多少比例是失敗的
- Duration Distribution:延遲的 P50、P90、P99 分佈
這就是經典的 RED Metrics(Rate、Error、Duration),也是評估微服務健康狀態最核心的三個指標。
為什麼這很有價值#
傳統做法是:你需要在應用程式中分別做 Tracing 和 Metrics 的 Instrumentation。Tracing SDK 產出 Span,Metrics SDK 產出 Counter 和 Histogram。兩套程式碼做的事情高度重疊——都在記錄請求的發生、成功/失敗、耗時。
Span Metrics 的價值在於:一份 Instrumentation,兩份產出。你只需要做好 Tracing,Metrics 就能自動衍生。這帶來幾個好處:
- 減少 Instrumentation 維護成本:不用同時維護 Tracing 和 Metrics 兩套程式碼
- 保證一致性:因為 Metrics 直接從 Trace 衍生,兩者的數字天然對齊
- 降低上手門檻:團隊只需要學會一種 Instrumentation
Span Metrics 不是要取代所有的 Metrics Instrumentation。它擅長產出「服務健康狀態」的 RED Metrics,但業務指標(如訂單金額、庫存數量)和系統指標(如 CPU、記憶體)仍然需要獨立的 Metrics 來源。
OTel Collector 的角色#
Span Metrics 的轉換通常發生在 OpenTelemetry Collector 中,而不是在應用程式端。Collector 提供了 Span Metrics Connector(早期稱為 Span Metrics Processor),它攔截通過 Collector 的 Span 資料,即時計算聚合指標,然後將這些 Metrics 匯出到 Prometheus 或其他 Metrics 後端。
這個設計的好處是:
- 應用程式完全無感:不需要修改任何應用程式程式碼,只需要調整 Collector 的設定
- 集中管理:所有的聚合邏輯在 Collector 統一處理,方便調整維度和粒度
- 靈活配置:可以選擇要對哪些 Attribute 做聚合、要不要包含自定義的 Span Attribute 作為 Metrics Label
選擇要聚合的維度時要謹慎。如果把高基數(High Cardinality)的 Attribute(如 User ID 或 Request URL)也加進去,會導致 Metrics 的 Cardinality 爆炸,造成 Prometheus 的效能和儲存問題。
Jaeger Service Performance Monitoring#
Jaeger SPM(Service Performance Monitoring)是 Span Metrics 的一個實際應用場景。Jaeger 利用 Span Metrics 衍生出的 RED Metrics,提供服務效能的概覽儀表板。
傳統的 Jaeger 介面專注於「查看單一 Trace」——你搜尋一個特定的 Trace,然後分析它的 Span。這很適合深入調查,但不適合回答「過去一小時 order-service 的整體表現如何」。
SPM 補上了這個缺口:
- 服務總覽:所有服務的 Request Rate、Error Rate、P95 延遲一目了然
- 操作排名:哪些操作最慢、哪些操作錯誤率最高
- 趨勢分析:效能指標隨時間的變化趨勢
如果你的團隊已經部署了 Jaeger 做 Distributed Tracing,SPM 是一個低成本獲得服務效能概覽的方式。只需要在 OTel Collector 中啟用 Span Metrics Connector,就能為 Jaeger 提供所需的 Metrics 資料。
適用場景與注意事項#
Span Metrics 最適合的團隊畫像:
- 已經做了 Tracing Instrumentation,但還沒有(或不想維護)獨立的 Metrics Instrumentation
- 想要快速獲得服務層級的 RED Metrics,作為 SLO 監控或 Alert 的基礎
- 希望減少 Instrumentation 的重複工作
需要注意的重要差異:
Span Metrics 是從取樣後的 Trace 資料衍生的。如果你的 Tracing Pipeline 設定了取樣率(例如只保留 10% 的 Trace),那麼衍生出的 Metrics 也只反映了這 10% 的資料。這與直接用 Metrics SDK 做的 Instrumentation 不同——後者記錄的是每一個請求,精確度更高。
如果你需要精確的 Metrics(例如用於計費、SLA 報告),不應該依賴 Span Metrics。它更適合作為「趨勢觀察」和「快速診斷」的工具。對精確度有要求的場景,仍然需要獨立的 Metrics Instrumentation。
一個常見的策略是:用 Span Metrics 作為起步,快速獲得可觀測性覆蓋;隨著系統成熟,再對關鍵路徑補上精確的 Metrics Instrumentation。兩者並存,各司其職。