问题标签 [opentracing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
480 浏览

elasticsearch - 如何在 Windows Server 中使用 ElasticSearch 配置 Jaeger 收集器

我正在尝试在一台服务器上设置 jaeger-collector,而 jaeger-agent 在另一台服务器上运行。如果我运行 exe jaeger-all-in-one,一切都会按预期工作(在内存中使用)。为了查看 ES 可用的选项,我无法运行帮助命令。当我运行 jaeger-collector --help 时,它只显示与 cassandra 相关的标志。如何检查弹性搜索的具体细节。现在,我的要求是指定和弹性搜索 url。我已经设置了环境变量 SPAN_STORAGE_TYPES 和 ES_SERVER_URLS,但是通过要求它接受这些环境变量,找不到如何运行 jaeger-collector.exe。

谢谢,米努

0 投票
1 回答
1140 浏览

spring - 如何使用 spring-cloud starter 添加标签或行李?

我正在尝试将标签或行李添加到 OpenTracing 跟踪。我正在通过@Beans 创建跟踪器,但无法弄清楚在使用 cloud-starter 附带的自动配置时如何引用活动跨度。

使用这个依赖

我试过这个

和这个

两者都会导致 NPE。即使尝试记录 span 或 tracer 对象也会给我一个 NPE,所以我似乎不需要正确的模式来与之交互。

以下是跟踪器的设置方式。

更多信息...

查看定义跨度装饰器的opentracing-spring-web-contrib 代码,这是我从中获取默认跨度和关联标签的地方。但是,如果执行 restTemplate 是触发启动活动跨度的拦截的原因,如何添加自定义标签/行李?我认为我不应该直接与 spanDecorator 交互。

还有更多信息...

还尝试在使用opentracing-contrib-okhttp时添加行李。跟踪效果很好,但在使用基于拦截器的自动跟踪器时无法弄清楚如何添加袋装。

0 投票
0 回答
490 浏览

vert.x - 基于事件总线的 Opentracing 传播

尝试为 opentracing Tracer 设置 java-vertx-web,按照自述文件在https://github.com/opentracing-contrib/java-vertx-web完成配置

TracingHandler从使用instart()方法 设置的 routingContext 重新激活 spantracer.activateSpan(CustomTracingHandler.serverSpan(routingContext));

此时,路由处理程序中的所有日志和跟踪都可以正常工作。

当在事件总线上发送消息时,跨度不活动的问题会重新出现。

尝试添加拦截器以注入标头,但跨度仍然不再处于活动状态。

有没有办法重新激活消息接收器上的跨度?

0 投票
1 回答
1006 浏览

nginx - Nginx:如何生成 X-B3-SpanId 16 个随机字节用于跟踪

我正在尝试从 nginx 生成 zipkin 跟踪 ID,以便能够从 nginx 跟踪到应用程序。为此,我想了解如何生成 16 个随机字节用于 X-B3-SpanId,因为 $request_id 生成 32 个字节(可用于 X-B3-TraceId)。

0 投票
1 回答
5436 浏览

spring - 使用 WebClient 将 Spring Webflux 应用程序中收到的请求标头传播到下游服务

我有两种 Webflux 应用程序,基于注释的和基于路由的。这些应用程序使用一组标头调用,其中一些(开放跟踪)我需要在下游调用中使用WebClient.

如果这些是普通的 Spring WebMvc 应用程序,我将使用过滤器将选定的标头保留在 aThreadLocal中,在拦截器中访问它RestTemplate以将它们发送到后续服务并清除ThreadLocal.

在 WebFlux 应用程序中复制这种行为的正确方法是什么?

0 投票
2 回答
1567 浏览

microservices - 在 gRPC 服务间通信中传播 traceID

我正在开发一些 gRPC 微服务,并使用上下文传递任何标头和元数据。我正在使用 opentracing 进行跟踪,并且我的一个 gRPC 服务调用了其他 gRPC 服务,此时我在传播上下文时遇到了问题,因为它没有保留元数据和 traceID。我的代码如下

在上面的代码中,我正在调用服务D,我必须使用我可以接受的元数据重新创建一个新的上下文,但我不确定如何将 tracIds 传播到服务D

0 投票
0 回答
157 浏览

microservices - opentracing:跟踪浏览器中的用户操作

当用户单击一个按钮时,是否可以在浏览器中创建一个跨度,并跟踪浏览器作为子跨度对后端的每次调用?

是否有用于开放跟踪的 javascript 库(不是 node.js),它将跨度从浏览器传播到后端服务?

一个例子:

  • 用户点击浏览器中的“做一些昂贵的事情”按钮
  • 创建了一个跨度(我猜是手动的)
  • 一些业务逻辑在浏览器的 javascript 中运行,例如一些复杂的验证
  • 业务逻辑需要对不同的微服务进行 3 次调用
  • 因此,创建了三个子跨度

应该可以将三个子跨度可视化为导致它们的原始点击的一部分。

如果出现以下情况,这将是一个奖励:

  • 还将跟踪 Javascript 运行所花费的时间,以确定浏览器中性能不佳的 Javascript
  • 如果还跟踪浏览器的内存和 cpu 使用情况,那就太棒了,但 API 限制目前似乎不允许这样做。
0 投票
2 回答
2218 浏览

.net-core - .NET 核心中的 OpenTracing,而不依赖于特定的解决方案库

为了登录我们的微服务应用程序,我们只需登录到 stdout/console,docker logging 驱动程序会处理并将这些日志重定向到某个地方,例如 gelf/logstash、fluentd 等。基本上,我们遵循12 个因素的日志记录指南。这意味着开发应用程序代码的开发人员不需要了解底层日志记录解决方案(例如 Elasticsearch、Graylog、Splunk 等)——这完全是一个操作/配置问题。理论上,我们应该能够在不更改任何代码的情况下更改底层日志记录解决方案。

我想要类似的痕迹,我的研究使我找到了 OpenTracing。开发人员不需要了解底层跟踪解决方案(例如 Jaeger、Zipkin、Elastic APM 等)和日志记录;理论上,我们应该能够在不更改任何代码的情况下更改底层跟踪解决方案。

我已经使用opentracing/opentracing-csharpjaegertracing/jaeger-client-csharp库成功地获得了一个 .NET 核心 POC 向 Jaeger 发送跟踪信息。

我仍在尝试完全了解 OpenTracing,但我想知道是否有办法将跟踪发送到符合 OpenTracing 的 API,而不必硬依赖 Jaeger 等特定解决方案(即 jaeger-client -csharp 库)。根据我的理解,OpenTracing 只是一个标准。难道我不需要 jaeger-client-csharp 库就可以使用一些采样选项配置 OpenTracing 端点吗?还是 jaeger-client-csharp 实际上不是 Jaeger 特定的,实际上可以将跟踪发送到任何 OpenTracing API?

示例配置如下所示,它使用了 jaeger 客户端库:

0 投票
1 回答
953 浏览

.net-core - 使用 MassTransit.RabbitMQ 将 OpenTracing TraceIds 从发布者传播到消费者

使用 MassTransit.RabbitMQ v5.3.2 和 OpenTracing.Contrib.NetCore v0.5.0。

我可以使用 MassTransit 将事件发布和消费到 RabbitMQ,并且我已经让 OpenTracing 与 Jaeger 一起工作,但我还没有设法让我的 OpenTracing TraceIds 从我的消息发布者传播到我的消息消费者 - 发布者和消费者跟踪有不同TraceId。

我已经使用以下过滤器配置了 MassTransit:

我实际上不确定侦听器名称应该是什么,因此是“测试”。该文档没有 OpenTracing 的示例。无论如何,这会在发布端的活动跟踪中添加一个“发布消息”跨度,并在消费者端自动设置一个“消费消息”跟踪;但是它们是单独的痕迹。我将如何将其整合到一个单一的跟踪中?

我可以使用以下方法设置 TraceId 标头:

但是我将如何配置我的消息使用者,使其成为根 TraceId?有兴趣看看我如何做到这一点,或者是否有不同的方法......

谢谢!

0 投票
1 回答
227 浏览

go - 在一个 docker 容器中打开代码并在另一个容器中进行 jaegertracing

我有我的 go 项目,它在一个 docker 容器中发送 OpenTracing 跨度,并使用以下命令在它自己的容器中运行 jaegertracing:

当我运行以下 go test 代码时,我可以在 jaegerui 中看到它们:

但不是当代码在单独的 docker 容器中执行时。

我需要在我的 go app docker 容器中传递什么想法?