У меня есть функция Azure, работающая локально в изолированном рабочем процессе. Я намерен использовать дополнительные пакеты OpenTelemetry, а не встроенные функции во время выполнения функций, поскольку я намерен интегрировать с OpenTelemtry.
Из того, что я могу Tell .AddSqlClientInstrumentation() из OpenTelemetry.Instrumentation.SqlClient
Должен отслеживать вызовы SQL при использовании Microsoft.Data.SQLClient, которые, по-видимому, используются выходными привязками в функциях Azure.
Однако я не вижу никаких доказательств того, что он работает.
Совместим ли пакет OpenTelemetry с привязкой выходных данных SQL Функций Azure при использовании изолированных функций?
Я вижу, что инструментарий HttpClient работает нормально, поэтому в целом пакеты OpenTelemetry настроены нормально.
Я предполагаю, что расширения работают в рабочем процессе хоста, а не в рабочем процессе хоста. чем рабочий процесс приложения? Но, прочитав документацию по жизненному циклу расширения, я не могу это подтвердить наверняка, поскольку они не выделяют это напрямую.
РЕДАКТИРОВАТЬ
Некоторый дополнительный контекст чтобы проиллюстрировать, чего я хочу достичь.
p.s. Меня меньше интересует решение проблем с кодом, а больше вопрос о том, есть ли в архитектуре библиотек инструментов Sql какие-либо проблемы, работающие во время выполнения функций Azure. Но я определенно вижу преимущество листинга кода для добавления большего контекста (спасибо за отзыв).
var builder = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services =>
{
services.AddOpenTelemetry()
.ConfigureResource(resource => resource.AddService(serviceName))
.WithTracing(tracing => tracing
.AddAspNetCoreInstrumentation()
.AddSqlClientInstrumentation(options => options.SetDbStatementForText = true)
.AddHttpClientInstrumentation()
.AddConsoleExporter()
.AddAzureMonitorTraceExporter(options => options.ConnectionString = "XXX")
);
})
.ConfigureLogging(logging =>
{
logging.AddOpenTelemetry(options => options
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName))
.AddAzureMonitorLogExporter(options => options.ConnectionString = "XXX")
.AddConsoleExporter());
})
.UseDefaultServiceProvider(x => x.ValidateOnBuild = true);
var host = builder.Build();
host.Run();
У меня есть следующие ссылки на пакеты:
И следующее в файле host.json, в частности, я также играл с встроенной интеграцией appinsights, а также с OpenTelemetry, я задавался вопросом, может ли appinsights использовать его и не разрешать библиотекам OpenTelemtry получить телеметрию, но я не могу себе представить, чтобы это было спроектировано таким образом.
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true,
"enableDependencyTracking": true,
"dependencyTrackingOptions": {
"enableSqlCommandTextInstrumentation": true
}
}
},
"logLevel": {
"default": "Information"
},
"telemetryMode": "openTelemetry"
}
РЕДАКТИРОВАТЬ 2:
Я использую привязки вывода функций Azure, т. е. украшая возвращаемый тип с помощью SqlOutput.
public class NewUserOutputBinding
{
[SqlOutput("dbo.Users", connectionStringSetting: "SqlConnectionString")]
public required User User { get; set; }
[HttpResult]
public required IActionResult HttpResponse { get; set; }
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... -functions