我们选择使用 Jaeger API 进行跟踪。在那里,我们使用 docker 在本地设置了 Jaeger,如下所述。
sudo docker run -d --name jaeger \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
jaegertracing/all-in-one:latest
在 ServletContextListener
中,我们创建了如下所示的新配置。
@WebListener
public class TracingContextListener implements ServletContextListener {
@Inject
private io.opentracing.Tracer tracer;
public void contextInitialized(ServletContextEvent servletContextEvent) {
GlobalTracer.register(tracer);
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
@Produces
@Singleton
public static io.opentracing.Tracer jaegerTracer() {
return new Configuration("MyApplication", new Configuration.SamplerConfiguration(
ProbabilisticSampler.TYPE, 1),
new Configuration.ReporterConfiguration())
.getTracer();
}
}
现在一切正常,我可以在 http://localhost:16686 中看到跟踪
问题: 我想在外部环境中设置 Jager,并从另一个应用程序服务器进行连接(应用程序服务器在主机模式下在 Wildfly 10 docker 上运行)。将来,Jaeger 实例可能会被多个服务器实例用于跟踪。
查看了下面提到的来源和各种引用资料后,我尝试了以下选项。但它始终连接到本地。我也尝试了各种端口,例如 5775、6831、6832,但结果是相同的。
return new Configuration("MyApplication", new Configuration.SamplerConfiguration(
ProbabilisticSampler.TYPE, 1, "server2.mycompany.com:5778"),
new Configuration.ReporterConfiguration())
.getTracer();
此外,我还尝试将 JAEGER_ENDPOINT 和 JAEGER_SAMPLER_MANAGER_HOST_PORT 设置为环境变量。但失败了。
合而为一reference我发现“Jaeger 客户端库期望 jaeger-agent 进程在每个主机上本地运行...”。
这是否意味着我无法以 cebtrelized 方式使用它,并且我需要在每个应用程序服务器实例中设置 Jaeger?否则怎么办?
最佳答案
宾果游戏!
我们需要如下设置 ReporterConfigurations。以前我的都是默认的,这就是为什么它总是连接到本地。
return new Configuration("MyApplication",
new Configuration.SamplerConfiguration(ProbabilisticSampler.TYPE, 1, "server2.mycompany.com:5778"),
new Configuration.ReporterConfiguration(false, "server2.mycompany.com",6831,1000,100))
.getTracer();
更好的是,您可以从环境创建配置,如下所示,提供如下环境变量
return Configuration.fromEnv().getTracer();
您可以在运行 docker 容器时提供此信息
-e JAVA_OPTS="
-DJAEGER_SAMPLER_TYPE=probabilistic -DJAEGER_SAMPLER_PARAM=1 -DJAEGER_SAMPLER_MANAGER_HOST_PORT=server2.mycompany.com:5778 -DJAEGER_REPORTER_LOG_SPANS=false -DJAEGER_AGENT_HOST=server2.mycompany.com -DJAEGER_AGENT_PORT=6831 -DJAEGER_REPORTER_FLUSH_INTERVAL=1000 -DJAEGER_REPORTER_MAX_QUEUE_SIZE=100 -DJAEGER_SERVICE_NAME=MyApplicationNameX
" ....
关于java - 如何在java中更改Jaeger API的主机和端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51719575/