2

我尝试使用和不刷新它来跟踪自定义指标。但是,这些指标只是间歇性地显示在 Application Insights 的“自定义”部分下。第一个问题:是否需要在每次“TrackMetric(metric)”调用后运行“flush()”才能将遥测数据发送到 Application Insights?第二:为什么会出现这种间歇性行为?我一次只写一个指标,所以我并没有用数千个单独的调用来超载 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 中也遇到了这种奇怪的行为,其中我添加的自定义指标显示在“不可用/已弃用的指标”部分下。在“自定义”部分下会弹出一个我什至没有添加的指标,称为“进程 CPU(所有内核)”。任何想法为什么会发生这种奇怪的行为?:

在此处输入图像描述

4

1 回答 1

3

是否需要在每次“TrackMetric(metric)”调用后运行“flush()”才能将遥测数据发送到 Application Insights?

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

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

更多阅读:刷新数据确保您不会丢失遥测数据

但是,这些指标只是间歇性地显示在 Application Insights 的“自定义”部分下。为什么会出现这种间歇性行为?我一次只写一个指标,所以我并没有用数千个单独的调用来超载 Application Insights。

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

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

您使用的是什么版本的 SDK?我刚刚尝试了相同的场景,并且自定义指标显示正确。

在“自定义”部分下会弹出一个我什至没有添加的指标,称为“进程 CPU(所有内核)”。

“Process CPU”是一个性能计数器,用于跟踪 CPU 利用率。我相信如果应用程序在 IIS 或 Azure 上运行,SDK 将只能跟踪这些计数器。它可能是在您创建 Application Insights 资源时在内部添加的。您可以忽略它,因为它没有要绘制的数据。

希望这可以帮助!

于 2017-05-04T21:23:24.123 回答