我尝试使用和不使用刷新来跟踪自定义指标。但是,度量标准仅在“自定义”部分的“应用程序洞察”中间歇性地显示。第一个问题:为了将遥测数据发送到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)”。有什么想法会发生这种奇怪的行为吗?:
答案 0 :(得分:3)
是否需要运行" flush()"在每一个" TrackMetric(公制)"呼叫以便将遥测发送到Application Insights?
由于您使用控制台应用程序向Application Insights发送事件(可能是短暂的),因此每隔一段时间调用.Flush()
绝对是一个好习惯。 SDK使用InMemoryChannel发送遥测并使用内存中的队列批量发送。因此,调用.Flush()
以便强制推送数据非常重要。一个好的做法可能是在事件发生后添加一些等待:
telemetryClient.Flush();
Thread.Sleep(1000);
更多阅读:Flushing data,Ensure 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资源时在内部添加。您可以忽略它,因为它不会有数据到图表。
希望这有帮助!