第 2.12.3 节:把限流、预算、告警和看板接入运营监控
限流、预算、告警和看板只有拆成可执行步骤,才容易复核、排错和交接。完成本节后,你应该能够按顺序说明限流、预算、告警和看板的触发、处理、复核、记录和兜底步骤。
实现步骤或决策流程
推荐技术流
本章推荐的技术流如下。这里的“技术流”不是要求你马上搭建一套复杂平台,而是说明工程顺序。
| 层级 | 推荐技术流 | 推荐原因 | 面试表达 |
|---|---|---|---|
| 入口层 | 每次请求生成 trace_id(追踪编号)和 session_id(会话编号) | 后续所有日志和调用链都靠它串联 | 没有 trace_id(追踪编号)就没有复盘能力。 |
| 日志层 | 结构化日志加敏感信息脱敏 | 方便检索、聚合和审计 | 日志既要可查,又不能泄露隐私。 |
| 调用链层 | 为检索、模型、工具、护栏和审批建立 span(片段) | 定位慢在哪里、错在哪里 | Agent(智能体)排障要看链路,不只看单点。 |
| 指标层 | 把日志事件聚合成错误率、延迟、命中率和成本 | 支持趋势观察和告警 | 指标用于运营,日志用于追查。 |
| 成本层 | 按模型、Token(文本计量单位)、用户、租户和流程归因 | 支持预算、报价和毛利分析 | 成本追踪是商业化必需品。 |
| 限流层 | 用户、租户、模型、工具和风险动作分层限流 | 防止成本和风险扩散 | 限流是稳定性、成本和安全的共同边界。 |
| 告警层 | 按影响分级告警并绑定处置说明 | 避免等用户投诉 | 告警必须能指向负责人和处理动作。 |
| 看板层 | 工程、质量、成本、安全、商业分角色看板 | 不同角色关注不同问题 | 看板要能下钻到 trace(追踪链路)。 |
| 复盘层 | 保存可复盘证据,限制敏感原文 | 支持质检、事故复盘和面试展示 | replay(复盘)解释系统为什么这么做。 |
作品集项目可以先做轻量版本:结构化日志、trace_id(追踪编号)、成本估算表、基础指标、简单看板和几个告警规则。生产项目再接入专业可观测性平台和更严格的数据治理。
字段契约
本书不讲代码语法,所以用字段契约替代源码。字段契约不是为了堆字段,而是为了让系统能回答排障、成本、限流和复盘问题。
基础追踪字段
| 字段 | 中文含义 | 示例值 | 使用位置 | 设计原因 |
|---|---|---|---|---|
trace_id(追踪编号) | 一次用户请求或任务链路的统一编号 | tr_20260701_8f3a | 所有日志、span(片段)、告警、复盘 | 串起入口、检索、模型、工具、审批和最终回答。 |
span_id(片段编号) | 某个具体步骤的编号 | sp_model_002 | 检索、模型、工具、护栏、审批 | 定位哪一步慢、哪一步失败。 |
parent_span_id(父片段编号) | 上一步或父步骤编号 | sp_root_001 | 调用链追踪 | 表达步骤之间的层级关系。 |
session_id(会话编号) | 多轮对话的会话编号 | sess_7788 | 用户会话、质检、复盘 | 把多轮对话归到同一上下文。 |
user_id(用户编号) | 发起请求的用户 | user_1024 | 入口、权限、成本、限流 | 支持按用户排障和限流。 |
tenant_id(租户编号) | 所属企业客户或组织 | tenant_acme | 多租户、成本、权限、看板 | 支持客户隔离、预算和报价。 |
request_type(请求类型) | 问答、查订单、建工单、审批等 | refund_status_query | 入口日志、看板 | 让指标能按业务场景聚合。 |
event_time(事件时间) | 事件发生时间 | 2026-07-01 10:15:30 | 所有日志和指标 | 支持时间窗口分析和复盘。 |
trace_id(追踪编号) 和 span_id(片段编号) 是本章最重要的两个字段。没有它们,你只能看到很多孤立日志;有了它们,才能把一次 Agent 行为还原成完整链路。
模型、检索和工具字段
| 字段 | 中文含义 | 示例值 | 使用位置 | 设计原因 |
|---|---|---|---|---|
model_name(模型名称) | 实际调用的模型 | gpt-4.1-mini | 模型调用、成本看板 | 不同模型成本、延迟和质量不同。 |
input_tokens(输入文本计量) | 输入给模型的 Token(文本计量单位)数量 | 1850 | 模型调用、成本账本 | 估算成本和发现长上下文问题。 |
output_tokens(输出文本计量) | 模型输出的 Token(文本计量单位)数量 | 420 | 模型调用、成本账本 | 估算成本和控制回答长度。 |
retrieval_hits(检索命中) | RAG(检索增强生成)命中的资料数量 | 3 | 检索日志、质量看板 | 判断是否无命中或命中过少。 |
retrieval_top_score(检索最高分) | 最相关资料的匹配分 | 0.82 | 检索质量 | 发现低质量命中。 |
source_ids(来源编号列表) | 命中的资料编号摘要 | policy_2026_refund, faq_118 | 复盘、引用检查 | 回答错了能查用过哪些资料。 |
tool_call_count(工具调用次数) | 本次请求触发的工具数量 | 2 | 工具日志、成本、风险 | 工具过多可能代表流程复杂或模型误判。 |
tool_name(工具名称) | 被调用的工具 | query_order_status | 工具调用日志 | 定位工具成功率和错误来源。 |
tool_result_status(工具结果状态) | success、failed、timeout、denied 等 | timeout | 工具调用日志 | 决定兜底和告警。 |
latency_ms(延迟毫秒) | 某节点或全链路耗时 | 2360 | 调用链、指标、看板 | 判断用户体验和性能瓶颈。 |
error_code(错误码) | 标准化错误编号 | TOOL_TIMEOUT | 日志、告警、复盘 | 避免只靠自然语言错误信息。 |
这些字段要帮助你回答具体问题:为什么回答慢?为什么无命中?为什么工具失败?为什么模型成本升高?为什么用户看到错误结果?
成本、限流和告警字段
| 字段 | 中文含义 | 示例值 | 使用位置 | 设计原因 |
|---|---|---|---|---|
cost_estimate(成本估算) | 本次调用或链路的估算成本 | 0.018 yuan | 成本账本、商业看板 | 支持预算、报价和毛利分析。 |
cost_owner(成本归属) | 成本记到谁身上 | tenant_acme | 成本账本 | 明确按用户、部门、租户还是项目归因。 |
rate_limit_status(限流状态) | normal、warning、limited、blocked、degraded | warning | 入口、模型、工具 | 判断是否接近预算或已阻断。 |
rate_limit_scope(限流范围) | user、tenant、tool、model、ip 等 | tenant | 限流日志、看板 | 确认是哪一层触发限制。 |
budget_remaining(剩余预算) | 租户或用户剩余预算 | 72% | 成本看板、告警 | 提前发现预算风险。 |
alert_level(告警等级) | info、warning、high、critical | high | 告警记录 | 区分普通提醒和严重事故。 |
alert_reason(告警原因) | 告警触发说明 | tool failure rate > 20% | 告警、复盘 | 让处理人知道为什么被通知。 |
approval_wait_ms(审批等待毫秒) | 审批等待时长 | 1800000 | 审批看板、告警 | 发现审批卡住。 |
security_event_type(安全事件类型) | 越权、提示注入、敏感输出等 | permission_denied | 安全看板、告警 | 把安全事件纳入运行监控。 |
replay_available(是否可复盘) | 是否保留了足够证据 | true | 质检、事故复盘 | 判断能否还原当时链路。 |
成本字段和限流字段要一起设计。只记录成本但不限制,会等到账单爆炸后才发现;只做限流但不记录成本,会不知道为什么限制、限制得是否合理。
字段设计注意事项
字段契约还要遵守 5 条原则:
- 字段名稳定,不要今天叫
trace_id(追踪编号),明天叫request_id(请求编号),后天又叫log_id(日志编号)。 - 字段含义要统一,例如 latency_ms(延迟毫秒)到底是全链路耗时,还是单个 span(片段)耗时,要写清楚。
- 敏感内容尽量存摘要、引用编号或脱敏结果,不直接存完整原文。
- 错误码要标准化,便于统计和告警。
- 所有成本估算都要标注口径:按模型计价估算、按内部换算估算,还是按账单回填。
制作步骤
第一步:列出你要排查的问题
不要一上来就搭监控平台。先列出客服工作台上线后最需要回答的问题。
| 问题 | 需要的数据 |
|---|---|
| 用户说回答错了 | trace_id(追踪编号)、检索命中、引用来源、模型名称、最终回答。 |
| 工单没创建 | 工具调用日志、tool_result_status(工具结果状态)、错误码、幂等结果。 |
| 响应太慢 | 每个 span(片段)的 latency_ms(延迟毫秒)。 |
| 成本太高 | model_name(模型名称)、input_tokens(输入文本计量)、output_tokens(输出文本计量)、cost_estimate(成本估算)。 |
| 审批卡住 | approval_status(审批状态)、approval_wait_ms(审批等待毫秒)、审批人角色。 |
| 被限流 | rate_limit_status(限流状态)、rate_limit_scope(限流范围)、剩余预算。 |
| 疑似越权 | user_id(用户编号)、tenant_id(租户编号)、权限决策、安全事件类型。 |
这一步的交付物是一张“排障问题到观测字段”的映射表。
第二步:定义 trace_id(追踪编号)和 span(片段)
每次用户请求进入系统,都要生成 trace_id(追踪编号)。后续所有日志、模型调用、工具调用、审批和告警都带上这个编号。
一次典型客服请求可以拆成这些 span(片段):
- 入口校验。
- 限流判断。
- 会话加载。
- RAG 检索。
- 模型调用。
- 工具网关校验。
- 工具执行。
- 输出护栏。
- 最终回答。
- 指标和成本入账。
每个 span(片段)都记录开始时间、结束时间、状态和错误码。这样用户说“很慢”时,你能知道慢在模型、检索还是工具。
第三步:设计结构化日志
结构化日志要稳定、可检索、可聚合。最小日志事件可以按类型拆:
| 日志类型 | 记录重点 |
|---|---|
| request_log(请求日志) | 谁发起、哪个租户、哪个会话、是否限流。 |
| retrieval_log(检索日志) | 查询摘要、命中数量、来源编号、权限过滤结果。 |
| model_log(模型日志) | 模型名称、Token(文本计量单位)、延迟、成本估算、错误码。 |
| tool_log(工具日志) | 工具名称、参数摘要、结果状态、业务编号、错误码。 |
| approval_log(审批日志) | 审批状态、等待时长、审批人角色、是否过期。 |
| safety_log(安全日志) | 护栏结果、拒绝原因、安全事件类型。 |
| answer_log(回答日志) | 最终回答摘要、引用来源、是否转人工。 |
注意:这里是日志契约,不是代码。你要能和前端、后端、数据、运营一起约定每类日志是什么含义。
第四步:把日志变成指标
日志适合查单次问题,指标适合看趋势。客服工作台至少要有这些指标:
| 指标 | 计算口径 | 用途 |
|---|---|---|
| 请求量 | 每分钟、每小时、每天的请求数 | 判断系统负载和客户活跃度。 |
| 成功率 | 成功请求除以总请求 | 判断整体可用性。 |
| 平均延迟和高分位延迟 | 平均、P95(百分之九十五分位延迟)、P99(百分之九十九分位延迟) latency_ms(延迟毫秒) | 判断用户体验。 |
| 检索无命中率 | retrieval_hits(检索命中)为 0 的比例 | 发现知识库缺口。 |
| 工具失败率 | 工具失败次数除以工具调用次数 | 发现业务系统或工具契约问题。 |
| 审批超时率 | 超过阈值未处理的审批比例 | 发现人工流程瓶颈。 |
| 成本 | 按租户、用户、模型、流程聚合 cost_estimate(成本估算) | 支持预算和报价。 |
| 限流次数 | rate_limit_status(限流状态)为 limited 或 blocked 的次数 | 判断阈值和套餐是否合理。 |
| 安全事件数 | 越权、提示注入、敏感输出等事件 | 发现风险趋势。 |
指标要能下钻。比如看到“工具失败率 20%”,要能点进失败最多的工具、租户、trace_id(追踪编号)和错误码。
第五步:建立成本账本
成本追踪要从初始版本开始做,不要等账单失控后再补。
成本账本至少按 5 个维度归因:
- 租户:哪个企业客户消耗了成本。
- 用户:哪个用户或客服账号产生了成本。
- 模型:哪个模型最贵、哪个模型最慢。
- 流程:问答、查订单、建工单、审批、质检分别花多少钱。
- 工具:外部短信、邮件、订单系统、工单系统是否有额外费用。
成本账本的输出不是只有工程师看。销售要用它设计套餐,老板要用它看毛利,运营要用它发现滥用,客服主管要用它判断自动化是否值得。
第六步:设计限流和预算策略
限流至少分 4 层:
读图重点:从硬门禁开始:安全和高风险超限直接阻断;预算接近阈值先降级,流量超软阈值可排队。无论哪种结果都要记录状态与成本,只有达到规则时才分级告警并支持下钻。
| 限流层 | 示例规则 | 目的 |
|---|---|---|
| 用户层 | 单用户每分钟请求数、单会话最大轮数 | 防止误操作和滥用。 |
| 租户层 | 每天 Token(文本计量单位)预算、每月成本上限 | 控制商业成本。 |
| 工具层 | 退款审批、短信、发券工具的频率限制 | 控制高风险动作。 |
| 模型层 | 高成本模型的调用比例和峰值限制 | 避免模型资源失控。 |
超限不一定直接拒绝。可以按场景选择:
- warning(预警):提示接近预算。
- degrade(降级):换轻量模型、减少检索数量、缩短回答。
- queue(排队):低优先级请求等待。
- block(阻断):高风险或超预算动作停止。
限流策略要能被解释。用户看到的提示要简洁,内部日志要记录完整原因。
第七步:设计告警规则和处理手册
告警要和处置动作绑定。没有处理动作的告警,只会制造噪音。
| 告警场景 | 告警等级 | 通知对象 | 处理动作 |
|---|---|---|---|
| 模型调用失败率突然升高 | high | 工程师 | 切换备用模型、检查供应商状态、降低重试。 |
| 检索无命中率升高 | warning | 运营、知识库负责人 | 补资料、调整分块、检查权限过滤。 |
| 工具失败率升高 | high | 工程师、业务系统负责人 | 检查工具网关和下游系统。 |
| 租户成本接近预算 | warning | 运营、客户成功、销售 | 通知客户、调整套餐、启用降级。 |
| 安全事件增加 | high 或 critical | 安全人员、工程师 | 检查越权、提示注入、异常用户。 |
| 审批积压超阈值 | warning | 客服主管 | 增加审批人、处理积压、调整规则。 |
告警记录里要包含 trace_id(追踪编号)样例、影响范围、开始时间、最近变化和建议动作。
第八步:设计分角色 dashboard(看板)
不要把所有指标塞进一个大屏。至少设计 5 类看板:
| 看板 | 面向谁 | 核心问题 |
|---|---|---|
| 工程看板 | 工程师 | 哪里慢、哪里错、哪个工具失败? |
| 质量看板 | 客服主管、运营 | 回答是否有依据,转人工和满意度如何? |
| 成本看板 | 老板、销售、客户成功 | 哪个租户花费高,套餐是否亏损? |
| 知识库看板 | 知识库运营 | 哪些问题无命中,哪些资料过时? |
| 安全看板 | 安全和管理者 | 越权、提示注入、敏感输出是否增加? |
一个好的看板要能从趋势下钻到样例。比如“检索无命中率升高”不能只显示一条曲线,还要列出高频无命中问题和对应租户。
第九步:设计 replay(复盘)包
replay(复盘)包不是保存所有原文。它保存能够解释一次决策的最小证据。
一次客服回答的复盘包可以包含:
- trace_id(追踪编号)和 session_id(会话编号)。
- 用户问题摘要。
- 检索命中的 source_ids(来源编号列表)和资料版本。
- 使用的 model_name(模型名称)。
- input_tokens(输入文本计量)、output_tokens(输出文本计量)和 cost_estimate(成本估算)。
- tool_call_count(工具调用次数)、tool_name(工具名称)和工具结果摘要。
- 权限决策、护栏决策和审批状态。
- 最终回答摘要和是否转人工。
- 用户反馈或客服质检结果。
复盘包要有访问权限和保留周期。不是所有历史对话都应该永久保存。
第十步:用样例验收
可观测性验收不能只看“日志里有东西”。至少准备这些样例:
- 正常售后政策问答。
- 检索无命中。
- 模型超时。
- 工具超时。
- 创建工单重复提交。
- 用户触发限流。
- 租户成本接近预算。
- 退款审批卡住。
- 越权查询订单。
- 输出护栏拦截敏感信息。
每个样例都要能看到 trace_id(追踪编号)、关键 span(片段)、日志、指标变化、成本记录和必要告警。
和后续章节的关系
| 后续内容 | 本章提供什么基础 |
|---|---|
| 第 2.13 章安全、权限、Guardrail(护栏)与人工审批 | 安全事件、权限拒绝、审批卡住和高风险工具调用都需要日志、告警和复盘。 |
| 商业需求、报价与验收 | 成本追踪、租户用量和服务等级会影响报价、合同和验收。 |
| 自动化质量与发布 | 发布前要检查错误率、延迟、成本、限流和告警是否正常。 |
| 综合知识库 Agent 制作方法 | 最终项目必须能解释回答来源、工具动作、成本和失败兜底。 |
| 作品集项目 | 可观测性让项目从“能跑”升级为“像上线系统”。 |
本章也反向连接前面章节:
- RAG 章节:检索命中率、无命中样例和资料版本要进入观测。
- Tool Calling(工具调用)章节:工具调用成功率、错误码、幂等和审计要进入观测。
- 状态、记忆与会话章节:session_id(会话编号)和状态变化要进入复盘。
- MCP(模型上下文协议)章节:外部工具接入后更需要统一追踪和权限日志。
- LangGraph(智能体状态图框架)章节:状态图每个节点都可以成为 span(片段)。
版本与资料来源
本节聚焦可观测性、成本追踪、限流、告警、看板和复盘的工程设计与面试表达。
资料依据:
- OpenTelemetry(可观测性标准)文档:https://opentelemetry.io/docs/
- OpenTelemetry(可观测性标准) Traces(调用链追踪)概念:https://opentelemetry.io/docs/concepts/signals/traces/
- OpenTelemetry(可观测性标准) Metrics(指标)概念:https://opentelemetry.io/docs/concepts/signals/metrics/
- OpenTelemetry(可观测性标准) Logs(日志)概念:https://opentelemetry.io/docs/concepts/signals/logs/
- OpenAI API(应用程序接口)文档:https://developers.openai.com/api/docs
- OpenAI(模型服务商) Agents(智能体工具集)文档:https://developers.openai.com/tracks/building-agents/
- OWASP Top 10 for LLM Applications(大语言模型应用十大安全风险):https://owasp.org/www-project-top-10-for-large-language-model-applications/
- FinOps Foundation(云成本运营基金会)文档:https://www.finops.org/
过时风险:模型计费方式、供应商监控能力、可观测性平台、告警工具和合规要求会持续变化。进入真实项目开发前,必须重新核对当前模型价格、供应商文档、客户合规要求和企业内部日志规范。