Приложение Instrument Spring-Boot, которое выполняется в контейнере Docker с трассировкой Jaeger

Я запускаю приложение Spring-Boot в док-контейнере и хочу оснастить его OpenTracing с помощью клиента Jaeger из Uber.

Для инструментария я использую веб- библиотеку OpenTracing Spring в сочетании с клиентом Jaeger.

Следующий фрагмент кода настраивает трассировщик в приложении:

@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

Но когда я оборачиваю приложение Spring-Boot внутри контейнера Docker следующим файлом docker-compose и снова запускаю клиент Jaeger, я не вижу никаких следов.

version: '2'

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

После этого я попытался объявить докер-контейнер Jaeger в том же файле docker-compose и добавил ссылку из 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.

1 ответ

Но когда я оборачиваю приложение Spring-Boot внутри контейнера Docker следующим файлом docker-compose и снова запускаю клиент Jaeger, я не вижу никаких следов

Это связано с тем, что клиент Jaeger по умолчанию отправляет пролеты через UDP агенту по адресу localhost, Когда ваше приложение работает в контейнере Docker, ваш localhost есть сам контейнер, так что пролеты потеряны.

Поскольку вы связываете контейнер Jaeger с вашим приложением, вы можете решить проблему с помощью экспорта env var JAEGER_AGENT_HOST в jaeger,

Другие вопросы по тегам