我们部署了一个一直在使用 Application Insights(版本 1.0.0.4220)的 Azure Web 角色,但是,我们正在超出我们的数据配额。是否可以配置 Application Insights 忽略特定 URL?
我们有一个状态 Web 服务,它获得大量流量但从不抛出任何错误。如果我可以排除这个服务 URL,我可以将我的数据使用量减少一半。
我们部署了一个一直在使用 Application Insights(版本 1.0.0.4220)的 Azure Web 角色,但是,我们正在超出我们的数据配额。是否可以配置 Application Insights 忽略特定 URL?
我们有一个状态 Web 服务,它获得大量流量但从不抛出任何错误。如果我可以排除这个服务 URL,我可以将我的数据使用量减少一半。
不支持开箱即用。采样功能即将推出,但无法通过特定 url 进行配置。您可以实现自己的频道,该频道将具有您的自定义过滤。基本上,您的频道将收到要发送的事件,您检查是否要发送它,然后如果是,则传递给标准 AI 频道。 在这里,您可以阅读有关自定义渠道的更多信息。
自从写了这篇博文以来,有两件事发生了变化:
更新:最新版本支持过滤:https ://azure.microsoft.com/en-us/blog/request-filtering-in-application-insights-with-telemetry-processor/
我的团队有一个类似的情况,我们需要过滤出成功的图像请求的 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" />
或者,您可以禁用自动请求收集并仅保留异常自动收集,只需从 applicationinsights.config 中删除 RequestTrackingModule 行。
如果您仍然需要收集一些请求,而不仅仅是过滤掉所有请求,您可以在知道您肯定需要记录此请求后,在适当的位置从您的代码中调用 TrackRequest()(在 TelemetryClient 类的对象中)对人工智能。
更新:过滤功能已在一段时间前发布,允许更轻松地排除某些遥测项目。