为什么某些 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
}
我已经在我的应用程序中实现了自定义指标,以便将这些指标发送到 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
}