elasticsearch - Elastic APM - 在 C# 代理库中使用 traceparent/trace_id 创建事务/跨度
问题描述
我正在 Elastic APM 中试用 .Net 代理,我正在使用一个 C# 应用程序,该应用程序是使用名为 ASP.net Boilerplate 的框架创建的。我已经添加了文档中提到的核心库,并在 appsettings.json 中添加了设置。这启用了默认检测,并且我在 APM 中通过 Kibana 可视化了跟踪。
目前,我有一个 node.js 应用程序正在运行,并且我将消息发布到 RabbitMQ 队列,其中 traceparent 在消息有效负载中。C# 应用程序读取发布的消息。我需要使用这个 traceparent / trace id 创建一个事务或 span,以便 Kibana 显示分布式系统之间的跟踪。
我想知道是否有一种方法可以使用从另一个不使用 HTTP 协议的系统发送的 traceparent 来创建事务(或跨度)。我查看了 Elastic APM 代理文档 -> 公共 API 以获取信息,但找不到任何相关信息。有办法吗?谢谢。
解决方案
我想知道是否有一种方法可以使用从另一个不使用 HTTP 协议的系统发送的 traceparent 来创建事务(或跨度)。
是的,这是可能的,并且有一个 API。这部分文档解释了它。
所以当你开始你的事务时你需要这样做——我想在你的场景中这将是你从 RabbitMQ 读取消息时。
当您启动事务时,有一个称为可选参数distributedTracingData
- 如果您传递它,那么事务将重用您通过 RabbitMQ 传递的 traceid,这样新事务将成为整个跟踪的一部分。如果不传递此参数,则会生成一个新的traceid,并启动一个新的trace。
可能有帮助的另一条评论:您将跟踪 id 传递到启动事务的方法中,并且每个跨度将在事务中继承此跟踪 id - 因此您可以在事务级别控制它,因此您不会将其传递到跨度.
这是一个关于它的外观的小代码片段:
serializedDistributedTracingData = //read this from the message which you get RabbitMq
var transaction2 = Agent.Tracer.StartTransaction("RadFromQueue", "RabbitMQRead",
DistributedTracingData.TryDeserializeFromString(serializedDistributedTracingData));
推荐阅读
- excel - 在 VBA 中使用 WITH 刷新 Excel 2016 数据透视表失败?
- java - java.lang.NullPointerException:ImageView.setImageDrawable(android.graphics.drawable.Drawable)
- python - 为什么 scipy.optimize.curve_fit 没有产生最适合我的点的线?
- algorithm - 最早期限内动态零星服务器的优先级优先
- telethon - 为什么我自己的频道会显示“telethon.errors.rpcerrorlist.ChannelPrivateError”?
- reactjs - 如何使用 react-pdf 在 pdf 中呈现 recharts 图
- bazel - 如何获取 bazel 缓存项或失败
- javascript - 更新嵌套状态的替代方案或解决方案
- flask - 重定向到不同页面时,Flask Login 对所有属性返回 False
- python - 通过wifi从RFID阅读器接收数据 - python