• Как мне убрать несколько символов из tuple?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Изучать самые основы языка.
    Ответ написан
    4 комментария
  • Где искать TraceId из OpenTelemetry в Jaeger и как связывать микросервисы?

    Razbezhkin
    @Razbezhkin Автор вопроса
    программист, преподаватель
    В общем, не все так просто как казалось.
    Пришлось скачать исходники opentelemetry https://github.com/open-telemetry/opentelemetry-dotnet и посмотреть, как устроено распространение трассировочной информации в инструментарии AspNetCore.

    Сохранение, передача и восстановление TraceID (и доп информации) называется Propogation.
    В пакете OpenTelemetry Есть специальный класс:
    OpenTelemetry.Context.Propagation.Propagators
    Который возвращает этих пропогаторов с помощью которых производиться внедрение и извлечение контекстной информации (информации о трассировке).

    Чтобы куда-нибудь внедрить данные о трассировке, можно использовать примерно такой код:

    //достаем текстового распространителя
    var textMapPropagator = Propagators.DefaultTextMapPropagator;
    //формируем контекст распространения
    var propContext = new OpenTelemetry.Context.Propagation.PropagationContext(Activity.Current.Context, Baggage.Current);
    //этот метод вызывает для каждого необходимого значения их контекста распространения ваш же метод, который сохраняет пару ключ-значения для последующего восстановления
    textMapPropagator.Inject(propContext,context, (ctx, name, val) =>
    {
        ctx.Headers.Set(name,val);
    });


    На другой стороне нужно контекст трассировки восстановить. код примерно такой:

    //извлекаем из среды распространяемую трейс-информацию
            var propagator = Propagators.DefaultTextMapPropagator;
            PropagationContext propagationContext = propagator.Extract(default, context,
                (ctx, name) => { return new string[] { ctx.Headers.Get<string>(name) }; });
    
            if (propagationContext.ActivityContext.IsValid())
            {
                //формируем новый спан.
                newOne = new Activity("Consumer");
                newOne.SetParentId(propagationContext.ActivityContext.TraceId,
                    propagationContext.ActivityContext.SpanId,
                    propagationContext.ActivityContext.TraceFlags);
                newOne.TraceStateString = propagationContext.ActivityContext.TraceState;
                newOne.Start();
                newOne.IsAllDataRequested = false;
    
                Baggage.Current = propagationContext.Baggage;
            }


    в результате контекст трассировки восстанавливается и в Jaeger попадает в связанном виде.
    Единственная проблема в том, что именно этот Span не сохраняется (хотя все последующие в цепочке - да) и появляется Warning вида: "invalid parent span IDs=b3f757a84de75eda; skipping clock skew adjustment"
    Что с ним делать - пока не знаю. чего-то все такие не хватает
    Ответ написан
    1 комментарий