Apache Camel集成OpenTelemetry导致ELK Stack日志事件重复的问题咨询
Apache Camel集成OpenTelemetry导致ELK Stack日志事件重复的问题咨询
大家好,我现在碰到了一个棘手的问题:在使用Apache Camel搭配OpenTelemetry的ELK Stack环境里,日志在控制台显示完全正常没有重复,但同步到Elasticsearch/Kibana后,每条日志消息都会出现两次,只是元数据细节略有不同。下面是具体的情况说明:
环境信息
- Spring Boot 3.5.4
- Apache Camel 4.13.0
- OpenTelemetry Java Agent 2.9.0
- Elastic Stack 9.x(搭配独立APM Server)
- Java 21(GraalVM)
依赖配置(build.gradle)
ext { set('apacheCamelVersion', "4.13.0") set('opentelemetryAgentVersion', "2.9.0") } dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-web' implementation "org.apache.camel.springboot:camel-spring-boot-starter" implementation "org.apache.camel.springboot:camel-google-pubsub-starter" implementation "org.apache.camel.springboot:camel-opentelemetry2-starter" // ... 其他依赖 }
应用配置(application.yml)
camel: opentelemetry2: enabled: true # 当设置为FALSE时,没有重复日志,但MDC中的trace-ids也会丢失 main: useMdcLogging: true mdcLoggingKeysPattern: "*"
问题详情
当camel.opentelemetry2.enabled=true时,ELK中就会出现重复的日志条目。下面是同一条日志消息对应的两个“近似相同”事件的差异对比:
--- Event A (实际业务日志)
+++ Event B (Camel自动生成的框架事件)
{
- "@timestamp": "2025-08-19T20:29:47.081Z",
- "@timestamp": "2025-08-19T20:29:47.080Z",
"event": {
"dataset": "apm.app.my_app",
- "severity": 9
- "kind": "event"
},
"labels": {- "message": "Receive 3/3: Message processed successfully",
"process_runtime_description": "GraalVM..."
},
- "message": "Receive 3/3: Message processed successfully",
- "message": "log",
"service": {
"framework": {
- "name": "receive-route"
- "name": "camel"
}- },
- "url": {
- "original": "pubsub:demo-sub"
}
}
能明显看到,一个是我业务代码输出的实际日志(Event A),另一个是Camel OpenTelemetry集成自动生成的框架事件(Event B),两者时间戳差了1毫秒,元数据字段也有不少区别。
已尝试的解决方案
- 关闭Camel OpenTelemetry集成:把
camel.opentelemetry2.enabled设为false,这样确实没有重复日志了,但同时MDC里的trace-ids也完全消失了,这不符合我需要链路追踪的需求。 - 添加路由排除规则:在配置里加了
exclude-patterns: "log:*,direct-vm:*,direct:*",但对这些重复的框架事件完全没有效果。
我的疑问
有没有办法既能阻止Camel的OpenTelemetry集成生成这些重复的“框架事件”,又能保留trace-id在MDC中的传播能力?
- 有没有对应的配置项可以单独禁用Camel的事件生成功能,但保留MDC的trace-id填充逻辑?
- 或者我是不是应该放弃Camel的自动集成,改用OpenTelemetry Java Agent的API来手动处理MDC的trace-id注入?
内容来源于stack exchange
相关产品推荐
相关产品推荐

