#AI#大模型#DevOps

Prompt 与 Trace 遥测治理:采集前脱敏、分级留存与可验证删除

Prompt、响应、检索片段和工具参数一旦进入遥测系统就会被复制扩散。本文给出字段分级、采集前脱敏、OTel Collector 防线、留存矩阵和泄露处置方案。

本文要点

  • 主题聚焦:AI、大模型、DevOps
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年2月19日·更新于 2026年7月20日

一次 AI Trace 可能携带用户问题、系统 Prompt、检索片段、响应、工具参数和认证 header,并被 SDK、Collector、队列、后端、备份与调试导出多次复制。夜间脱敏已经太晚;缩短 Trace 保留期也不会自动删除旧备份。

AI 应用数据隐私与合规 说明整体边界,本篇只处理遥测平面:允许采什么、在哪清理、保存多久、谁能查看,以及如何证明删除。默认用元数据定位,只有授权的短期证据才接触原文。

先建立字段级数据分类

把信号分为四级。L0 是可公开的运行元数据,如服务、区域、模型族、耗时、token 数和有限错误码;L1 是内部标识,如 Prompt 版本、工具名、文档 ID 与租户分组;L2 是可能含个人或商业信息的用户输入、模型输出、检索摘要和工具结果;L3 是凭证、认证 header、密码、私钥、完整支付信息等禁止进入遥测的内容。

每个 span schema 都要声明级别、用途、负责人、后端和期限。未登记属性默认按 L2 丢弃。低熵邮箱、手机号可被枚举,稳定哈希还会形成跟踪标识;确需关联时使用轮换密钥 HMAC 并隔离密钥,否则直接删除。

在产生事件前完成第一道脱敏

最可靠的位置是业务层。日志 API 只接受结构化 allowlist,禁止序列化整个请求。模型 span 记录 operation、模型、token、耗时和结果类别,不记录正文;工具层只记录工具名、schema 版本、状态和字节数。按 密钥管理 原则,Authorization、Cookie、API Key 和连接串不得进入遥测。

确需原文调试时,使用独立捕获开关:限定事件 ID、授权租户和最长一小时,先脱敏再加密写入隔离库。普通 Trace 只存不可推导路径的随机引用;开关须双人审批、自动过期并审计。

Collector 是防漏边界,不是事后清洗

每条 Trace 和 Log 出口都应经过版本化 Collector transform。使用显式 allowlist;正则无法完整识别自由文本中的姓名、代码和密钥。GenAI message、system instruction、Prompt variable 和 tool definition 等内容字段不在白名单中,默认不会透传。

yaml
processors:
  transform/telemetry_redaction:
    error_mode: propagate
    trace_statements:
      - context: span
        statements:
          - keep_keys(attributes, ["gen_ai.operation.name", "gen_ai.provider.name", "gen_ai.request.model", "gen_ai.usage.input_tokens", "gen_ai.usage.output_tokens", "gen_ai.prompt.version", "gen_ai.tool.name", "error.type", "ai.outcome"])
          - set(name, "telemetry.span")
          - set(status.message, "")
      - context: spanevent
        statements:
          - keep_keys(attributes, ["exception.type", "error.type", "ai.outcome", "gen_ai.tool.name"])
          - set(name, "telemetry.event") where name != "exception"
    log_statements:
      - context: log
        statements:
          - keep_keys(attributes, ["gen_ai.operation.name", "gen_ai.provider.name", "gen_ai.request.model", "gen_ai.prompt.version", "gen_ai.tool.name", "error.type", "ai.outcome"])
          - set(body, "")

service:
  pipelines:
    traces:
      processors: [memory_limiter, transform/telemetry_redaction, batch]
    logs:
      processors: [memory_limiter, transform/telemetry_redaction, batch]

示例固定 span name 和非异常 event name、清空 status message 与 log body,并分别白名单化三类属性,因此 metadata-only 管线没有正文出口。异常只留类型,不留 message/stacktrace。外部可控的 resource 属性还需独立白名单;error_mode: propagate 使规则错误阻断出口。工具调用可用 MCP 审计日志设计 的摘要和指纹替代载荷。

上线前让含假邮箱、token、Cookie、GenAI 内容属性和秘密 log body 的 canary 穿过完整管线,在所有后端搜索标记。只有原文零命中且元数据可查才放行;测试还要确认每个 pipeline 都引用处理器。

留存矩阵必须覆盖副本

按用途定义期限:L0 聚合指标可留十三个月,L1 Trace 三十天,L2 授权证据最多七天,L3 零天。各环境使用同一分类。RAG 文档 ID 可保留,检索正文仍遵循 检索时访问控制。

资产清单覆盖索引、对象存储、队列、缓存、快照、备份、导出和供应商。删除任务按 expires_at 记录各后端计数、失败项和完成时间;备份不能逐条删时需密钥销毁或最长寿命,并在恢复后重跑删除。202 Accepted 不等于完成,须抽查对象不可访问。

日常值班只看 L0/L1;L2 需事件号、用途、审批与短时授权。搜索、导出和共享均审计。供应商 SaaS 若不能关闭训练、二次分析或跨区复制,就不发送 L2。

泄露时先截断复制链

发现 Prompt 或凭证进入后端时,立即停止相关遥测出口,禁用 debug 捕获、撤销凭证并冻结导出。按首次出现时间搜索 Collector、队列、索引、对象存储与备份,记录字段、租户、时间窗、访问者和副本,不能只删最先发现的一条 Trace。

以 metadata-only 配置回滚,在隔离后端重放 canary;敏感字段零命中后恢复 5% 流量,连续两个扫描周期通过再放量。不要设置 error_mode: ignore,泄露密钥轮换前也不能重开出口。

事后把泄露模式加入 schema 测试和端到端 canary,并让删除证明覆盖所有副本。默认拒绝、到期时间和可查询删除证据,才使 Trace 不会把业务故障扩大成长期数据风险。

延伸阅读

Related

相关推荐