- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在使用 Jaeger 和 OpenTracing 来跟踪我的 Spring Boot 微服务之间的请求。我已经设置了所有必要的配置并添加了依赖项:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
<version>2.0.3</version>
</dependency>
目前一切正常。我在我的 Jaeger UI 中看到了所有的痕迹和跨度,没问题。
但现在我面临着向特定跟踪添加新跨度的挑战,这已经完成了。可以这样想。客户端调用其中一项服务并开始跟踪。工作完成后,我在我的 Jaeger UI 中看到了痕迹。但是现在调用客户端想要向特定跟踪添加一些额外的跟踪数据。就像来自其他服务的跟踪信息一样,不在我的微服务范围内。我添加了一个过滤器,因此我可以提取跟踪 ID 并将其发送给客户端。现在客户端发出一个包含附加跟踪信息和跟踪 ID 的请求。然后应将这些信息作为附加跨度添加到已完成的跟踪中。
现在回答我的问题。有没有一种方法可以创建跨度并将其添加到跟踪中,而跟踪 ID 仅作为字符串?
我已经尝试过 Zipkin,我可以这样做:
Span span = new SpanBuilder()
.name(someName)
.traceId(traceId)
.parentId(traceId)
.id(someId)
.kind(Kind.CLIENT)
.build()
然后可以通过在端口 9411 上向我的 zipkin 服务器发出 POST 请求来添加该跨度,这神奇地将此跨度添加到具有给定 ID 的跟踪中。
使用 OpenTracing 我可以做到:
Span span = tracer.buildSpan(someName)
.asChildOf(**traceSpan**)
.withStartTimestamp(someTime)
.ignoreActiveSpan()
.start();
不幸的是,这种方法需要跨度形式的跟踪来创建新跨度作为该跟踪的子级。鉴于我只能提供跟踪 ID,我不知道如何获得该跟踪所需的跨度。我真的需要调用我的 Jaeger 查询来获取所需的跟踪跨度,还是有其他我没有想到的方法?
真的很想得到一些帮助。
干杯!
最佳答案
您需要将 trace-id 从一台服务器发送到另一台服务器。我将在此处列出一种实现代码的方法,假设您已经在服务 1 上创建了一个原始跨度并创建了一个跟踪器实例 (JaegerTracer)。
首先,您需要从 service1 的 span 中获取 span-id:
JaegerSpan span = tracer.buildSpan("service1")
String spanId = span.context().toTraceId()
现在,您可以将此字符串 (spanId) 传播到您的其他服务。例如:如果您使用的是 http/post 或 kafka,则需要遵循一些协议(protocol),例如:w3c .但是以根的方式
import io.jaegertracing.internal.JaegerSpan;
import io.jaegertracing.internal.JaegerSpanContext;
import io.jaegertracing.internal.propagation.TextMapCodec;
import io.jaegertracing.internal.propagation.TextMapCodec.Builder;
//...
// assuming you've extracted your trace-id as string from your messaging system
// kafka header, http header, grpc metadata, wherever...
TextMap carrier = new TextMapAdapter(Map.of("uber-trace-id", traceId));
TextMapCodec codec = New Builder().build();
// I guess this line answer your question (get spanContext from trace-id)
JaegerSpanContext sc = codec.extract(carrier);
JaegerSpan sp = tracer.buildSpan("service2").asChildOf(sc).start();
关于java - Spring Boot Jaeger 为给定的 TraceId 创建新的 Span,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60651104/
我在 Docker 中一体安装了 jaeger: docker run --rm --name jaeger -p 5775:5775/udp -p 6831:6831/udp -p 6832:683
Jaeger 提供 an all-in-one不使用大量内存的 Jaeger 开发设置的配置。 The instructions展示如何通过以下方式轻松安装: kubectl create -f ht
1、简介 1.1 Jaeger是什么 Jaeger 是受到 Dapper 和 OpenZipkin 启发的由 &
使用示例代码在 celery 4.1.1 中跟踪任务。每个 worker 运行: import logging from jaeger_client import Config import open
我购买了 Jaegers 标签 ( http://codecanyon.net/item/tabs-seo-mobile-friendly/3225560 ),因为它们看起来非常干净;然而,该网站的支
有什么方法可以将应用程序提供的标准日志和错误放入一个跨度中吗? 我知道我可以使用 span.LogKV() 或 span.LogFields() 发送一些日志,但这会使代码看起来很糟糕,而两者都有相同
我想将 istio 与 K8S 中现有的 jaeger 跟踪系统一起使用,我开始按照 the official link 安装 jaeger 系统。使用 cassandra 作为后端存储。然后通过 t
我正在尝试在 jaeger 中获取 mongo 日志。基本上我希望我的 jaeger 显示我的 mongo 应用程序错误。执行此操作的最佳方法是什么? 我尝试使用maven repo-opentrac
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 1年前关闭。 Improve t
我想在我的 Spring 应用程序中配置 Jaeger。不知怎的,我找不到合适的方法来做到这一点。几乎所有 Spring-Jaeger 相关文档都是针对 Spring Boot,其中大多数属性都是自动
我尝试在PHP项目中实现OpenTracing + Jaeger,遵循https://github.com/jonahgeorge/jaeger-client-php的“入门”示例 跟踪器,范围和范围
背景 我正在尝试在前端应用程序中进行跟踪。 我无法使用 @opentelemetry/exporter-jaeger自 I believe it is for Node.js back end app
我使用以下配置来设置Istio cat << EOF | kubectl apply -f - apiVersion: install.istio.io/v1alpha1 kind: IstioOpe
我将 jaeger 与 spring boot 一起使用来跟踪测试应用程序,有时我会在单线程跟踪中的跨度之间出现一些额外的空间或重叠,最多需要 20 毫秒。我对这个额外的空间感到困惑,因为这些跨度之间
我正在尝试在安装了 istio 的 minikube 上设置本地 k8s 集群,但我在使用 Jaeger 启用分布式跟踪时遇到了问题。我有 3 个微服务 A -> B -> C。我正在传播所需的所有
我尝试执行此 docker 命令以使用 elasticsearch 设置 Jaeger 代理和 jaeger 收集器。 sudo docker run \ -p 5775:5775/udp \ -p
在 Spring Boot 应用程序(目前只有一个)中,我通过添加依赖项来包含 jaeger opentracing-spring-jaeger-web-starter和下面的 bean @Bean
我将 Jaeger 与 Elasticsearch 结合使用,我想删除旧索引。我尝试了 jaeger-es-index-cleaner,请参阅 Remove old data : Remove old
我在学习tracing和 open-telemetry在 rust 中。我觉得有太多的概念和太多的 crate (至少在 Rust 中)看不到痕迹。 我写了一个简单的 lib 应用程序,它添加了两个
我正在设置一个概念验证,其中包含两个 ASP.NET Core 应用程序,这两个应用程序均使用 Jaeger 进行检测。演示它如何通过线路在服务之间传播跟踪。这两个应用程序都被部署到 Azure 应用
我是一名优秀的程序员,十分优秀!