具代表性的面試主題

資料面試:如何設計 OpenTelemetry 指數直方圖管道並控制成本?

資料困難
Offer.cc 編輯團隊發佈 更新

題幹

你要把高動態範圍延遲指標從 OpenTelemetry 傳到 Prometheus。如何選擇指數直方圖、保證合併正確並避免儲存與查詢成本失控?

題目

為多區域服務設計延遲指標管道:SDK 產生 OpenTelemetry ExponentialHistogram,Collector 聚合,後端寫入 Prometheus 原生直方圖。請說明資料語義、降級與成本控制。

場景與限制

延遲範圍從微秒到數分鐘,服務有高基數標籤。部分後端只支援經典桶,網路可能丟批,查詢需要 p50、p95 和跨區域聚合。指標不能暴露租戶隱私,也不能無限增加時間序列。

核心考點

考察指數邊界、scale、正負桶、zero count、count/sum 與 temporality,以及跨程序合併的可交換性。OpenTelemetry 指數直方圖用指數公式壓縮桶邊界,在近似大小下涵蓋高動態範圍;Prometheus 原生直方圖可映射該模型,但轉換與查詢必須保留語義。

參考解法

SDK 只記錄允許的業務維度和原始觀測,Collector 按服務、區域與固定時間窗合併同 schema 資料。不支援原生直方圖的後端明確轉成經典桶並記錄精度損失。限制 scale、桶數、標籤集合和每租戶預算;超限時降採樣或拒絕新標籤,不靜默截斷。

關鍵細節

合併前檢查 temporality、aggregation temporality、schema、正負桶和時間範圍;不同 schema 不能直接拼接。查詢層對 p95 使用直方圖分位數近似,面板顯示樣本量、誤差和降級標記。丟批時用批次序號和重試,避免同一批重複計數。

常見誤區

把指數桶當成精確分位數;把不同 temporality 相加;無界標籤直接進入維度;所有資料轉成最細 scale;忽略負值、零桶和重試重複;只看儲存量不看查詢放大。

評估標準

優秀答案能畫出 SDK、Collector、遠端寫入、查詢和預算控制邊界,給出合併不變量、降級策略與 p95 誤差說明。一般答案只說「用 histogram_quantile」,沒有解釋資料模型與成本。

追問

為什麼不能直接合併不同 schema 的指數直方圖?

桶索引與邊界映射不同,直接相加會把觀測放進錯誤區間;應依規範重映射到相容 schema,並記錄精度變化。

如何處理累計 temporality 與 delta temporality 混用?

在 Collector 明確轉換並保存每個流的起點與上次值;缺少連續性時丟棄不完整窗口或標記缺口,不能把累計值當 delta 重複相加。

何時應退回經典直方圖?

下游不支援原生格式、合規要求固定桶或查詢生態無法解釋指數桶時,選擇有限經典桶並公開誤差與成本,而非讓消費者猜轉換規則。

公開來源

同類題目