TelemetryClient在Application Insights中产生不一致的结果

时间:2017-05-04 19:46:06

标签: azure azure-application-insights azureportal telemetry

我尝试使用和不使用刷新来跟踪自定义指标。但是,度量标准仅在“自定义”部分的“应用程序洞察”中间歇性地显示。第一个问题:为了将遥测数据发送到Application Insights,是否需要在每个“TrackMetric(metric)”调用之后运行“flush()”?第二:为什么会出现这种间歇性行为?我一次只编写一个度量标准,因此我不会因为数以千计的单独调用而重载Application Insights。这是我的代码(这是来自一个简单的控制台应用程序):

    public class Program
{
    public static void Main(string[] args)
    {
        var telemetryClient = new TelemetryClient()
        {
            Context = { InstrumentationKey = "{{hidden instrumentation key}}" }
        };
        var metric = new MetricTelemetry
        {
            Name = "ImsWithContextMetric2",
            Sum = 42.0
        };
        telemetryClient.TrackMetric(metric);
        telemetryClient.Flush();
    }
}

我也在Application Insights中遇到这种奇怪的行为,我添加的自定义指标显示在“不可用/已弃用的指标”部分下。在“自定义”部分下弹出一个我甚至没有添加的度量标准“Process CPU(all cores)”。有什么想法会发生这种奇怪的行为吗?:

enter image description here

1 个答案:

答案 0 :(得分:3)

  

是否需要运行" flush()"在每一个" TrackMetric(公制)"呼叫以便将遥测发送到Application Insights?

由于您使用控制台应用程序向Application Insights发送事件(可能是短暂的),因此每隔一段时间调用.Flush()绝对是一个好习惯。 SDK使用InMemoryChannel发送遥测并使用内存中的队列批量发送。因此,调用.Flush()以便强制推送数据非常重要。一个好的做法可能是在事件发生后添加一些等待:

telemetryClient.Flush();
Thread.Sleep(1000);

更多阅读:Flushing dataEnsure you don't use telemetry

  

但是,这些指标只会间断地显示在" Custom"下的Application Insights中。部分。为什么会出现这种断断续续的行为?我一次只编写一个指标,因此我并没有将Application Insights重载成千上万的单独调用。

有时,Azure门户中出现的指标有延迟。它也可能长达几分钟。但是如果你已经正确设置,你不会超过throttling limit,并且adaptive sampling被禁用,那么没有理由说遥测应该是间歇性的。但是,如果您仍然觉得有问题,请启动一个提琴手跟踪(确保您从非浏览器会话中捕获)并检查呼叫是否要发送到dc.services.visualstudio.com。确保响应为200 OK,以及服务器是否接受了这些项目。

  

我在Application Insights中也遇到了这种奇怪的行为,我添加的自定义指标显示在"不可用/已弃用的指标"部分。

您使用的是哪个版本的SDK?我刚刚尝试了相同的方案,并且自定义指标正确显示。

  

我甚至没有添加一个名为" Process CPU(所有内核)"弹出" Custom"部分。

"处理CPU"是performance counter,用于跟踪CPU利用率。我相信如果应用程序在IIS或Azure下运行,SDK将只能跟踪这些计数器。它可能在您创建Application Insights资源时在内部添加。您可以忽略它,因为它不会有数据到图表。

希望这有帮助!