Для входа в наши приложения микросервисов мы просто регистрируемся на stdout / console, а драйвер ведения журнала докеров обрабатывает и перенаправляет эти журналы куда-нибудь, например. gelf / logstash, fluentd и т. д. В основном мы следуем 12-факторному руководству по ведению журнала. Это означает, что разработчикам, работающим над кодом приложения, не нужно ничего знать о базовом решении для ведения журнала (например, 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;
});
}