如何从Log4J2日志中移除Dynatrace遥测数据?
问题解决思路:Dynatrace追踪数据意外注入SpringBoot日志JSON字段
核心原因
这是OpenShift集群中Dynatrace的自动注入组件(如OneAgent或OpenTelemetry自动注入webhook)通过字节码增强或日志框架拦截,对logback JSON Layout的pattern解析结果进行了自动追加追踪信息,和应用代码配置无关。
解决方案
1. 检查并禁用集群级的Dynatrace自动注入
- 查看Pod的Annotations,确认是否存在Dynatrace自动注入标记(如
dynatrace.com/inject: true或oneagent.dynatrace.com/inject: true) - 在Deployment的Pod模板中添加反注入Annotation,阻止Dynatrace agent注入:
metadata: annotations: dynatrace.com/inject: "false" - 若集群使用OpenTelemetry Collector自动注入,添加
instrumentation.opentelemetry.io/inject-java: "false"来禁用
2. 替换日志JSON Layout的pattern resolver
对于不需要动态解析的静态字段(如nanoOfSecond),改用value resolver替代pattern resolver,避免被拦截追加:
"nanoOfSecond": { "$resolver": "value", "value": "0", "stackTraceEnabled": false }
对于需要处理异常的dumpanalysis字段,尝试用throwable resolver结合replace resolver,绕过pattern解析:
"dumpanalysis": { "$resolver": "replace", "target": { "$resolver": "throwable", "pattern": "%throwable{separator(|)}" }, "regex": "\t", "replacement": " ", "stackTraceEnabled": false }
3. 临时禁用日志追踪信息注入
如果无法修改集群配置,可通过环境变量禁用Dynatrace的日志注入功能(仅当agent已注入时有效):
DT_DISABLE_LOG_INJECTION=true
将该环境变量添加到Deployment的容器环境变量中。
内容的提问来源于stack exchange,提问作者Tocchetto
相关产品推荐
相关产品推荐

