Регистрация OpenTelemetry во время запуска и динамическое добавление дополнительных возможностей во время выполнения

#asp.net-core #redis #open-telemetry

Вопрос:

В рамках ConfigureServices метода в Startup классе я регистрирую OpenTelemetry, как показано ниже:

 services.AddOpenTelemetryTracing((builder) =gt;  builder  .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyService"))  .AddAspNetCoreInstrumentation()  .AddHttpClientInstrumentation()  .AddOtlpExporter(otlpOptions =gt;  {  otlpOptions.Endpoint = new Uri("http://localhost:4317");  }));  

Я тоже хочу добавить инструментарий Redis, но у меня будет доступ к строке подключения Redis только во время обслуживания запроса, в котором я извлекаю ClientId и извлекаю строку подключения Redis для этого клиента из соответствующей конфигурации клиента. Снова в классе запуска при чтении ClientInfo я добавляю трассировку OpenTelemetry для инструментирования вызовов Redis.

 services.AddScopedlt;ClientInfogt;(sp =gt;  {  var context = sp.GetServicelt;IHttpContextAccessorgt;().HttpContext;  var clientId = context.Request.Headers["ClientId"].ToString();  var clientInfo = await GetClientInfo(clientId).Result;  // ClientInfo will contain Redis connection string. I cache this to avoid fetching repeatedly for same client    // I cache this ClientId in a dictionary and make sure the below registration happens  // only once per client Id.  // RedisConnection is of type IConnectionMultiplexer  var redisConnection = RedisHelper.GetConnection(clientInfo.RedisConnectionString);  services.AddOpenTelemetryTracing((builder) =gt;  builder  .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyService"))  .AddRedisInstrumentation(redisConnection)  .AddOtlpExporter(otlpOptions =gt;  {  otlpOptions.Endpoint = new Uri("http://localhost:4317");  }));   return clientInfo;  });  

Когда я выполняю код, он создает промежуток только для входящих HTTP-запросов и исходящих HTTP-запросов. Но не инструментирует вызовы Redis. Однако, если я добавлю инструментарий Redis в сам первый вызов , где бы я ни регистрировался AddAspNetCoreInstrumentation , он будет работать нормально.

Есть ли способ добавить некоторые инструменты во время запуска и использовать их во время выполнения, добавив дополнительные инструменты?