OpenTracing в ядре .NET без зависимости от конкретной библиотеки решений - PullRequest
1 голос
/ 03 мая 2019

Для входа в наши приложения микросервисов мы просто регистрируемся в stdout / console, а драйвер докеров регистрирует и перенаправляет эти журналы куда-то, например. gelf / logstash, fluentd и т. д. По сути, мы соблюдаем правила 12 factor для ведения журнала. Это означает, что разработчикам, работающим над кодом приложения, не нужно ничего знать о базовом решении для ведения журналов (например, Elasticsearch, Graylog, Splunk и т. Д.) - это целиком и полностью связано с проблемой конфигурации / конфигурации. Теоретически мы должны быть в состоянии изменить лежащее в основе решение для ведения журнала без каких-либо изменений кода.

Я бы хотел что-то подобное для трассировки, и мои исследования привели меня к OpenTracing. Разработчикам не нужно знать базовое решение для трассировки (например, Jaeger, Zipkin, Elastic APM и т. Д.) И в соответствии с журналированием; теоретически мы должны быть в состоянии изменить базовое решение для трассировки без каких-либо изменений кода.

Я успешно получил POC ядра .NET, отправляющий трассировки в Jaeger с использованием библиотек opentracing / opentracing-csharp и jaegertracing / jaeger-client-csharp .

Я все еще пытаюсь полностью разобраться в OpenTracing, но мне интересно, есть ли способ отправлять трассировки в API, совместимый с OpenTracing, без необходимости жесткой зависимости от конкретного решения, такого как Jaeger (т.е. библиотека jaeger-client-csharp). Исходя из моего понимания, OpenTracing - это просто стандарт. Разве я не могу просто настроить конечную точку OpenTracing с некоторыми вариантами выборки без необходимости использования библиотеки jaeger-client-csharp? Или же jaeger-client-csharp на самом деле не относится к Jaeger и может отправлять трассировки любому API OpenTracing?

Пример конфигурации, показанный ниже, который использует клиентскую библиотеку jaeger:

services.AddOpenTracing();

if (appSettings.TracerEnabled)
{
   services.AddSingleton(serviceProvider =>
   {
      var loggerFactory = new LoggerFactory();
      var config = Jaeger.Configuration.FromEnv(loggerFactory);

      var tracer = config.GetTracer();

      GlobalTracer.Register(tracer);

      return tracer;
   });
}
...