我有兴趣在 ASP.NET Core 中使用 Elastic APM 来检测通过混合协议(HTTP、SQS、SNS)进行通信的一组服务的跟踪。尽管查看了文档,但我不清楚如何使用Elastic APM 公共 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上找到。