#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
, он будет работать нормально.
Есть ли способ добавить некоторые инструменты во время запуска и использовать их во время выполнения, добавив дополнительные инструменты?