Можно ли установить время начала и окончания интервала в отдельных запросах в OpenTelemetry

#azure-logic-apps #zipkin #jaeger #open-telemetry

Вопрос:

Я пытаюсь внедрить трассировку в рабочие процессы, которые у нас есть в приложениях логики azure. Я надеялся запустить span в качестве первого шага в приложении логики с помощью запроса к приложению-функции, которое вернет идентификатор трассировки и spanid, которые можно было бы использовать в дальнейших вложенных шагах для трассировки.

Это работает только в том случае, если я завершаю интервал и отправляю его, что приводит к трассировке, которая выглядит следующим образом. введите описание изображения здесь

В идеале я хотел бы обновить интервал, чтобы изменить время окончания и прикрепить другую информацию в конце. Ни один из Api, которые я вижу, не допускает этого, поэтому я предполагаю, что это не соответствует спецификации. Мне интересно, сталкивался ли кто-нибудь с подобными ситуациями и есть ли у кого-нибудь какие-либо идеи.

Единственное, о чем я могу думать, — это система с отслеживанием состояния, такая как надежная функция, которая не отправляет ни один из промежутков, пока все они не будут завершены.

Возможно, моя реализация просто неверна, поэтому вот простое функциональное приложение.

 public static class JaegerHelper {  [Function("JaegerHelper")]  public static HttpResponseData Run(  [HttpTrigger(AuthorizationLevel.Function, "get", "post")]  HttpRequestData req  )  {  var v = SendTrace(null, "JaegerHelper", 1.ToString());   SendTrace(v.Id, "JaegerHelper", 2.ToString());  SendTrace(v.Id, "JaegerHelper", 3.ToString());  SendTrace(v.Id, "JaegerHelper", 4.ToString());  var b = SendTrace(v.Id, "JaegerHelper", 5.ToString());  SendTrace(b.Id, "JaegerHelper", 6.ToString());  SendTrace(b.Id, "JaegerHelper", 7.ToString());  SendTrace(b.Id, "JaegerHelper", 8.ToString());  SendTrace(b.Id, "JaegerHelper", 9.ToString());  SendTrace(v.Id, "JaegerHelper", 10.ToString());  SendTrace(v.Id, "JaegerHelper", 11.ToString());   var response = req.CreateResponse(HttpStatusCode.OK);   return response;  }    private static Activity SendTrace(  string parentId = null,  string source = "DefaultSource",  string activityName = "DefaultActivity"  )  {  using var tracerProvider = Sdk.CreateTracerProviderBuilder()  .SetSampler(new AlwaysOnSampler())  .AddSource(source)  .AddZipkinExporter(config =gt;  {  config.Endpoint = new Uri("http://127.0.0.1:10003/api/v2/spans");  })  .Build();   using var activitySource = new ActivitySource(source);   var activity = activitySource.CreateActivity(activityName, ActivityKind.Server, parentId = parentId);   activity.Start();  activity.Stop();   tracerProvider.ForceFlush();   return activity;  } }  

Комментарии:

1. Ооо, также в качестве примечания игнорируйте использование экспортера zipkin, у меня возникли проблемы с портом UDP в моем локальном k8.