跳至主要內容

Auto Router OTEL Telemetry

Auto Router 會將 litellm.routing.* 屬性加入 OpenTelemetry(OTEL)追蹤中,讓您可以識別是哪個設定在執行、它為何選擇某個模型,以及在請求復原前分類器是否失敗。

如果您的閘道已經匯出 OTEL 追蹤,就不需要啟用每個 router 的 telemetry 開關。 請升級到包含下方檢測功能的版本。使用 OTEL v2 來取得路由階段細節與重試/備援事件。呼叫閘道的應用程式不需要額外的 SDK 或不同的推論端點。

可用性

這些屬性需要包含 LiteLLM #44926 的閘道版本。對較舊版本設定 OTEL 環境變數不會加入這些檢測。此指南涵蓋透過閘道非同步 Router 路徑的推論;儀表板中未儲存的 Test Routing 預覽並不是等效的追蹤測試。

我需要先設定什麼嗎?​

您目前的閘道要做什麼
OTEL v2 已經匯出追蹤升級到包含檢測功能的版本。現有與新的 routers 都會自動輸出可用欄位。
一般的 OTEL v1 搭配 otel 回呼升級後的版本會將路由屬性加入模型 spans。請啟用 v2 並重新啟動,以取得路由階段屬性與重試/備援事件。請參閱 遷移指南。
沒有 OTEL 匯出器使用下方範例在閘道上設定一次追蹤。
Lens 在不同的閘道上執行設定來源閘道的匯出器或其收集器,將追蹤轉送至 Lens。開啟 Lens 並不會將兩個閘道連接起來。

您的匯出器、取樣規則與收集器篩選條件仍然會決定哪些追蹤會送達後端。如果收集器只轉送特定 router 名稱,新增 router 時請更新該篩選條件。

在閘道上啟用追蹤​

請從既有的 Auto Router 設定 與閘道可存取的 OTLP 收集器開始。閘道執行環境需要 OpenTelemetry SDK 與 HTTP 匯出器;閘道伺服器 spans 也需要 opentelemetry-instrumentation-fastapi。LiteLLM proxy-runtime extra 已包含這些相依性。

請在啟動前將下列項目設定於閘道程序環境中,然後重新啟動閘道:

export LITELLM_OTEL_V2=true
export OTEL_EXPORTER=otlp_http
export OTEL_ENDPOINT="http://otel-collector:4318"
export OTEL_SERVICE_NAME="litellm-gateway"
export OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=no_content

請以您收集器的位址取代端點。對於 OTLP/HTTP,LiteLLM 會將 /v1/traces 附加到此基底 URL。若您的收集器需要驗證,請設定 OTEL_HEADERS,例如 Authorization=Bearer <collector-token>。也請避免將對應的 OTEL_EXPORTER_OTLP_* 別名設定為互相衝突的值。

下方完整範例會明確註冊一般的 otel 回呼。如果已經設定過,請保留該項目。OTEL v2 也會依據其環境設定在 proxy 上初始化一般匯出器;每個 router 都不需要新的回呼。

config.yaml
model_list:
- model_name: efficient
litellm_params:
model: openai/gpt-5.6-luna
api_key: os.environ/OPENAI_API_KEY
- model_name: capable
litellm_params:
model: openai/gpt-5.6-terra
api_key: os.environ/OPENAI_API_KEY
- model_name: smart-router
model_info:
id: smart-router-config
litellm_params:
model: auto_router/complexity_router
complexity_router_default_model: capable
complexity_router_config:
classifier_type: heuristic
tiers:
SIMPLE: efficient
MEDIUM: efficient
COMPLEX: capable
REASONING: capable

litellm_settings:
callbacks: ["otel"]

general_settings:
master_key: os.environ/LITELLM_MASTER_KEY

請透過您部署的密鑰設定提供 OPENAI_API_KEY 和 LITELLM_MASTER_KEY,然後啟動 proxy:

litellm --config config.yaml --port 4000

還沒有收集器?請使用主控台匯出來檢查閘道輸出中的 spans:

unset OTEL_ENDPOINT OTEL_TRACES_ENDPOINT
unset OTEL_EXPORTER_OTLP_ENDPOINT OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
export OTEL_EXPORTER=console

請清除端點變數,因為即使 OTEL_EXPORTER=console,已設定的端點仍會選擇網路匯出。如果您在 callback_settings.otel 中也設定了明確的網路匯出器,請一併移除這些設定以供此僅主控台預覽使用。主控台匯出不會將追蹤傳送至 Lens 或其他後端。

這些路由屬性與 span 事件不需要 LITELLM_OTEL_INTEGRATION_ENABLE_METRICS 或 LITELLM_OTEL_INTEGRATION_ENABLE_EVENTS。

將追蹤傳送至 Lens​

在 Lens 閘道上啟用追蹤擷取 並取得一個允許在那裡擷取追蹤的 LiteLLM 金鑰。若要直接從來源閘道匯出,請使用 Lens 閘道的基底 URL 與擷取金鑰:

export LENS_GATEWAY_URL="https://your-lens-gateway.example"
export LENS_INGEST_KEY="<lens-ingestion-key>"
export OTEL_EXPORTER=otlp_http
export OTEL_ENDPOINT="${LENS_GATEWAY_URL}/v1/traces"
export OTEL_HEADERS="Authorization=Bearer ${LENS_INGEST_KEY}"

變更匯出器之後,請保留 LITELLM_OTEL_V2=true 並重新啟動來源閘道。如果既有收集器已將追蹤傳送至其他後端,請將 Lens 新增為收集器目的地,以保留兩份副本。應用程式會繼續將推論請求送至來源閘道;只有 telemetry 會轉送至 Lens。請參閱 Lens OpenTelemetry 整合 以取得擷取設定與範例。

驗證 Auto Router 請求​

請使用具有 smart-router 存取權的 LiteLLM 虛擬金鑰作為 LITELLM_API_KEY:

curl http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"smart-router","messages":[{"role":"user","content":"What is 2+2?"}]}'

在您的追蹤後端中,請在服務 litellm-gateway 下找到該請求。在 Lens 中,開啟 Lens > Traces,選取該請求,選取 route smart-router,然後開啟 Attributes。請找 litellm.routing.router_config_id=smart-router-config、litellm.routing.routed_model 和 litellm.routing.cause。

追蹤位置您可以檢查的資料
V2 route <requested-model> 階段分類前所選的設定,以及在可用時完成的決策。在做出決策前失敗,仍可能保留該設定。
模型呼叫 span,v1 或 v2與該模型呼叫相關聯的完整路由決策。span 名稱可以保留請求的 router 別名;請使用 routed_model 來查看所選的模型群組。
V2 請求根,或在尚無根之前的目前 span含有 router 名稱、錯誤類別與既有重試計數器的路由重試/備援事件。

內部分類器與 embedding 呼叫不會繼承尚未完成的外層路由決策。如果失敗的 Auto Router 嘗試改為備援到一般模型,該最終模型 span 會清除先前的決策。請檢查較早的 route 階段以診斷失敗的 router。

可用的 telemetry​

此表中的所有屬性名稱都以 litellm.routing. 開頭。欄位是選用的,且只有在所選策略產生純量值時才會出現。欄位缺失不代表零、false 或成功。

屬性後綴含義
router_model_name、router_type已註冊的 router 身分與已執行的策略類型:complexity、semantic、adaptive 或 quality。註冊名稱可能與團隊的公開別名不同。
router_config_id、router_config_updated_at已選擇定義的 ID 與更新時間戳記(如有)。靜態設定可能沒有更新時間戳記。
router_config_fingerprint在註冊策略時計算出的已設定路由欄位、模型與標籤指紋。
routed_model、cause所選模型群組與其被選中的原因。
tier、tier_label、request_type、score策略特定的分類。等級可以使用自訂名稱;分數不一定是機率。
classifier_model、classifier_cost、classifier_confidence分類器身分、記錄的成本與信心度(如有)。
classifier_failure_reason、classifier_error_type受界限限制的失敗類別與例外類別名稱(當存在例外時)。這些欄位不包含例外訊息。
classifier_primary_rule、classifier_capability_boundary能力分類器回報的規則與能力界限。
classifier_p_solve、classifier_calibrated_p_solve、classifier_calibration_version、classifier_threshold可用的能力估計、校準身分與閾值。
classifier_efficient_p_solve、classifier_capable_p_solve、classifier_calibrated_efficient_p_solve、classifier_calibrated_capable_p_solve高效率與高能力模型的可用解題預測。
classifier_max_quality_gap、classifier_prompt_version已設定的品質差距約束與分類器提示版本(如有產生)。
escalated、context_escalated、context_escalation_original_tier、reasoning_override_min_score升級與推理覆寫細節。
conversation_continuing此決策是否識別為持續中的對話。
savings_baseline_model、savings_baseline_deployment_id路由決策所使用的基準身分。僅憑這些欄位無法判定節省了多少。

指紋不是影響路由的一切內容的完整快照。它不包含參考檔案內容、即時自適應狀態以及外掛實作/狀態。請將其與設定 ID、時間戳記及已部署的閘道版本一併比較。

既有的 model-call 監測資料提供提供者、token 使用量與成本屬性;span 時序提供持續時間。此功能不會建立新的路由指標、儀表板或警示。請參閱 OTEL v2 參考 以了解周邊的 trace 資料。

可回復的分類器失敗​

成功的 HTTP 回應可能包含分類器失敗。範例來說,LLM 分類器可能失敗,而已設定的 heuristic 備援仍可選擇模型並完成請求。示意性的決策如下:

{
"litellm.routing.router_model_name": "smart-router",
"litellm.routing.router_config_id": "smart-router-config",
"litellm.routing.routed_model": "efficient",
"litellm.routing.cause": "heuristic_scorer",
"litellm.routing.classifier_failure_reason": "classifier_error",
"litellm.routing.classifier_error_type": "InternalServerError"
}

這個回復範例需要 LLM 分類器;上方僅使用 heuristic 的設定不會進行任何分類器模型呼叫。請搜尋 classifier_failure_reason 的存在來找出已回復的失敗。若只篩選錯誤 HTTP 狀態或包含 fallback 的 cause,將會漏掉其中一部分。

顯示所選設定、分類器錯誤與 heuristic 回復的 Lens 路由 span

classifier_failure_reason含義
timeout分類器逾時。
circuit_open開啟的斷路器阻止了分類器呼叫。
not_configured必要的分類器設定無法使用。
unsupported_input分類器無法處理輸入。
invalid_response分類器結果無法作為有效決策使用。
declined分類器拒絕選擇層級。
classifier_error發生了其他分類器例外狀況。

路由 cause 會保留實際的決策原因,例如 heuristic_scorer、heuristic_v2、llm_classifier、capability_classifier、jev_classifier、classifier_plugin 或 default_model_fallback。語意路由器會回報 semantic_match、semantic_no_match 或 semantic_error;一般的未匹配並不是分類器失敗。其他路由政策可以回報各自的原因。

重試與備援事件​

當 Router 記錄自動路由嘗試的 retry/fallback 記帳資訊時,OTEL v2 會記錄 litellm.routing.retry。該事件包含 litellm.routing.router_model_name、litellm.retry.count 與 error.type,以及在已知時的 litellm.deployment.model_group 和 litellm.deployment.id。

計數遵循既有的請求重試計數器。事件可以描述已耗盡的嘗試或備援轉換;它不保證會再向外重試一次,也不等於 provider 呼叫的確切數量。設定識別仍保留在 route span 上。

資料擷取與效能​

新的純量路由屬性不包含諸如 signals、已比對關鍵字與 classifier_crux 之類的 prompt 引號欄位,以及原始設定、例外訊息和巢狀預測對映。其他 span 屬性與記錄仍遵循各自的擷取與去識別化設定。尤其是,v1 會保留既有的中繼資料匯出;此 allowlist 不會讓整個 trace 變得沒有 prompt。

Telemetry 會增加屬性處理與較大的 trace 負載。它不會新增分類器或 completion 呼叫,而且設定指紋會在請求之間重複使用。標準網路匯出器會在背景批次處理;console 與明確設定的 simple processors 的行為則不同。請先使用您自己的匯出器與流量測量吞吐量與尾端延遲,再設定效能預期。

疑難排解​

症狀檢查項目
沒有 trace 抵達確認來源閘道已設定 OTEL、目的端接受該協定與憑證,且取樣或 collector 篩選器保留了該請求。成功完成並不代表匯出成功。
trace 抵達但沒有 litellm.routing.*確認閘道包含 instrumentation、請求經由使用 gateway inference API 的已儲存 router 通過,且您正在檢視 route 或 model-call span。
有 model 屬性,但沒有 routing 階段細節請在啟動前啟用 v2 並重新啟動。檢查後端或 preset 是否保留非 LLM span,以及是否已安裝閘道 instrumentation 依賴。
有設定欄位,但沒有選定的模型嘗試可能在產生路由決策之前就已失敗。請檢視該階段及其錯誤。
最後成功的 span 沒有 routing 欄位純模型備援會清除較早的路由器決策。請檢視前一個 route 階段。
沒有 fingerprint 或時間戳記某個定義可能沒有時間戳記,而當已設定的定義無法序列化時,fingerprint 也可能不存在。請使用可用的識別欄位。
已回復的失敗沒有例外類別有些失敗類別是決策,而不是被攔截的例外。請一併檢視 classifier_failure_reason 與 cause。