OpenMed OpenTelemetry追踪详解:无PHI日志环境下的分布式追踪完整指南

OpenMed OpenTelemetry追踪详解:无PHI日志环境下的分布式追踪完整指南 OpenMed OpenTelemetry追踪详解无PHI日志环境下的分布式追踪完整指南【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmedOpenMed是一款本地优先local-first的医疗隐私 AI 框架支持 2,200 医学模型与 21 种语言让临床命名实体识别NER与 HIPAA PII 去标识化 100% 在设备端运行——患者数据永不离开你的网络。而它的OpenTelemetry 分布式追踪功能则让你在**不泄露任何患者隐私信息PHI**的前提下完整观测 REST 服务请求与核心脱敏流水线的健康状况与延迟。️为什么“分布式追踪”在医疗场景下如此棘手传统分布式追踪Distributed Tracing会把请求体、报错堆栈、异常消息都塞进 span 属性里。这在普通 Web 服务中没问题但面对病历文本⚠️ 患者姓名、病历号、诊断文本一旦进入追踪系统就等于 PHI 外泄⚠️ OpenTelemetry 的默认行为是记录异常消息与堆栈而这些文本里可能藏着临床内容。OpenMed 的解法是一句话追踪信号只允许“数字和枚举”永远不允许“文本”。OpenMed 的两层追踪架构OpenMed 把可观测性拆成两个相互独立、各自 opt-in的层面层面源码位置追踪对象默认状态REST 服务追踪openmed/service/tracing.py每个 HTTP 请求及内部阶段 span关闭核心流水线可观测性openmed/core/telemetry.py10 个固定脱敏阶段 span 直方图关闭两层互不牵连启用 REST 追踪不会自动开启流水线指标反之亦然。官方文档分别在 docs/serving/tracing.md 与 docs/core-observability.md 中有完整说明。快速启用 OpenTelemetry 追踪的 3 个步骤第 1 步安装可选依赖。核心包默认不含 OpenTelemetry按需安装即可# REST 服务追踪 uv pip install -e .[hf,service] # 核心流水线追踪 uv pip install -e .[otel]第 2 步设置环境变量启用追踪。以 REST 服务为例指向你自己的 OTLP 采集端点OPENMED_SERVICE_OTLP_ENDPOINThttp://otel-collector:4318/v1/traces \ uvicorn openmed.service.app:app --host 127.0.0.1 --port 8080只要设置了OPENMED_SERVICE_OTLP_ENDPOINTOpenMed 就视为你显式开启了追踪也可以用OPENMED_SERVICE_TRACING_ENABLEDtrue/false明确控制。核心流水线则通过OPENMED_TELEMETRY_ENABLEDtrue或构造函数Pipeline(telemetry_enabledTrue)开启。第 3 步把数据接到你自己的看板。OpenMed 只负责产生 span导出去向完全由你掌控——它可以写本地控制台也可以发往你私有网络里的 Collector绝不存在“电话回传”。 相关环境变量还有OPENMED_SERVICE_OTLP_HEADERS鉴权头与OPENMED_SERVICE_OTLP_TIMEOUT_SECONDS默认 10 秒。一次请求的 span 长什么样每个被追踪的 HTTP 请求会生成一个openmed.service.request服务主 span模型类路由下还会挂上子 span例如openmed.service.analyze_pipeline、openmed.service.pii_deidentify_pipeline等阶段 span自动记录各阶段耗时。两个关键的“分布式”能力W3Ctraceparent传播上游网关如 API 网关、负载均衡器的 span 可以直接成为 OpenMed 请求 span 的父节点实现跨服务调用链拼接X-Request-ID关联现有请求关联 ID 会作为 span 属性附带方便你把追踪数据和操作日志对上号。无PHI属性白名单span 里能写什么、不能写什么这是整篇最值得记住的部分。openmed/service/tracing.py 内置了属性白名单_ALLOWED_ATTRIBUTE_KEYS任何不在白名单里的键都会被静默丢弃。✅ 允许写入 span 的路由模板、HTTP 方法与状态码、请求 ID、模型名输入长度/条数、批处理大小、实体数量有限的实体类别标签如PERSON、PHONE、ID_NUM这类规范分类名而非实体原文阶段名与阶段耗时毫秒。❌ 永远禁止出现的请求文本、响应文本、实体原文、替换映射、prompt客户身份信息、HTTP 头、查询串、原始路径参数异常消息与堆栈——失败时只标记openmed.stage.failedtrue绝不记录异常文本因为那里面可能包含临床内容。核心流水线层面同样严格执行这套契约span 名为固定的openmed.pipeline.stage属性只有阶段名、索引、计数、偏移量聚合值与耗时。详见 docs/security/no-raw-phi-logging.md 中定义的 OM-004 策略。观测 10 个固定阶段定位流水线性能瓶颈核心流水线固定拆成 10 个阶段每个阶段一个 span并记录 3 个直方图指标阶段职责简normalize文本规范化language_script语言/文字检测doc_type_section文档类型与分段deterministic_detectors规则型检测器日期、号码等fast_pii_model快速 PII 模型clinical_phi_model临床 PHI 模型span_arbitration实体区间仲裁policy_actions策略动作替换/掩码safety_sweep安全兜底扫描emit输出指标单位含义openmed.pipeline.stage.durationms阶段墙钟耗时openmed.pipeline.stage.span_count1该阶段产出的规范 span 数openmed.pipeline.stage.entity_count1阶段输出代表的实体数借助这三个指标你可以精准回答“慢在哪一步是规则检测器还是模型推理”——而指标标签只含固定阶段名基数可控、天然无 PHI。默认零遥测保证项目如何自我约束OpenMed 的底线承诺写在 docs/security/no-telemetry.md不收集任何遥测、不电话回传、运行时不发起出站网络调用连“默认开启可关闭”opt-out的开关都被明令禁止。这套保证由自动化测试守护tests/unit/test_no_telemetry.py 每次测试运行都会静态扫描全部源码发现任何分析 SDK 导入、回传主机字面量或 opt-out 环境变量即失败网络面清单锁定允许导入原始网络库的模块白名单新增联网代码未评审即挂测试运行时检查直接断言代表性的extract_pii deidentify路径不打开任何 sockettests/unit/core/test_pipeline_telemetry.py 则用合成数据验证追踪契约本身无 PHI 泄漏。上手前快速检查清单 ✅确认已按需安装service/otel可选依赖确认 OTLP 端点指向你自己基础设施内的采集器而非公网检查看板里 span 属性是否只出现白名单字段文本类字段出现即为异常跑一遍pytest tests/unit/test_no_telemetry.py tests/unit/core/test_pipeline_telemetry.py -q验证契约记住两条独立开关REST 层OPENMED_SERVICE_TRACING_ENABLED核心层OPENMED_TELEMETRY_ENABLED。总结OpenMed 用“属性白名单 默认关闭 测试硬约束”三件套把 OpenTelemetry 分布式追踪从 PHI 泄露的潜在通道变成了医疗场景下安全可用的性能诊断工具——追踪的每一步患者数据都留在你的设备上。【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考