【问题标题】:Instrument Spring-Boot application that's executed in Docker container with Jaeger tracing使用 Jaeger 跟踪检测在 Docker 容器中执行的 Spring-Boot 应用程序
【发布时间】:2018-05-01 14:20:35
【问题描述】:

我在 docker 容器内运行 Spring-Boot 应用程序,并希望使用 Uber 的 Jaeger 客户端通过 OpenTracing 对其进行检测。

对于检测,我将OpenTracing Spring Web 库与Jaeger 客户端结合使用。

以下代码 sn -p 在应用程序中配置跟踪器:

@Bean
public io.opentracing.Tracer jaegerTracer() {
    return new Configuration("hello_service", new Configuration.SamplerConfiguration(ProbabilisticSampler.TYPE, 1),
            new Configuration.ReporterConfiguration())
            .getTracer();
}

当我运行应用程序(不在 Docker 容器内)并使用以下命令启动 Jaeger 时,我可以看到跟踪:

docker run -d -e
COLLECTOR_ZIPKIN_HTTP_PORT=9411
-p 5775:5775/udp
-p 6831:6831/udp
-p 6832:6832/udp
-p 5778:5778
-p 16686:16686
-p 14268:14268
-p 9411:9411
jaegertracing/all-in-one:latest

但是,当我使用以下 docker-compose 文件将 Spring-Boot 应用程序包装在 Docker 容器中并再次启动 Jaeger 客户端时,我看不到任何痕迹。

version: '2'

services:
        demo:
                build: opentracing_demo/.
                ports: 
                        - "8080:8080"

之后我尝试在同一个 docker-compose 文件中声明 Jaeger docker 容器,并添加了从 demo 服务到 jaeger 服务的链接:

version: '2'

services:
    demo:
            build: opentracing_demo/.
            ports: 
                    - "8080:8080"
            links:
                    - jaeger
    jaeger: 
            image: jaegertracing/all-in-one:latest
            ports:
                    - "5775:5775/udp"
                    - "6831:6831/udp"
                    - "6832:6832/udp"
                    - "5778:5778"
                    - "16686:16686"
                    - "14268:14268"
                    - "9411:9411"

但我在 Jaeger 客户端中仍然看不到任何痕迹。

几个小时以来,我尝试了不同的方法,但到目前为止没有取得任何进展,如果有人可以帮助我,我将不胜感激!

你可以在GitHub找到我的演示项目。

【问题讨论】:

    标签: spring docker spring-boot opentracing jaeger


    【解决方案1】:

    但是当我使用以下 docker-compose 文件将 Spring-Boot 应用程序包装在 Docker 容器中并再次启动 Jaeger 客户端时,我看不到任何痕迹

    这是因为默认情况下,Jaeger 客户端将通过 UDP 将 span 发送到位于 localhost 的代理。当您的应用程序在 Docker 容器中运行时,您的 localhost 存在容器本身,因此跨度丢失。

    当您将 Jaeger 容器与您的应用程序链接时,您可能希望通过将环境变量 JAEGER_AGENT_HOST 导出到 jaeger 来解决它。

    【讨论】:

    • 感谢您的回答,这就是我最终解决问题的方法!
    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多