Agent开发系列(七)-可观测性Agent的设计
目录一、可观测性在 Agent 安全里的特殊挑战二、三层可观测性设计2.1 Logs安全事件的原始记录2.2 Traces跨层级的调用链路追踪2.3 Metrics安全态势的高层感知三、Agent 安全的可观测性特殊设计3.1 上下文安全监控3.2 模型层安全监控3.3 多 Agent 场景的链路追踪可观测性不是监控的升级版是三个维度的集合日志Logs、链路追踪Traces、指标Metrics。Agent 安全场景下这三个维度各有侧重但最终要打通才能真正看得见。一、可观测性在 Agent 安全里的特殊挑战传统微服务的可观测性已经成熟——请求进来链路清晰每个节点做什么是确定的。Agent 不一样不确定性Agent 的输出不是 100% 可预测的同样输入跑两次可能得到不同结果。这意味着很多传统监控方式检查返回值是否符合预期在 Agent 场景失效。长链路Agent 处理一个请求中间可能经过输入解析 → 上下文组装 → N 次工具调用 → 模型推理 → 输出生成。每个环节都可能触发安全护栏链路比传统服务长得多。上下文即状态Agent 的状态不只是数据库里的数据还包括上下文窗口里的内容。上下文被污染是看不见的传统的状态监控发现不了这个问题。所以 Agent 安全的可观测性设计必须比传统服务更细、埋点更多、告警更实时。二、三层可观测性设计2.1 Logs安全事件的原始记录设计原则每一条安全相关操作都要记录原始日志日志是追溯的唯一依据。日志分层日志类型记录内容存储要求保留周期访问日志用户ID、请求时间、输入摘要、输入长度高性能存储30天安全日志护栏触发记录、触发规则、判定结果高可靠存储6个月审计日志所有工具调用、所有降级行为、身份信息防篡改存储1年调试日志Chain-of-thought、工具调用详情、模型输入输出摘要开发环境全量生产按需采样7天安全日志的必填字段每条都要有{ event_id: uuid, // 全局唯一关联追溯用 timestamp: ISO8601, // 精确到毫秒 session_id: string, // 关联同一会话所有操作 user_id: string, // 谁在操作 agent_id: string, // 哪个 Agent 在处理 event_type: enum, // INPUT_RECEIVED / GUARDRAIL_TRIGGERED / TOOL_CALLED / OUTPUT_GENERATED / ... layer: enum, // INPUT / CONTEXT / TOOL / OUTPUT / AUDIT action: string, // 具体操作描述 result: enum, // ALLOWED / BLOCKED / FLAGGED / FALLBACK triggered_rule: string, // 触发了哪条规则如果有 risk_level: enum, // P0 / P1 / P2 metadata: {} // 扩展字段输入摘要、参数、调用链ID等 }日志采集的技术选型高性能方案结构化日志直接写 Kafka/ Pulsar后端消费写入 ClickHouse/ Elasticsearch防篡改方案审计日志写一次读写分离用 append-only 存储如 AWS S3 Object Lock 或自建 WORM 存储关键要求日志链路不能断。任何导致日志丢失的故障都要触发自己的告警2.2 Traces跨层级的调用链路追踪设计原则每个请求的处理链路从输入到输出全链路可追溯且能还原当时发生了什么。Agent 场景的 Trace 数据结构Trace (整个请求) ├── Span 1: Input Received │ ├── 输入长度、输入类型 │ ├── Layer 1 判定结果通过 / 拦截 / 标记 │ └── 触发规则如果有 │ ├── Span 2: Context Assembly │ ├── 上下文来源用户输入 / 外部数据源 │ ├── 上下文长度 │ └── 敏感数据检测结果 │ ├── Span 3: Tool Calls (N个) │ ├── Tool Name │ ├── 调用参数脱敏后 │ ├── Layer 3 判定结果 │ ├── 执行结果成功 / 失败 / 降级 │ └── 执行耗时 │ ├── Span 4: Model Inference │ ├── 模型名称、版本 │ ├── 输入 token 数、输出 token 数 │ ├── 推理耗时 │ └── 安全相关输出标记如果有 │ ├── Span 5: Output Generated │ ├── 输出长度 │ ├── Layer 4 判定结果 │ ├── 脱敏操作记录如果有 │ └── 最终输出摘要 │ └── Span 6: Fallback Triggered (如果有) ├── 降级级别 ├── 降级原因 └── 恢复方式Trace 的关联能力session_id关联同一用户的所有 Traceparent_span_id关联父子调用关系event_id关联到 Logs 中的具体记录triggered_rule能在 Trace 中直接看到触发了哪条护栏规则技术选型建议推荐OpenTelemetry Jaeger / Tempo主流方案接入成本低替代如果已有 SkyWalking / Zipkin 基础设施直接接入关键要求Agent 的每个工具调用必须是独立的 Span不能合并。中间件的链路追踪对 Agent 场景不够细需要在应用层手动埋点2.3 Metrics安全态势的高层感知设计原则Metrics 是给看仪表盘的人用的要能一眼看出系统安全态势是否正常。三类核心指标A. 流量类指标判断系统是否被攻击指标名称定义正常范围告警阈值req_total请求总量业务基线 ± 20%超过业务基线 3 倍req_by_user单用户请求频率用户历史均值 ± 50%超过均值 10 倍input_avg_length平均输入长度历史均值 ± 30%超过均值 5 倍context_window_utilization上下文窗口利用率 80% 90%B. 护栏触发类指标判断护栏是否有效指标名称定义正常范围告警阈值guardrail_trigger_rate护栏触发率触发数 / 总请求数业务基线超过基线 5 倍guardrail_by_layer各层护栏触发分布符合业务特征某层突然激增guardrail_false_positive_rate误拦截率人工审核确认是误拦截的比例 5% 15%guardrail_blocked_vs_flagged拦截和标记的比例合理分布几乎全是标记护栏太松或全是拦截护栏太严C. 工具调用类指标判断工具是否被滥用指标名称定义正常范围告警阈值tool_call_rate工具调用频率次 / 请求业务特征基线超过基线 3 倍tool_call_by_type各工具调用分布符合业务特征某工具突然激增tool_call_duration_p99工具调用耗时 P99 5s 30stool_call_error_rate工具调用错误率 1% 5%dangerous_tool_call_rate高风险工具调用频率极低任何非零增长三、Agent 安全的可观测性特殊设计3.1 上下文安全监控这是 Agent 场景独有的传统的可观测性基础设施不覆盖。监控什么上下文膨胀率单位时间内上下文增长的速度。突然激增可能是输入洪水攻击上下文来源分布上下文中有多少来自用户直接输入多少来自外部数据源。外部数据源占比突然升高可能是间接注入敏感内容出现位置敏感信息PII、凭证、内部路径出现在上下文的哪个位置。如果出现在用户输入区说明输入层检测失败怎么监控在上下文组装阶段埋点记录上下文中每个片段的来源和内容特征。不需要记录完整内容——记录特征向量敏感词命中、长度、来源类型就够了。3.2 模型层安全监控监控什么输出置信度分布如果模型输出的置信度普遍偏低或偏高可能存在问题输出与输入的语义一致性输入问 A输出答 B且语义不相关——可能是幻觉或注入模型版本与行为一致性同一模型版本的行为是否稳定不同时间处理相同输入结果是否一致怎么监控在模型推理 Span 中记录输入输出的 embedding不用存储完整文本存储向量用于相似度比对定期跑自动化测试集检测模型行为漂移3.3 多 Agent 场景的链路追踪监控什么Agent 间消息的流转路径消息从 A → B → C每个节点的输入输出是否被正确传递消息清洗是否生效A 传给 B 的消息中是否包含不应该出现的内部指令或上下文验证 Agent 的结论准确率验证 Agent 对上游结论的校验通过率——如果通过率接近 100%说明验证 Agent 可能太松如果通过率极低说明上游 Agent 可能问题多怎么监控在每个 Agent 的消息入口和出口埋点记录消息的来源、目的地、内容特征。特别注意消息中是否包含系统指令类的文本特征。