【发布时间】:2021-09-19 03:08:45
【问题描述】:
我有兴趣在 ASP.NET Core 中使用 Elastic APM 来检测通过混合协议(HTTP、SQS、SNS)进行通信的一组服务的跟踪。尽管查看了文档,但我不清楚如何使用Elastic APM Public API 将发生在 HTTP 之外的事务相互连接(Elastic APM 会自动检测 HttpClient 以进行跟踪)。
根据文档,我应该能够序列化调用者上的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();
可以在Github 上找到我的实施高峰。
【问题讨论】:
标签: .net elasticsearch asp.net-core distributed-tracing elastic-apm