gpt4 book ai didi

java - 将跟踪从Docker容器发送到在VM中运行的Jaeger Docker容器的问题

转载 作者:行者123 更新时间:2023-12-02 19:48:23 25 4
gpt4 key购买 nike

我已将opentracing添加到我的Web应用程序中,并且正在使用Jaeger多合一Docker镜像作为收集器。
我正在Windows 10(hyper-v)上运行docker,并且正在使用Jaeger Java客户端。
当我在主机上本地测试Web应用程序时,它会将跟踪成功发送到Jaeger收集器docker实例。
但是,当我在另一个Docker容器中运行Web应用程序时,Jaeger UI中未记录任何跟踪。

我已经在同一个docker网络上尝试了两个容器,但均未成功。
docker 容器中的Web应用程序可以毫无问题地访问 docker 中包含DB和ETCD服务器等其他服务。

我以为我可能使用了错误的端口,但是考虑到它可以在主机环境中工作的事实,我假设它们是正确的,并且这是一个docker配置问题。
我还将JAEGER_SAMPLER_TYPE环境变量设置为const,并将JAEGER_SAMPLER_PARAM设置为1以确保记录所有跟踪。

编辑-当我查看指标时,Jaeger似乎正在接收跨度。我对应用程序的每次调用都会使此计数增加一。

jaeger_spans_received_total{debug="false",format="proto",svc="datastore",transport="grpc"} 35
jaeger_spans_saved_by_svc_total{debug="false",result="ok",svc="datastore"} 35
jaeger_traces_received_total{debug="false",format="proto",sampler_type="const",svc="datastore",transport="grpc"} 35
jaeger_traces_saved_by_svc_total{debug="false",result="ok",sampler_type="const",svc="datastore"} 35

我还尝试了Yuri Shkuro建议的示例项目 Hotrod,该项目涉及某人的类似问题。与上述结果完全相同。指标显示已接收跨度,但UI中未显示任何内容。
编辑2 -我将其范围缩小到在hyper-v Windows 10 VM中发生的情况。

任何帮助,将不胜感激。

谢谢

192.168.0.15是主机
# deployment of jaeger
docker run --name jaeger-collector -d -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 -p 16686:16686 -p 14268:14268 --network mynetwork jaegertracing/all-in-one:latest

# deployment of app
docker run --add-host etcd-01:192.168.0.15 --name datastore -d -it --rm -p 8030:8080 --network mynetwork datastore:latest

在Java中设置Jaeger跟踪器
 private static io.opentracing.Tracer getJaegerTracer() {

Configuration.SamplerConfiguration samplerConfig = Configuration.SamplerConfiguration.fromEnv().withType("const").withParam(1);

Configuration.SenderConfiguration senderConfig = Configuration.SenderConfiguration.fromEnv()
.withAgentHost("192.168.0.15")
.withAgentPort(6831);

Configuration.ReporterConfiguration reporterConfig = Configuration.ReporterConfiguration.fromEnv().withLogSpans(true).withSender(senderConfig);
Configuration config = new Configuration(DatastoreConstants.SERVICE_NAME).withSampler(samplerConfig).withReporter(reporterConfig);


return config.getTracer();
}

最佳答案

谢谢尤里。是的,这是一个时钟问题。
尽管主机(VM)会在每次暂停时更新其时钟,但Windows的docker却没有。时区对于所有容器都是正确的,但时间完全相同。这必须是docker内部时钟,似乎仅在启动时更新一次,而不在每个新容器启动时更新。尽管所有容器时钟的输出量相同,但Windows主机是正确的。
消息已到达,但时间/日期不在UI显示的时间范围窗口之内。如果我设置自定义日期范围,则可以确定它们会出现。容器必须已经连续几天停下来启动了几天,而不仅仅是几个小时。

关于java - 将跟踪从Docker容器发送到在VM中运行的Jaeger Docker容器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62273414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com