ILogger.LogMetric функции Azure не регистрирует сообщения в Application Insight

#azure-functions #azure-application-insights #ilogger

#azure-функции #azure-application-insights #ilogger

Вопрос:

Я использую Azure function v3 на .net core 3.x, где ILogger<T> создается путем внедрения зависимостей соответствующего класса T через IServiceProvider like ILogger<T> _log = _log = serviceProvider.GetService<ILogger<T>>();

Кроме _log.LogMetric() любых других сообщений журнала (трассировки, информация, ошибка, исключение и т.д.) Передаются в Application Insight. Я проверил раздел трассировки поиска транзакций, а также трассировки и пользовательские показатели журналов.

Даже конфигурация ведения журнала файла host.json кажется правильной. Итак, что я делаю не так?

Комментарии:

1. Где в Application Insigths вы хотите найти эти показатели? (Просто чтобы убедиться, что вы смотрите в нужное место)

2. @PeterBons В разделе поиска транзакций (в основном трассировки). Но также выполняйте поиск в журналах трассировок и пользовательских метриках.

3. Можете ли вы опубликовать содержимое host.json и, возможно, некоторый код функции, вызывающей logmetrics?

4. У меня идентичная проблема, вы ее решили?

Ответ №1:

На Github есть сообщение об этом, которое предполагает, что это ошибка. Существует обходной путь для внедрения TelemetryClient и использования client.TrackMetric();

Вы можете сделать это: services.AddSingleton<TelemetryClient>(x => new TelemetryClient(configuration.GetSection("ApplicationInsights:InstrumentationKey").Get<string>()))

Конфигурация здесь, будучи вашей IConfiguration или IConfigurationRoot

Затем после внедрения в вашу службу просто вызовите метод, client.TrackMetric(metricName, metricValue, dictionaryProperties);

Сообщение, о котором идет речь:https://github.com/Azure/azure-webjobs-sdk/issues/2308

Просто обратите внимание на то, что если вы используете TelemetryClient, вы захотите самостоятельно агрегировать эти показатели с помощью этого обходного пути:

https://learn.microsoft.com/en-us/dotnet/api/microsoft.applicationinsights.telemetryclient.trackmetric?view=azure-dotnet

Ответ №2:

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1#log-filtering

Из документа вы обнаружите, что в Application Insight будут передаваться только информация, предупреждение, отладка, ошибка и трассировка.

Эти пять уровней журнала не содержат LogMetric.

Комментарии:

1. LogMetric — это не уровень журнала, а метод расширения, который отправляет данные, используя уровень журнала информации ( источник ). Таким образом, этот ответ неверен / релевантен с учетом текущего содержимого