我遇到了一个很大的问题,困扰了3天。
我在远程服务器上使用docker swarm。 在同一网络NetA和堆栈StackA中有20个微服务。
现在,我想将Zipkin和Sleuth添加到我的微服务中以跟踪所有请求。
所有微服务均由docker-compose文件制成,如下所示:
version: '3'
services:
myservice1:
image: myImage1
depends_on:
- myService2
- myService3
ports:
- "8081:80"
environment:
- TZ=Europe/Warsaw
myservice3:
image: myImage2
environment:
- profile=${MY_PROFILE}
- TZ=Europe/Warsaw
...
现在的问题是-如何添加Zipkin服务器?
我已经从Docker Hub Image中添加了Zipkin服务器。
现在我的ZIpkin服务是: -在单独的网络ZIPN中 -在单独的堆栈ZIPST中
我应该如何通过所有微服务发送数据到Zipkin? 我应该在属性文件中发送什么URL: spring.zipkin.base-url = http://zipkinserver_network_zipkin_server:9411/
也许是: -容器名称(如my_zipkin_server)-但是我使用了swarm,因此容器名称会动态更改? -网络名称?
我在Zipkin容器中添加了一个额外的网络NetA,但它没有解决我的问题-Zipkin UI中没有任何痕迹。
请帮助我,我花了4天的时间解决此问题,但没有成功。
Zipkin服务器应放在单独的堆栈中,因为它将由不同的应用程序使用。
Zipkin工作时只有一种情况:当我设置Zipkin容器名称时:
spring.zipkin.base-url=http://zipkinserver_container_name:9411/
答案 0 :(得分:1)
首先指定您自己的覆盖网络(请参见下面的代码底部)并将其用于您的服务。
version: '3'
services:
myservice1:
image: myImage1
depends_on:
- myService2
- myService3
ports:
- "8081:80"
environment:
- TZ=Europe/Warsaw
networks:
- backbone
myservice3:
image: myImage2
environment:
- profile=${MY_PROFILE}
- TZ=Europe/Warsaw
networks:
- backbone
networks:
backbone:
driver: overlay
然后在用于其他服务(例如ZIpkin)的撰写文件中,将backbone
网络添加到其列表中。例如:
version: '3'
services:
ZIpkin:
image: myZImage
networks:
- ZIPN
- backbone
networks:
backbone:
external:
name: PROJ_backbone
请注意,在第一个撰写文件之外,您需要为网络的 project 名称添加前缀。除非你设置环境变量COMPOSE_PROJECT_NAME
这将是撰写文件所在的目录名。做一个docker network ls
找出网络使用的全名。
答案 1 :(得分:0)
好的,所以我仅使用docker-compose文件解决了我的问题。 通过Portainer,我将我的第二个docker-compose文件粘贴到了Stack部分(创建了新Stack):
version: '3'
services:
my_name_zipkin: --> THIS NAME SHOULD WE USE WHEN WE'D LIKE TO COMMUNICATE WITH CONTAINER
image: openzipkin/zipkin
ports:
- "9411:9411"
networks:
- zipkin
- my_old_network_with_services
networks:
zipkin:
my_old_network_with_services:
external: true
现在,我们应该使用“ my_name_zipkin”名称与此服务进行通信。服务名称是我们用于在容器之间进行通信的名称。
因此在属性文件中设置:
spring.zipkin.base-url=http://zipkin:9411/