ApplicationInsights - 防止快速成功请求的样本

问题描述 投票:0回答:1

我有一个连接到应用程序洞察的应用程序,并且我们有相当数量的请求。绝大多数都低于 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);
    }
}
asp.net-mvc azure-application-insights .net-4.8
1个回答
0
投票

关于

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);
    }
}

过滤后的回复:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.