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

如何在Keycloak日志中添加traceId?配置问题求助

Keycloak日志显示TraceId问题解决

问题诊断

从日志输出看,spanId和traceId字段为空,说明OpenTelemetry的上下文没有被注入到日志MDC(映射诊断上下文)中。你的配置存在两个核心问题:

  1. 选用的opentelemetry-logback组件不适用于Keycloak 18基于的JBoss Logging框架;
  2. 自定义模块依赖不完整,且未配置上下文传播逻辑。

推荐解决方案(使用OpenTelemetry Java Agent)

这是最简单可靠的方式,Java Agent会自动完成链路追踪的Instrumentation、上下文传播和MDC注入:

1. 下载OpenTelemetry Java Agent

选择与你现有OpenTelemetry版本匹配的Agent(示例为1.9.2版本):

curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.9.2/opentelemetry-javaagent-all.jar -o opentelemetry-javaagent.jar

2. 修改Keycloak启动参数

启动时添加JVM参数,启用Agent并配置MDC注入:

java -javaagent:/path/to/opentelemetry-javaagent.jar \
     -Dotel.traces.exporter=otlp \
     -Dotel.metrics.exporter=none \
     -Dotel.logs.exporter=none \
     -Dotel.resource.attributes=service.name=keycloak \
     -Dotel.instrumentation.jboss-logging.mdc.enabled=true \
     -jar keycloak-18.0.0/bin/standalone.sh -c standalone-ha.xml
  • -Dotel.instrumentation.jboss-logging.mdc.enabled=true:关键参数,自动将trace_id和span_id注入到JBoss Logging的MDC中,与你日志格式中的变量名完全对应。

3. 优化日志格式(可选)

移除格式中未使用的冗余变量,保持简洁:

<formatter name="COLOR-PATTERN">
    <pattern-formatter pattern="spanId: %X{span_id} traceId: %X{trace_id} %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] %s%e%n"/>
</formatter>

备选方案(手动配置模块,不推荐)

如果必须手动配置模块,需补充依赖并完善上下文配置:

1. 完善自定义模块

补充缺失的OpenTelemetry核心依赖,并添加模块间依赖声明:

<module name="io.opentelemetry.opentelemetry-logback" xmlns="urn:jboss:module:1.0">
    <resources>
        <resource-root path="opentelemetry-logback-1.0-1.9.2.jar"/>
        <resource-root path="opentelemetry-api-1.9.1.jar"/>
        <resource-root path="opentelemetry-context-1.9.1.jar"/>
        <resource-root path="opentelemetry-instrumentation-api-1.19.2.jar"/>
        <resource-root path="opentelemetry-sdk-1.9.1.jar"/>
        <resource-root path="opentelemetry-semconv-1.9.1.jar"/>
    </resources>
    <dependencies>
        <module name="org.jboss.logging"/>
        <module name="org.slf4j"/>
        <module name="javax.api"/>
    </dependencies>
</module>

2. 初始化OpenTelemetry上下文

需要编写自定义启动类,手动初始化TracerProvider并确保上下文在请求线程中传播,这一步需要打包为Keycloak扩展部署,复杂度较高。

验证

启动Keycloak后发起认证请求,查看日志即可看到填充完整的spanId和traceId。

内容的提问来源于stack exchange,提问作者Rasool Ghafari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:45:55