我有一个连接到应用程序洞察的应用程序,并且我们有相当数量的请求。绝大多数都低于 80 毫秒,但也有一些超过 300 毫秒。 我遇到的问题是,当我们想要调查较长的查询时,我们发现我们没有它们的样本,因为快速运行的请求已经填满了样本配额。
我想要做的是防止/限制快速成功的请求包含在示例中,但仍作为请求总体指标的一部分。
我尝试了自定义 ITelemetryProcessor 来排除快速调用,但它们在指标计数上也不再可见,因此我不知道它们是否被调用。
我尝试了 ITelemetryInitializer 并设置 request.ProactiveSamplingDecision = SamplingDecision.SampledOut 但这也将其从指标中删除。
该应用程序使用C# .Net 4.8(完整框架)
有没有人做过类似的事情或者可以帮助我实现我想要做的事情?
遥测初始化程序代码:
public class MyTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
var requestTelemetry = telemetry as RequestTelemetry;
// Is this a TrackRequest() ?
if (requestTelemetry == null) return;
if (requestTelemetry.Success == true && requestTelemetry.Duration.TotalMilliseconds < 100)
{
requestTelemetry.ProactiveSamplingDecision = SamplingDecision.SampledOut;
}
}
}
TelementryFilter 代码:
public class SuccessfulTelementryFilter : ITelemetryProcessor
{
private ITelemetryProcessor Next { get; set; }
public SuccessfulTelementryFilter(ITelemetryProcessor next)
{
this.Next = next;
}
public void Process(ITelemetry item)
{
var request = item as RequestTelemetry;
if (request != null && request.Success == true && request.Duration.Milliseconds < 100)
{
return;
}
this.Next.Process(item);
}
}
关于
MyTelemetryInitializer
,将 ProactiveSamplingDecision
设置为 SamplingDecision.SampledOut
确实会将遥测项目从整体指标中排除,这就是为什么您在指标中看不到它们。相反,您可以使用 IRequestTelemetry.ProactiveSamplingEligibility
属性来阻止采样,而不将其从指标中排除。
public class MyTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
if (telemetry is RequestTelemetry requestTelemetry)
{
if (requestTelemetry.Success == true && requestTelemetry.Duration.TotalMilliseconds < 100)
{
requestTelemetry.ProactiveSamplingEligibility = true;
}
}
}
}
ProactiveSamplingEligibility
进一步过滤遥测项目,以便仅采样符合您条件的遥测项目。public class SuccessfulTelemetryFilter : ITelemetryProcessor
{
private ITelemetryProcessor Next { get; set; }
public SuccessfulTelemetryFilter(ITelemetryProcessor next)
{
this.Next = next;
}
public void Process(ITelemetry item)
{
var request = item as RequestTelemetry;
if (request != null && request.ProactiveSamplingEligibility == true)
{
return;
}
this.Next.Process(item);
}
}
过滤后的回复: