是否可以从 Application Insights 中排除 url?
Is it possible to exclude a url from Application Insights?
我们部署了一个一直在使用 Application Insights(版本 1.0.0.4220)的 Azure Web 角色,但是,我们正在超出我们的数据配额。是否可以配置 Application Insights 忽略特定的 URL?
我们有一个状态 Web 服务,它获得大量流量但从不抛出任何错误。如果我可以排除这项服务 URL 我可以将数据使用量减半。
不支持开箱即用。即将推出采样功能,但无法通过特定 url 配置。您可以实施自己的频道,该频道将具有您的自定义过滤功能。基本上你的频道将获得要发送的事件,你检查是否要发送它,然后如果是则传递到标准 AI 频道。 Here 您可以阅读有关自定义渠道的更多信息。
自从撰写此博客 post 以来,有两件事发生了变化:
- 通道应仅实现 ITelemetryChannel 接口(ISupportConfiguration 已删除)
- 您应该使用 Microsoft.ApplicationInsights.Extensibility.Web.TelemetryChannel
而不是 PersistenceChannel
更新:最新版本支持过滤:https://azure.microsoft.com/en-us/blog/request-filtering-in-application-insights-with-telemetry-processor/
或者,您可以禁用自动请求收集并仅保留异常自动收集,只需从 applicationinsights.config.
中删除 RequestTrackingModule 行
如果您仍然需要收集一些请求,而不仅仅是过滤掉所有请求,您可以在您之后的适当位置从您的代码中调用 TrackRequest()(在 TelemetryClient class 的对象中)知道您当然需要将此请求记录到 AI。
更新:Filtering feature has been released 前段时间,允许更轻松地排除某些遥测项目。
我的团队有类似的情况,我们需要过滤掉成功的图像请求的 url(我们有很多这样的 url,这使我们达到了 30k datapoints/min 的限制)。
我们最终使用 Sergey Kanzhelevs blog post 中 class 的修改版本来过滤掉这些。
我们创建了一个 RequestFilterChannel class,它是 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;
}
}
创建 class 后,您需要将其添加到 ApplicationInsights.config 文件中。
替换此行:
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
link 你的class:
<TelemetryChannel Type="XXX.RequestFilterChannel, XXX" />
我们部署了一个一直在使用 Application Insights(版本 1.0.0.4220)的 Azure Web 角色,但是,我们正在超出我们的数据配额。是否可以配置 Application Insights 忽略特定的 URL?
我们有一个状态 Web 服务,它获得大量流量但从不抛出任何错误。如果我可以排除这项服务 URL 我可以将数据使用量减半。
不支持开箱即用。即将推出采样功能,但无法通过特定 url 配置。您可以实施自己的频道,该频道将具有您的自定义过滤功能。基本上你的频道将获得要发送的事件,你检查是否要发送它,然后如果是则传递到标准 AI 频道。 Here 您可以阅读有关自定义渠道的更多信息。
自从撰写此博客 post 以来,有两件事发生了变化:
- 通道应仅实现 ITelemetryChannel 接口(ISupportConfiguration 已删除)
- 您应该使用 Microsoft.ApplicationInsights.Extensibility.Web.TelemetryChannel 而不是 PersistenceChannel
更新:最新版本支持过滤:https://azure.microsoft.com/en-us/blog/request-filtering-in-application-insights-with-telemetry-processor/
或者,您可以禁用自动请求收集并仅保留异常自动收集,只需从 applicationinsights.config.
中删除 RequestTrackingModule 行如果您仍然需要收集一些请求,而不仅仅是过滤掉所有请求,您可以在您之后的适当位置从您的代码中调用 TrackRequest()(在 TelemetryClient class 的对象中)知道您当然需要将此请求记录到 AI。
更新:Filtering feature has been released 前段时间,允许更轻松地排除某些遥测项目。
我的团队有类似的情况,我们需要过滤掉成功的图像请求的 url(我们有很多这样的 url,这使我们达到了 30k datapoints/min 的限制)。
我们最终使用 Sergey Kanzhelevs blog post 中 class 的修改版本来过滤掉这些。
我们创建了一个 RequestFilterChannel class,它是 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;
}
}
创建 class 后,您需要将其添加到 ApplicationInsights.config 文件中。
替换此行:
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
link 你的class:
<TelemetryChannel Type="XXX.RequestFilterChannel, XXX" />