是否可以从Application Insights中排除网址?

时间:2015-06-30 22:37:14

标签: azure-application-insights

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

我们有一个状态网络服务,可以获得大量流量但不会丢失任何错误。如果我可以排除这一个服务URL,我可以减少一半的数据使用量。

3 个答案:

答案 0 :(得分:7)

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

自撰写此博客文章以来,有两件事情发生了变化:

  • 频道应该只实现ITelemetryChannel接口(已删除ISupportConfiguration)
  • 而不是PersistenceChannel,您应该使用Microsoft.ApplicationInsights.Extensibility.Web.TelemetryChannel

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

答案 1 :(得分:4)

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

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

我们创建了一个 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" />  

答案 2 :(得分:2)

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

如果您仍然需要收集一些请求,而不仅仅是过滤掉所有请求,那么您可以在知道自己确实需要之后,在适当的位置从代码中调用TrackRequest()(在TelemetryClient类的对象中)将此请求记录到AI。