我希望能够将自定义属性添加到请求遥测中。我可以使用以下代码执行此操作:
public void LogRequest(IDictionary<string,string> properties)
{
var client = new TelemetryClient();
var request = new RequestTelemetry();
foreach(var prop in properties)
{
request.Properties.Add(prop );
}
client.TrackRequest(request);
}
此代码的工作原理是它使用我想要的所有自定义属性创建请求遥测,但应用程序洞察SDK也创建了重复请求遥测(没有我的自定义属性)。所以它发送自己的请求遥测和我创建的请求。
在尝试做一些研究时我发现了这个: https://github.com/Azure/Azure-Functions/wiki/App-Insights-Early-Preview
自定义遥测
您可以携带.NET App Insights SDK并创建自己的TelemetryClient。没有任何冲突,但有一些建议:
如果您不想要重复请求,请不要创建TrackRequest或使用StartOperation方法 - 我们会自动执行此操作。
所以我的问题是,无论如何要发送我自己的自定义请求遥测而没有sdk自动创建重复的消息?
另外,我想避免使用TrackEvent。我需要的大部分信息已经在请求对象中,所以我更喜欢使用TrackRequest。
这就是我在跟踪请求部分的应用程序洞察配置中所拥有的内容:
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModule, Microsoft.AI.Web">
<Handlers>
<Add>System.Web.Handlers.TransferRequestHandler</Add>
<Add>Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.RequestDataHttpHandler</Add>
<Add>System.Web.StaticFileHandler</Add>
<Add>System.Web.Handlers.AssemblyResourceLoader</Add>
<Add>System.Web.Optimization.BundleHandler</Add>
<Add>System.Web.Script.Services.ScriptHandlerFactory</Add>
<Add>System.Web.Handlers.TraceHandler</Add>
<Add>System.Web.Services.Discovery.DiscoveryRequestHandler</Add>
<Add>System.Web.HttpDebugHandler</Add>
</Handlers>
</Add>
</TelemetryModules>
答案 0 :(得分:1)
原因是AI SDK会自动跟踪您的请求,因此您会获得重复(您的属性是自动创建的那个)。
正如PeterBons建议的那样,使用Telemetry Initializer可以将属性添加到自动生成的请求中。