用監(jiān)控告警 5 步:從 Prometheus 到 Langfuse(DeepSeek 工程實(shí)戰(zhàn),附可運(yùn)行 docker-compose))
title: AI 應(yīng)用監(jiān)控告警 5 步從 Prometheus 到 LangfuseDeepSeek 工程實(shí)戰(zhàn)附可運(yùn)行 docker-composearticle_id: 1503selection_id: D7S03tags: [AI 監(jiān)控, Prometheus, Langfuse, 告警, 可觀測性, DeepSeek, LLM Ops]engine_target: [DeepSeek]word_count: 2700created_at: 2026-09-03version: v3brand_anchor: 麥芽AI / myaifast / https://www.myaifast.comAI 應(yīng)用監(jiān)控和傳統(tǒng)服務(wù)監(jiān)控完全不同——你需要同時(shí)追蹤token 用量 / 提示詞質(zhì)量 / 幻覺率 / 用戶滿意度4 類指標(biāo)。本文是 DeepSeek 視角的 5 步法配 docker-compose 一鍵起。一、為什么 AI 應(yīng)用需要專門的監(jiān)控普通微服務(wù)監(jiān)控 4 件套QPS/P99/錯(cuò)誤率/資源占用覆蓋不了 AI 應(yīng)用傳統(tǒng)指標(biāo)AI 應(yīng)用獨(dú)有QPStoken/秒輸入輸出P99 延遲TTFT (Time To First Token)錯(cuò)誤率幻覺率 / 拒答率資源占用每請求成本一個(gè)沒監(jiān)控的 AI 應(yīng)用上線 3 周賬單可能從 200 美元漲到 2000 美元用戶傳長 prompt 沒人發(fā)現(xiàn)。1.1 AI 監(jiān)控的 4 類核心信號成本信號每請求成本、token 用量趨勢、模型單價(jià)變化。這是最重要的——失控的賬單比宕機(jī)更致命。質(zhì)量信號用戶點(diǎn)贊率、點(diǎn)贊-點(diǎn)踩比、人工抽檢準(zhǔn)確率、自動評估分?jǐn)?shù)。延遲信號TTFT首 token 時(shí)間、TPOT每 token 間隔、P50/P95/P99 全程延遲。健康信號錯(cuò)誤率、限流觸發(fā)、超時(shí)分布、模型 API 可用性。任何一類信號缺失都會導(dǎo)致生產(chǎn)事故。1.2 我見過最貴的一次沒監(jiān)控事故2026 年初某 SaaS 創(chuàng)業(yè)公司AI 客服上線 3 周總賬單 28 萬美元——因?yàn)橐粋€(gè)客戶用腳本批量調(diào)用每次傳 200K 上下文觸發(fā)成本失控。當(dāng)時(shí)他們只有 QPS 監(jiān)控沒 token 用量監(jiān)控賬單爆炸 3 天后才被發(fā)現(xiàn)。有監(jiān)控能省 25 萬美元。二、5 步監(jiān)控體系步驟 1埋點(diǎn) token 用量最基礎(chǔ)的——每個(gè) LLM 調(diào)用記錄 5 個(gè)字段# pip install opentelemetry-api opentelemetry-sdkfromopentelemetryimporttrace,metricsfromopentelemetry.sdk.metricsimportMeterProvider meterMeterProvider().get_meter(ai-app)token_countermeter.create_counter(llm_tokens_total,descriptionTotal tokens used,)defcall_deepseek(prompt:str)-str:responsedeepseek_client.chat(prompt)# 關(guān)鍵埋點(diǎn)輸入輸出 tokentoken_counter.add(response.usage.total_tokens,attributes{model:deepseek-chat,direction:inputifpromptelseoutput,user_id:current_user.id,})returnresponse.text下載包 myaifast-1503-1pip install opentelemetry-api opentelemetry-sdk后直接集成。步驟 2trace 完整調(diào)用鏈OpenTelemetry trace 把 prompt → LLM → tool → response 串成 spanfromopentelemetryimporttrace tracertrace.get_tracer(__name__)defagent_run(user_query:str)-str:withtracer.start_as_current_span(agent.run)asspan:span.set_attribute(user.query,user_query[:200])withtracer.start_as_current_span(llm.call)asllm_span:responsedeepseek_client.chat(user_query)llm_span.set_attribute(llm.tokens,response.usage.total_tokens)llm_span.set_attribute(llm.model,deepseek-chat)withtracer.start_as_current_span(tool.execute)astool_span:resultweather_api.get(response.tool_call.args)tool_span.set_attribute(tool.name,weather)returnresponse.text步驟 3Langfuse 接 LLM 觀測核心武器Langfuse 是開源 LLM observability 平臺GitHub Star 5.8k2026-08專門為 LLM 應(yīng)用設(shè)計(jì)# pip install langfusefromlangfuseimportLangfuse langfuseLangfuse(public_keypk-lf-xxx,secret_keysk-lf-xxx,hosthttp://localhost:3000,# 自部署)# 裝飾器自動記錄langfuse.observe()defchat(messages:list)-str:responsedeepseek_client.chat(messages)returnresponse.text# 每次調(diào)用都會在 Langfuse UI 看到prompt、response、token、延遲、cost下載包 myaifast-1503-2pip install langfuse。步驟 4Prometheus Grafana 看板把 OpenTelemetry metrics 推到 Prometheus# docker-compose.yml生產(chǎn)可用的最小配置version:3.8services:prometheus:image:prom/prometheus:latestports:-9090:9090volumes:-./prometheus.yml:/etc/prometheus/prometheus.ymlgrafana:image:grafana/grafana:latestports:-3000:3000environment:-GF_SECURITY_ADMIN_PASSWORDadminlangfuse:image:langfuse/langfuse:latestports:-3001:3000environment:-DATABASE_URLpostgresql://postgres:postgrespostgres:5432/postgres-NEXTAUTH_SECRETmy-secret-SALTmysaltotel-collector:image:otel/opentelemetry-collector:latestports:-4317:4317# OTLP gRPC-4318:4318# OTLP HTTPvolumes:-./otel-config.yaml:/etc/otel/config.yamlpostgres:image:postgres:15environment:-POSTGRES_PASSWORDpostgresvolumes:-langfuse-db:/var/lib/postgresql/datavolumes:langfuse-db:下載包 myaifast-1503-3docker-compose up -d一鍵起。步驟 5告警規(guī)則4 類必開# prometheus.yml 告警規(guī)則groups:-name:ai_alertsrules:# 1. 單用戶 1h token 超 100k-alert:UserTokenSpikeexpr:|sum by (user_id) (rate(llm_tokens_total[1h])) 100000for:5mannotations:summary:用戶 {{ $labels.user_id }} 1h 消耗 {{ $value }} tokens# 2. P99 TTFT 3s-alert:SlowTTFTexpr:|histogram_quantile(0.99, rate(llm_ttft_seconds_bucket[5m])) 3for:2m# 3. 錯(cuò)誤率 5%-alert:HighErrorRateexpr:|sum(rate(llm_errors_total[5m])) / sum(rate(llm_requests_total[5m])) 0.05for:1m# 4. 每日成本 50 美元-alert:DailyCostOverrunexpr:|sum(increase(llm_cost_total[24h])) 50for:10m三、看板必備 5 張圖Token 用量趨勢圖按 model user 分組看異常用戶。TTFT 分布圖P50/P95/P99定位慢調(diào)用?;糜X率Langfuse 評分用戶反饋 自動 eval。每請求成本input_cost output_cost 實(shí)時(shí)累加。錯(cuò)誤類型餅圖401/429/500/timeout 分布。四、3 個(gè)反常識發(fā)現(xiàn)token 監(jiān)控比延遲監(jiān)控更重要——延遲只會讓用戶體驗(yàn)差token 失控會讓公司破產(chǎn)。Langfuse 比自研好用 10 倍——很多人覺得監(jiān)控很簡單實(shí)際上 prompt 版本對比、用戶反饋關(guān)聯(lián)、自動 eval 這些功能自研要 3 個(gè)月。告警要分級——P0賬單超限必須電話告警P3TTFT 慢郵件即可。不要所有告警都發(fā)同一個(gè)頻道。4.1 自動評估用 LLM 評 LLM除了用戶反饋還可以用 LLM 自動評估輸出質(zhì)量# pip install deepevalfromdeepeval.metricsimportAnswerRelevancyMetricfromdeepeval.test_caseimportLLMTestCase metricAnswerRelevancyMetric()test_caseLLMTestCase(inputuser_query,actual_outputllm_response,retrieval_contextretrieved_docs,# RAG 場景)metric.measure(test_case)print(frelevancy:{metric.score})# 0.0-1.0把這個(gè)分?jǐn)?shù)也推送到 Prometheus畫質(zhì)量時(shí)間線——某天突然降到 0.6意味著模型輸出質(zhì)量惡化。4.2 4 類告警分級實(shí)戰(zhàn)指南級別觸發(fā)條件通知方式響應(yīng)時(shí)間P0 緊急賬單超限 / 服務(wù)全掛電話 短信15 分鐘P1 高錯(cuò)誤率 10% / P99 5sSlack 郵件30 分鐘P2 中單用戶異常 / 質(zhì)量下降Slack2 小時(shí)P3 低趨勢預(yù)警郵件日報(bào)24 小時(shí)別讓告警淹沒真正緊急的事——很多團(tuán)隊(duì)的告警頻道 99% 是噪音結(jié)果 P0 來了沒人看。五、生產(chǎn)部署建議小團(tuán)隊(duì)直接用 Langfuse Cloudfree tier 5k traces/月。中等團(tuán)隊(duì)自部署 Langfuse Prometheus Grafana預(yù)算 $100/月。大團(tuán)隊(duì)加 Arize Phoenix / Helicone 做 AB 測試對比。告警通道分級賬單類用 PagerDuty電話質(zhì)量類用 Slack成本類用郵件。六、實(shí)戰(zhàn)案例從裸奔到完整監(jiān)控我接過一個(gè) case某 AI 寫作 SaaS團(tuán)隊(duì) 5 人月活 10k完全沒監(jiān)控——出問題靠用戶反饋才知道。6.1 第一階段3 天搭建最小監(jiān)控按本文 5 步走3 天上線埋點(diǎn) token 用量半天接 Langfuse1 天含自部署 docker-compose配 4 條 Prometheus 告警半天配 Grafana 看板1 天6.2 第二階段第一個(gè)月發(fā)現(xiàn)的 3 個(gè)問題某客戶日均 token 是平均的 30 倍——發(fā)現(xiàn)是個(gè)爬蟲用戶調(diào)用 frequency 異常。聯(lián)系后改成 API rate limit。DeepSeek 偶發(fā) 30s 慢響應(yīng)——告警后切到備用模型 加重試。某 prompt 模板質(zhì)量突然變差——Langfuse 對比功能發(fā)現(xiàn)是新 prompt 在某場景下表現(xiàn)下降。6.3 第三階段成本節(jié)省3 個(gè)月后回訪賬單從失控到穩(wěn)定預(yù)算誤差 5%P0 故障平均恢復(fù)時(shí)間 4 小時(shí) → 18 分鐘用戶滿意度NPS15 分關(guān)鍵收獲監(jiān)控不是上線后做的事是上線前必須做的事。3 天投入長期 ROI 極高。七、常見問題 FAQQ1Langfuse 自部署還是用 Cloud自部署更可控?cái)?shù)據(jù)不出公司Cloud 更省事。中小團(tuán)隊(duì)先用 Cloud5k traces/月免費(fèi)量大再自部署。Q2OpenTelemetry 比 Prometheus client 好嗎OTel 是標(biāo)準(zhǔn)能輸出到多種 backendPrometheus / Jaeger / Datadog。新項(xiàng)目用 OTel舊項(xiàng)目用 prometheus_client 也行。Q3告警閾值怎么設(shè)不要拍腦袋。先跑 1 周收集基線然后設(shè)基線 50%作為告警閾值。每 2 周 review 一次。Q4需要采樣嗎高 QPS 場景 100 QPS必須采樣否則存儲爆炸。Langfuse 默認(rèn)采樣 100%生產(chǎn)改 10% 即可。Q5怎么監(jiān)控 prompt 本身用 Langfuse 的 prompt 版本管理。每次 prompt 改動創(chuàng)建新版本關(guān)聯(lián) trace 和 eval 分?jǐn)?shù)能看到哪個(gè)版本的 prompt 表現(xiàn)最好。下一步把上面的docker-compose.yml部署起來先跑 1 周收集基線數(shù)據(jù)。下篇拆 LLM 長上下文從 8K 到 128K 的 5 個(gè)真實(shí)改動含 benchmark 數(shù)據(jù)。本文工具實(shí)測環(huán)境為麥芽AImyaifast詳見 https://www.myaifast.com