Для входа в наши приложения микросервисов мы просто регистрируемся в 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;
});
}