问题标签 [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.
azure - 在 Azure 中实现分布式跟踪
我们正在使用逻辑应用、API 和 Azure Functions 的组合在 Azure 中构建集成。我们对从源到目的地的事务进行端到端跟踪,即分布式跟踪。我们需要能够跟踪自定义字段,例如 orderId。任何关于如何最好地实现这一点的建议、文章、示例、视频的指针都非常感谢。
trace - Linkerd 使用 OpenCensus 进行分布式跟踪
语境
我正在尝试使用 OpenCensus 和 Linkerd。尽管 Linkerd 可以选择在其命名空间中自动配置 OpenCensus 和 jaeger,但我不想使用它们。相反,我自己在名为“ops”的命名空间下独立部署了它们。
问题
- OpenCensus 收集器是否应该由 Linkerd 注入。
在官方文档的最后(正好是最后的第 4 行) ,它说,
确保 OpenCensus 收集器注入了 Linkerd 代理。
这是什么意思?
我应该将 linkerd sidecar 注入 OpenCensus 收集器 pod 吗?
如果是这样,为什么?
- 我应该按命名空间为 serviceaccount 名称添加后缀吗?
例如,假设我已经像这样配置了默认命名空间。
my-opencensus-collector
位于ops
命名空间中,因此我将其放在.ops
其服务名称的末尾,结果为my-opencensus-collector.ops:12345
. OpenCensus 收集器的专用服务帐户ops
也存在于命名空间中。在这种情况下,我是否也应该将命名空间名称放在服务帐户名称的末尾?
哪一个是对的?
或者
谢谢!
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 中存储信息是可选的。
kubernetes - 在整个集群中传播传入服务网格的标头
我已经在集群istio
上建立了一个启用的微服务架构。kubernetes
我istio-ingressgateway
的由 Cloudflare 代理。
后者,生成一个特定的header,即cf-ray
支持对cloudflare相关问题的排查。
我的问题是如何启用我的服务网格,即在边缘(istio-ingressgateway
即)和所有边车中传播cf-ray
id 标头。
istio
VirtualService
的关于资源的文档在about部分中列出了 3 个可用操作,HeaderOperations
即和。set
add
remove
add
并且remove
似乎与我想要执行的操作更无关,但set
似乎也要求设置一个特定的值。
我只想要一个直通/传播类型的操作,istio
在看到cf-ray
标题时,将通过它
a)在集群中(当它关于入口网关时)
b)从每个边车到主容器(不用说,在这种情况下,主容器的应用程序有责任从该点继续传播)
spring-boot - kafka zipkin拦截器的使用示例
因此,我们在内部使用 kafka 队列进行一些微服务的通信,也使用 zipkin 进行分布式跟踪。您能否建议如何在 zipkin 服务器中引入 kafka 跟踪以进行调试。
我遇到了brave-kafka-interceptor,但无法从提供的最小示例中使用 kafka 理解它。周围是否还有其他示例,或者使用了完全不同的库。
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
任何人都知道原因,或者我该如何解决?
.net - Azure Application Insights 未显示整个事件链(在事件驱动的应用程序中),但所有遥测数据都存在
设想
我在 ASP .NET Core 中有一个容器化、事件驱动的微服务应用程序,刚刚迁移到 .NET 5。
所有项目都使用Microsoft.ApplicationInsights 2.16.0,并且我检查了所有遥测数据都已发送并且采样不会影响结果(至少对于每个微服务单独)。
所有项目都向 RabbitMQ 发布和订阅事件。
我有自己的 rabbitmq nuget 包来简化对 RabbitMQ 的访问(它已经正常工作了一年多)。我添加了此代码以在发布事件时发送遥测标识符:
当收到事件时,我使用此代码跟踪依赖关系:
当一个微服务收到一个 POST 请求时,它会触发一个事件。其他几个微服务正在订阅它,它们也可以发布新事件,这将再次影响另一组微服务。当我单击 POST 请求时,我希望在端到端交易详细信息页面中看到这一切。
但不幸的是,这并没有发生:(
您可以看到“event-one”是如何发布的,以及如何有一个微服务接收它。但没有别的。
现在,如果我搜索事件名称,我不仅会找到发布跟踪,还可以找到更多反映微服务发布的事件的依赖项:
但是,这里仍然缺少很多:每个微服务执行的所有 SQL 调用,微服务在接收事件 2、3 和 4 时执行的所有操作。
实际上,所有这些都在 Application Map 中可用:
这意味着所有遥测都正确存在!
问题
- 我做的一切正确吗?
- 有没有办法在端到端中显示完整的事件链?
提前致谢
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 异常
如果我需要更改任何内容,请告诉我。
kibana - 使用 ELK 堆栈跟踪分布式系统中的调用和使用 Dynatrace 分布式跟踪有什么区别?
在我本周的项目中,我收到了一个待办事项,我要求分析我们如何在微服务中使用分布式跟踪。我们已经有了 ELK 堆栈,我们可以在其中检查 Kibana 仪表板的日志。我尝试使用共同关系 id 过滤呼叫,这工作正常。但是,我们的应用程序也使用 Dynatrace 进行跟踪。我的问题是,如果我们有 ELK 堆栈来检查日志以查找 PRD 中的问题,那么额外的 Dynatrace 分布式跟踪有什么作用?我无法理解的主要区别是什么。请任何人都可以尝试用简单的语言解释吗?我是这个积压的新手,所以有些概念还不合适。