在Azure函数中,我们使用.NET HttpClient类,Azure Servicebus SDK和Azure Storage SDK发出许多请求-一切都通过Application Insight日志中的生成漂亮地记录下来,显示了依赖性和全部!
现在,我们想添加一个ITelemetryInitializer
的实现,以便为上述SDK编写的EventTelemetry
添加一些尺寸。
我们首先创建一个实现ITelemetryInitializer
接口的类。
public class ReferrerTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
if (telemetry is EventTelemetry)
{
// Add some code
}
}
}
然后,我创建一个实现IWebJobsStartup
接口的类,以DI注入我的初始化程序。
[assembly: WebJobsStartup(typeof(Startup))]
namespace LoggingTest
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
builder.Services.AddSingleton<ITelemetryInitializer, ReferrerTelemetryInitializer>();
}
}
}
注意:我只在.NET Core 2.0中启动了Startup类(而在2.1中则没有)-尽管这似乎是一个已知的issue的打开?
但是,初始化器类中的Initialize
方法却不会触发(在Core 2.0中,在我看到Startup类已经注册了DI ReferrerTelemetryInitializer
实现之后)?
我们缺少什么?
答案 0 :(得分:1)
您不会丢失任何东西,它应该可以正常工作。有一个known issue会破坏WebJobStartup函数。
SDK不会自动报告EventTelemtery(它们报告请求,依赖项,异常,跟踪和度量标准)。您可以检查Net Core 2.0上是否用其他类型的遥测调用了initialize吗?
答案 1 :(得分:0)
Azure Function v3
对于 2021 年在 Azure Function v3 中处理此问题的人员,现在确实可以使用。
TelemetryClient 由 Azure Function 主机/运行时配置。 它将通过依赖注入从服务集合中获取注册的 ITelemetryInitializer。
项目文件
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.27" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.11" />
启动
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<ITelemetryInitializer, TheCustomTelemetryInitializer>();
}
}
而且对本地发展很重要!:
<块引用>然后您需要在 local.settings.json 中为您的 APPINSIGHTS_INSTRUMENTATIONKEY 添加一些值。这是它与常规控制台应用程序不同的地方,即使检测键为空,它也可以在本地工作。在功能应用程序中,显然你需要在那里添加一些价值。它可以是任何东西,我已经这样做了并且效果很好:
"APPINSIGHTS_INSTRUMENTATIONKEY": "you-need-to-have-anything-at-all-here-so-it-will-work-locally"