Приложение 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
,