You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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毫秒,元数据字段也有不少区别。

已尝试的解决方案

  1. 关闭Camel OpenTelemetry集成:把camel.opentelemetry2.enabled设为false,这样确实没有重复日志了,但同时MDC里的trace-ids也完全消失了,这不符合我需要链路追踪的需求。
  2. 添加路由排除规则:在配置里加了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:34:30