问题标签 [distributed-tracing]

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 投票
2 回答
297 浏览

azure - 在 Azure 中实现分布式跟踪

我们正在使用逻辑应用、API 和 Azure Functions 的组合在 Azure 中构建集成。我们对从源到目的地的事务进行端到端跟踪,即分布式跟踪。我们需要能够跟踪自定义字段,例如 orderId。任何关于如何最好地实现这一点的建议、文章、示例、视频的指针都非常感谢。

0 投票
1 回答
237 浏览

trace - Linkerd 使用 OpenCensus 进行分布式跟踪

语境

我正在尝试使用 OpenCensus 和 Linkerd。尽管 Linkerd 可以选择在其命名空间中自动配置 OpenCensus 和 jaeger,但我不想使用它们。相反,我自己在名为“ops”的命名空间下独立部署了它们。

问题

  1. OpenCensus 收集器是否应该由 Linkerd 注入。

在官方文档的最后(正好是最后的第 4 行) ,它说,

确保 OpenCensus 收集器注入了 Linkerd 代理。

这是什么意思?
我应该将 linkerd sidecar 注入 OpenCensus 收集器 pod 吗?
如果是这样,为什么?

  1. 我应该按命名空间为 serviceaccount 名称添加后缀吗?

例如,假设我已经像这样配置了默认命名空间。

my-opencensus-collector位于ops命名空间中,因此我将其放在.ops其服务名称的末尾,结果为my-opencensus-collector.ops:12345. OpenCensus 收集器的专用服务帐户ops也存在于命名空间中。在这种情况下,我是否也应该将命名空间名称放在服务帐户名称的末尾?

哪一个是对的?

或者

谢谢!

0 投票
1 回答
122 浏览

distributed-tracing - 使用 W3C 跟踪上下文时如何从标头中找出跟踪范围之间的关系

我一直在阅读W3C Trace Context规范,但我无法通过仅查看请求中的标头来弄清楚如何获得跨度之间的子关系。

假设我正确理解了处理模型,第一个服务会生成traceparent,而后续服务会替换下游请求中parentId的。traceparent

所以服务 A 生成 atraceparent并向服务 B 发送请求:

服务 B 接收请求并每次更改服务 C 和服务 D 时向服务 C 和服务 D 执行两个下游请求parentId

最后traceparent,我的请求中有 3 个

很容易看出它们都属于 trace 0af7651916cd43dd8448eb211c80319c,但是如何弄清楚它们之间的父子关系呢?

我最初的想法是这是使用 完成tracestate的,但规范指出:

tracestate 使用由一组名称/值对表示的特定于供应商的数据扩展了 traceparent。在 tracestate 中存储信息是可选的。

0 投票
1 回答
515 浏览

opentracing - opentrace activeSpan 为空

我有一个旧应用程序,我试图在其中引入 opentrace。我没有更改单个方法,而是添加了 AOP/aspectJ 来添加跨度。但是当我尝试这样做时

在我的原始代码中, currentSpan 为空。

我想知道为什么 ?

这是我的代码方面/AOP。

这是我试图获取父跨度的旧代码。下面的方法被 AOP 覆盖,我可以在调试器中看到。

在此处输入图像描述

我想了解的是为什么它是 null ?我预计跨度将传播到方法调用链。

0 投票
1 回答
361 浏览

kubernetes - 在整个集群中传播传入服务网格的标头

我已经在集群istio上建立了一个启用的微服务架构。kubernetes

istio-ingressgateway的由 Cloudflare 代理。

后者,生成一个特定的header,即cf-ray支持对cloudflare相关问题的排查。

我的问题是如何启用我的服务网格,即在边缘(istio-ingressgateway即)和所有边车中传播cf-rayid 标头。

istioVirtualService的关于资源的文档在about部分中列出了 3 个可用操作,HeaderOperations即和。setaddremove

add并且remove似乎与我想要执行的操作更无关,但set似乎也要求设置一个特定的值。

我只想要一个直通/传播类型的操作,istio在看到cf-ray标题时,将通过它

a)在集群中(当它关于入口网关时)

b)从每个边车到主容器(不用说,在这种情况下,主容器的应用程序有责任从该点继续传播)

0 投票
2 回答
587 浏览

spring-boot - kafka zipkin拦截器的使用示例

因此,我们在内部使用 kafka 队列进行一些微服务的通信,也使用 zipkin 进行分布式跟踪。您能否建议如何在 zipkin 服务器中引入 kafka 跟踪以进行调试。

我遇到了brave-kafka-interceptor,但无法从提供的最小示例中使用 kafka 理解它。周围是否还有其他示例,或者使用了完全不同的库。

0 投票
0 回答
193 浏览

istio - Istio 跟踪 x-b3-sampled 始终为 0

我是 istio 的新手,我正在尝试设置跟踪,但无法使其工作。然后我在我的服务中记录了跟踪标头,我发现x-b3-sampled 为零

x-request-id:e1a8e4f3-5256-9e43-b571-a9c8a4c93db7, x-b3-traceid:b2328351dbb2f95fd0ec782c5103f1c1, x-b3-spanid:a6ef2135d03fac8a, x-b3-parentspanid:d0ec782c3-sampled:f01,-x-b-b03 b3-flags:null, x-ot-span-context:null 这是服务日志打印的内容。

我已将采样设置为 100

任何人都知道原因,或者我该如何解决?

0 投票
1 回答
658 浏览

.net - Azure Application Insights 未显示整个事件链(在事件驱动的应用程序中),但所有遥测数据都存在

设想

我在 ASP .NET Core 中有一个容器化、事件驱动的微服务应用程序,刚刚迁移到 .NET 5。

所有项目都使用Microsoft.ApplicationInsights 2.16.0,并且我检查了所有遥测数据都已发送并且采样不会影响结果(至少对于每个微服务单独)。

所有项目都向 RabbitMQ 发布和订阅事件。

我有自己的 rabbitmq nuget 包来简化对 RabbitMQ 的访问(它已经正常工作了一年多)。我添加了此代码以在发布事件时发送遥测标识符:

当收到事件时,我使用此代码跟踪依赖关系:

当一个微服务收到一个 POST 请求时,它会触发一个事件。其他几个微服务正在订阅它,它们也可以发布新事件,这将再次影响另一组微服务。当我单击 POST 请求时,我希望在端到端交易详细信息页面中看到这一切。

但不幸的是,这并没有发生:(

我在事务搜索中寻找 POST 请求: 在此处输入图像描述

并点击它: 在此处输入图像描述

您可以看到“event-one”是如何发布的,以及如何有一个微服务接收它。但没有别的。

现在,如果我搜索事件名称,我不仅会找到发布跟踪,还可以找到更多反映微服务发布的事件的依赖项: 在此处输入图像描述

如果我单击请求上方的那个,那么我可以更全面地了解整个事务: 在此处输入图像描述

但是,这里仍然缺少很多:每个微服务执行的所有 SQL 调用,微服务在接收事件 2、3 和 4 时执行的所有操作。

实际上,所有这些都在 Application Map 中可用: 在此处输入图像描述

这意味着所有遥测都正确存在!

问题

  1. 我做的一切正确吗?
  2. 有没有办法在端到端中显示完整的事件链?

提前致谢

0 投票
2 回答
2513 浏览

java - Opentelemetry java Automatic Instrumentation with zipkin exporter 选项正在使用 OtlpGrpcSpanExporter

我有一个简单的 spring boot hello world 应用程序。试图向 Zipkin 收集器发送数据。但根据日志,它正在尝试使用OtlpGrpcSpanExporter. 我的应用程序公开了一个简单的 post rest API。

遵循 Opentelemetry 文档https://opentelemetry.io/docs/java/getting_started/

[opentelemetry.auto.trace 2021-02-20 01:48:44:490 +0530] [grpc-default-executor-1] 警告 io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter - 无法导出跨度。错误消息:不可用:io 异常 [opentelemetry.auto.trace 2021-02-20 01:49:14:106 +0530] [grpc-default-executor-2] WARN io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter -无法导出指标 io.grpc.StatusRuntimeException:不可用:io 异常

如果我需要更改任何内容,请告诉我。

0 投票
1 回答
139 浏览

kibana - 使用 ELK 堆栈跟踪分布式系统中的调用和使用 Dynatrace 分布式跟踪有什么区别?

在我本周的项目中,我收到了一个待办事项,我要求分析我们如何在微服务中使用分布式跟踪。我们已经有了 ELK 堆栈,我们可以在其中检查 Kibana 仪表板的日志。我尝试使用共同关系 id 过滤呼叫,这工作正常。但是,我们的应用程序也使用 Dynatrace 进行跟踪。我的问题是,如果我们有 ELK 堆栈来检查日志以查找 PRD 中的问题,那么额外的 Dynatrace 分布式跟踪有什么作用?我无法理解的主要区别是什么。请任何人都可以尝试用简单的语言解释吗?我是这个积压的新手,所以有些概念还不合适。