Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jaeger跟踪在Docker容器中执行的Instrument Spring引导应用程序_Spring_Docker_Spring Boot_Opentracing_Jaeger - Fatal编程技术网

使用Jaeger跟踪在Docker容器中执行的Instrument Spring引导应用程序

使用Jaeger跟踪在Docker容器中执行的Instrument Spring引导应用程序,spring,docker,spring-boot,opentracing,jaeger,Spring,Docker,Spring Boot,Opentracing,Jaeger,我正在docker容器中运行Spring Boot应用程序,并希望使用Uber的Jaeger客户端使用OpenTracing对其进行测试 对于插装,我将库与客户端结合使用 以下代码段配置应用程序中的跟踪程序: @Bean public io.opentracing.Tracer jaegerTracer() { return new Configuration("hello_service", new Configuration.SamplerConfiguration(Probabil

我正在docker容器中运行Spring Boot应用程序,并希望使用Uber的Jaeger客户端使用OpenTracing对其进行测试

对于插装,我将库与客户端结合使用

以下代码段配置应用程序中的跟踪程序:

@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容器,并添加了从演示服务到Jaeger服务的链接:

但我还是看不到Jaeger客户端的任何痕迹

几个小时来,我尝试了不同的方法,但至今没有取得任何进展,如果有人能帮助我,我将不胜感激

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

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

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


当您将Jaeger容器与应用程序链接时,您可能希望通过将env var Jaeger_AGENT_主机导出到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"