Функции Azure и RequestTelemetry AppInsights

Я пытаюсь улучшить RequestTelemetry в AppInsights из HttpTrigger Azure Function v3.

Функция инициализируется DI и классом Startup.

[assembly: FunctionsStartup(typeof(Startup))]
namespace Hager.Example.FunctionApp.FunctionApp
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            // No service for repro
        }
    }
}

И моя функция

    public class Function1
    {
        private readonly ILogger _logger;

        public Function1(ILogger<Function1> logger)
        {
            _logger = logger;
        }

        [FunctionName("HttpTriggered")]
        public IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req)
        {
            using var loggerScope = _logger.BeginScope("{InScope1}{InScope2}{InScope3}", Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());

            _logger.LogInformation("Started Execution");
            _logger.LogWarning("With a custom property: {CustomProperty}.", Guid.NewGuid());

            Activity.Current?.AddTag("TagStart", Guid.NewGuid());

            if (Activity.Current == null)
            {
                // Always null
                _logger.LogError("No ActivityCurrent {Activity}.", Activity.Current);
                _logger.LogError("ActivityCurrent Tags {Activity}.", Activity.Current?.Tags);
            }

            // Activity.Current.AddTag("Tag2", Guid.NewGuid());  // <- NullException

            _logger.LogInformation("Finished Execution");

            return new NoContentResult();
        }
    }

Мои пакеты проектов:

  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights" Version="2.17.0" />
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.17.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.11" />
  </ItemGroup>

Все средства ведения журнала и области работают должным образом, но объект ActivityTag всегда имеет значение null, которого не должно быть в Функции Azure.

Я что-то пропустил?


person JTE    schedule 17.03.2021    source источник


Ответы (1)


Обновление:

Добавлено решение Op: при использовании request.HttpContext?.Features.Get<RequestTelemetry>() все работало нормально.


Удалите 2 Application Insights packages: Microsoft.ApplicationInsights и Microsoft.ApplicationInsights.AspNetCore.

По умолчанию пакеты Application Insights не собирают теги действий. Так что это должно быть причиной.

Я проверил вашу лазурную функцию, не устанавливая вышеуказанные 2 Application Insights packages, она работает хорошо. Вот скриншот результата теста:

введите описание изображения здесь

Добавив сюда мой local.settings.json для справки, код будет таким же, как ваш:

{
    "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "xxxx",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "APPINSIGHTS_INSTRUMENTATIONKEY": "xxx"
  }
}

И если необходимы 2 пакета, возможно, вы можете попробовать добавить собственный ITelemetryInitializer, выполнив этот ответ (кстати, я не t проверить это).

person Ivan Yang    schedule 18.03.2021
comment
Спасибо за ответ, но у меня он не работает ... я не понимаю ... возможно, разница в версии фреймворка ... я закончил это, используя request.HttpContext?.Features.Get<RequestTelemetry>(), он работал нормально - person JTE; 19.03.2021
comment
@JTE, может быть. Я добавил ваше решение в ответ. И если это поможет, не могли бы вы принять это в качестве ответа? Спасибо. Если вы хотите выяснить основную причину, мы можем поделиться своими кодами через github, удалив личную информацию, и я могу продолжить работу над этим. - person Ivan Yang; 22.03.2021