16

我们部署了一个一直在使用 Application Insights(版本 1.0.0.4220)的 Azure Web 角色,但是,我们正在超出我们的数据配额。是否可以配置 Application Insights 忽略特定 URL?

我们有一个状态 Web 服务,它获得大量流量但从不抛出任何错误。如果我可以排除这个服务 URL,我可以将我的数据使用量减少一半。

4

3 回答 3

8

不支持开箱即用。采样功能即将推出,但无法通过特定 url 进行配置。您可以实现自己的频道,该频道将具有您的自定义过滤。基本上,您的频道将收到要发送的事件,您检查是否要发送它,然后如果是,则传递给标准 AI 频道。 在这里,您可以阅读有关自定义渠道的更多信息。

自从写了这篇博文以来,有两件事发生了变化:

  • 通道应仅实现 ITelemetryChannel 接口(已删除 ISupportConfiguration)
  • 而不是 PersistenceChannel 你应该使用 Microsoft.ApplicationInsights.Extensibility.Web.TelemetryChannel

更新:最新版本支持过滤:https ://azure.microsoft.com/en-us/blog/request-filtering-in-application-insights-with-telemetry-processor/

于 2015-06-30T23:39:38.837 回答
5

我的团队有一个类似的情况,我们需要过滤出成功的图像请求的 url(我们有很多这样的 URL,这使我们达到了 30k 数据点/分钟的限制)。

我们最终在 Sergey Kanzhelevs博客文章中使用了该类的修改版本来过滤掉这些。

我们创建了一个RequestFilterChannel类,它是ServerTelemetryChannel的一个实例,并扩展了该Send方法。在这个方法中,我们测试每个要发送的遥测项目,看看它是否是一个图像请求,如果是,我们阻止它被发送。

public class RequestFilterChannel : ITelemetryChannel, ITelemetryModule
{
    private ServerTelemetryChannel channel;

    public RequestFilterChannel()
    {
        this.channel = new ServerTelemetryChannel();
    }

    public void Initialize(TelemetryConfiguration configuration)
    {
        this.channel.Initialize(configuration);
    }

    public void Send(ITelemetry item)
    {
        if (item is RequestTelemetry)
        {
            var requestTelemetry = (RequestTelemetry) item;

            if (requestTelemetry.Success && isImageRequest((RequestTelemetry) item))
            {
                // do nothing
            }
            else
            {
                this.channel.Send(item); 
            }
        }
        else
        {
            this.channel.Send(item);
        }
    }

    public bool? DeveloperMode
    {
        get { return this.channel.DeveloperMode; }
        set { this.channel.DeveloperMode = value; }
    }

    public string EndpointAddress
    {
        get { return this.channel.EndpointAddress; }
        set { this.channel.EndpointAddress = value; }
    }

    public void Flush()
    {
        this.channel.Flush();
    }

    public void Dispose()
    {
        this.channel.Dispose();
    }

    private bool IsImageRequest(RequestTelemetry request)
    {
        if (request.Url.AbsolutePath.StartsWith("/image.axd"))
        {
            return true;
        }

        return false;
    }
}

创建类后,您需要将其添加到ApplicationInsights.config文件中。

替换这一行:

<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>

带有指向您的课程的链接:

<TelemetryChannel Type="XXX.RequestFilterChannel, XXX" />  
于 2015-10-30T13:45:59.560 回答
3

或者,您可以禁用自动请求收集并仅保留异常自动收集,只需从 applicationinsights.config 中删除 RequestTrackingModule 行。

如果您仍然需要收集一些请求,而不仅仅是过滤掉所有请求,您可以在知道您肯定需要记录此请求后,在适当的位置从您的代码中调用 TrackRequest()(在 TelemetryClient 类的对象中)对人工智能。

更新过滤功能已在一段时间前发布,允许更轻松地排除某些遥测项目。

于 2015-06-30T23:45:36.817 回答