为什么某些 Azure App Insight 指标没有出现在门户中?

Why do some Azure App Insight metrics not appear in the Portal?

我已经在我的应用程序中实现了自定义指标,以便将这些指标发送到 Azure 中的 App Insights:

using (var operation = tc.StartOperation<DependencyTelemetry>("MetricName"))
{
  //some long running code
}

如果我 运行 此代码说 5 次 ,然后查看 Azure 门户中的 App Insights 指标:

dependencies 
| where type == 'Other'

然后我通常会看到关于此指标的 1-2 个条目,带有时间戳。我一遍又一遍地重复这个,它总是一样的,考虑到代码 运行 5 次,其他缺失的指标会发生什么? (每个 运行 之间有相当大的延迟)

我想知道它们是否被从抽样中过滤掉了,但根据文档 App Insights 不抽样指标:https://docs.microsoft.com/en-us/azure/azure-monitor/app/sampling

“Application Insights 不会在任何采样技术中对会话、指标(包括自定义指标)或性能计数器遥测类型进行采样。这些类型始终被排除在采样之外,因为精度的降低会这些遥测类型非常不受欢迎。"

我可以确认这不是延迟,我已经尝试等待很多小时以查看丢失的是否出现。有什么想法吗?

嗯,您正在跟踪一个依赖项,而不是一个指标(它们存储在 customMetrics table 中)。并且由于您正在跟踪依赖性采样可能是原因。

要跟踪指标,请使用描述的方法 in the docs:

_telemetryClient.GetMetric("myMetric").TrackValue(42);

If we want to simply time the duration of a block of code inside a using statement, is StartOperation() not the way to go then? Is that some other concept than metrics?

这绝对是一个选项,因为依赖项遥测确实存储了执行所花费的时间。但它存储在与度量不同的 table 中,并且需要进行抽样。因此,您可以从采样中排除依赖性,但这可能会导致大量数据摄取。或者您创建自己的代码来跟踪这样的指标:

public class MetricOperation : IDisposable
{
    private readonly TelemetryClient _tc;
    private readonly Stopwatch _sw = new Stopwatch();
    private readonly string _operationName;
    
    public MetricOperation(TelemetryClient tc, string operationName)
    {
        _tc = tc;
        _operationName = operationName;
        
        _sw.Start();
    }
    
    public void Dispose()
    {
        _sw.Stop();
        _tc.GetMetric(_operationName).TrackValue(_sw.ElapsedMilliseconds);
    }
}

然后这样称呼它

using(new MetricOperation(tc, "metricName"))
{
    // some long running operation
}