gpt4 book ai didi

.net - 在 .NET Core 上使用 Elastic APM 进行分布式跟踪,非 HTTP

转载 作者:行者123 更新时间:2023-12-02 22:54:11 24 4
gpt4 key购买 nike

我有兴趣在 ASP.NET Core 中使用 Elastic APM 来检测通过混合协议(protocol)(HTTP、SQS、SNS)进行通信的一组服务的跟踪。尽管查看了文档,但我不清楚如何使用 Elastic APM Public API将发生在 HTTP 之外的事务相互连接起来(HttpClient 会自动被 Elastic APM 检测以进行跟踪)。

根据文档,我应该能够序列化 CurrentTransaction.OutgoingDistributedTracingData在调用者上然后反序列化它以恢复被调用者上的事务,但是尽管在内存中实现了这种模式,但我在 Kibana 中的跟踪除了最终事务之外的所有跨度都丢失了。

// transaction 1
var trans1 = Agent.Tracer.StartTransaction("Dist Trans 2", ApiConstants.TypeRequest);

await trans1.CaptureSpan("step 1 processing", ApiConstants.ActionExec, async () => await Task.Delay(30));

// transaction 2
var trans2 = Agent.Tracer.StartTransaction("Dist Trans 2", ApiConstants.TypeRequest,
DistributedTracingData.TryDeserializeFromString(trans1.OutgoingDistributedTracingData.SerializeToString()));

await trans2.CaptureSpan("step 2 processing", ApiConstants.ActionExec, async () => await Task.Delay(30));

// transaction 3
var trans3 = Agent.Tracer.StartTransaction("Dist Trans 2", ApiConstants.TypeRequest,
DistributedTracingData.TryDeserializeFromString(trans2.OutgoingDistributedTracingData.SerializeToString()));

await trans3.CaptureSpan("step 3 processing", ApiConstants.ActionExec, async () => await Task.Delay(30));

trans3.End();

kibana trace dashboard

我的实现高峰可以在 Github 上找到.

最佳答案

你不结束trans1trans2 .

只需将这两行放在这些结束处,一切都会正常显示:

trans1.End();
trans2.End();

CaptureTransaction ,这是一种方便的方法,可以包装您的任何代码并确保事务结束并捕获所有异常 - 因此您使用该方法,它会为您完成“一切”。

然后是 StartTransaction 方法 - 这是您在代码中使用的方法 - 启动事务并且不执行任何其他操作。这里的好处是你得到一个 ITransaction您可以随时随地使用的实例。但在这种情况下,您需要调用 .End()一旦执行交易(也就是您要捕获的代码),就手动对其进行操作。

CaptureSpan 相同和 StartSpan .

所以你用了 CaptureSpan对于您的跨度,因此当带有 Task.Delay 的 lambda 时自动结束的跨度完成,另一方面,您使用 StartTransaction 开始交易但只叫 .End()trans3而不是其他 2 笔交易。

演示中有一些解释 here - 该演示的示例代码是 here .

关于.net - 在 .NET Core 上使用 Elastic APM 进行分布式跟踪,非 HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60890836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com