繁体   English   中英

Activity Opentelemetry tracking.Net Core 远程服务

[英]Activity Opentelemetry tracing .Net Core remote service

我有多个 web 服务,它们通过 SignalR 连接到一组 remote.Net Core 应用程序,这允许它们通过 SignalR 通道接收消息。 消息包含一个数据结构,其中包含在 web 服务上设置的跟踪 ID。 我有 Jaeger 设置,远程和 web 服务报告正常,跟踪看起来不错,从 web 服务到 DB 等。

但是,在收到 SignalR 消息时,我无法从远程服务跟踪它。 但是,如果我向 Web API 发出请求,则可以在 Jaeger 中看到 Traces。

当前流量:

  1. 对 web 服务的请求 - 例如 HTTP POST
  2. web 服务通过集线器通过 SignalR 发送消息
  3. 远程服务收到消息
  4. 删除服务操作消息
  5. 远程服务可以将信息发送到 web 服务。

从 Jaeger 我可以看到最初的 HTTP POST 和一些 DB 请求,但这最终是它结束的地方。

在远程服务端,我阅读了消息,然后使用 TraceId 创建了一个新 Activity。

private ActivitySource CurrentSource { get; set; }
private Activity CurrentActivity { get; set; }

 public void StartWithParentId(string name, string parentTraceId)
 {
        if (string.IsNullOrWhiteSpace(parentTraceId))
        {
            Start(name);
            return;
        }

        Debug.WriteLine($"TRACE INFORMATION Name:{name.GetLogQuoteString()} " +
                        $"TraceID:{parentTraceId.GetLogQuoteString()}");
        CurrentSource = _accSourcesService.Get();

        CurrentActivity = CurrentSource?.StartActivity(name);
        CurrentActivity?.SetParentId(parentTraceId);
        CurrentActivity?.SetIdFormat(ActivityIdFormat.W3C);

 }

然后我在活动中添加一些标签和行李

 public static void CreateTaggingAndBaggageFromJob(IActivityService activityService, 
        ISignalRBaseJob job)
    {
        activityService.AddBaggage("job.id", job.Id);
        activityService.AddTag("job.id", job.Id);
        activityService.AddBaggage("RId", job.RID);
        activityService.AddTag("RId", job.RID);
    }

然后,一旦所有工作完成:

 public void Stop()
 {
    CurrentActivity?.Stop();
    CurrentActivity?.Dispose();
    CurrentActivity = null;
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM