如何解决Azure Functions 和 AppInsights RequestTelemetry
我正在尝试通过 HttpTrigger Azure Function v3 增强 AppInsights 中的 RequestTelemetry。
函数用 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());
_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 Functions 中。
我错过了什么吗?
解决方法
更新:
添加了 Op 的解决方案:通过使用 request.HttpContext?.Features.Get<RequestTelemetry>()
,效果很好。
请卸载 2 Application Insights packages
:Microsoft.ApplicationInsights
和 Microsoft.ApplicationInsights.AspNetCore
。
默认情况下,Application Insights 包不收集活动标签。所以应该是这个原因。
我在没有安装上述 2 Application Insights packages
的情况下测试了您的 azure 功能,效果很好。测试结果截图如下:
在这里添加我的local.settings.json供大家参考,代码和你的一样:
{
"IsEncrypted": false,"Values": {
"AzureWebJobsStorage": "xxxx","FUNCTIONS_WORKER_RUNTIME": "dotnet","APPINSIGHTS_INSTRUMENTATIONKEY": "xxx"
}
}
如果需要这两个包,也许您可以尝试按照this answer添加自定义ITelemetryInitializer
(顺便说一句,我没有测试过)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。