Приложение Instrument Spring-Boot, которое выполняется в контейнере Docker с трассировкой Jaeger - PullRequest
0 голосов
/ 01 мая 2018

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

Для инструментария я использую библиотеку OpenTracing Spring Web в сочетании с клиентом 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 Ответ

0 голосов
/ 15 октября 2018

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

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

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

...