应用程序洞察 - 自定义TrackRequest正在创建重复的消息

时间:2017-03-30 17:34:17

标签: c# azure logging azure-application-insights

我希望能够将自定义属性添加到请求遥测中。我可以使用以下代码执行此操作:

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>

1 个答案:

答案 0 :(得分:1)

原因是AI SDK会自动跟踪您的请求,因此您会获得重复(您的属性是自动创建的那个)。

正如PeterBons建议的那样,使用Telemetry Initializer可以将属性添加到自动生成的请求中。