我們部署了一個Azure Web角色,該角色一直使用Application Insights(版本1.0.0.4220),但是,我們正在審查我們的數據配額。是否可以配置Application Insights忽略特定的URL?是否可以從Application Insights中排除url?
我們有一個狀態網絡服務,可以獲得大量的流量,但從不拋出任何錯誤。如果我可以排除這一個服務網址,我可以將我的數據使用量減半。
我們部署了一個Azure Web角色,該角色一直使用Application Insights(版本1.0.0.4220),但是,我們正在審查我們的數據配額。是否可以配置Application Insights忽略特定的URL?是否可以從Application Insights中排除url?
我們有一個狀態網絡服務,可以獲得大量的流量,但從不拋出任何錯誤。如果我可以排除這一個服務網址,我可以將我的數據使用量減半。
開箱不支持。採樣功能即將推出,但不能通過特定的url進行配置。您可以實施自己的頻道,以進行自定義過濾。基本上你的頻道會得到要發送的事件,你檢查是否要發送它,然後如果是通過標準的AI頻道。 Here你可以閱讀更多關於自定義頻道的信息。 有一些改變,因爲這個博客帖子已經寫了兩件事情:通道應實現僅ITelemetryChannel接口(ISupportConfiguration取出),並代替PersistenceChannel你應該使用Microsoft.ApplicationInsights.Extensibility.Web.TelemetryChannel
UPDATE:最新版本具有過濾支持:https://azure.microsoft.com/en-us/blog/request-filtering-in-application-insights-with-telemetry-processor/
或者,您可以禁用自動請求集合並僅保留異常自動收集,只需從applicationinsights.config中刪除RequestTrackingModule行即可。
如果您還需要收集一些要求,而不僅僅是過濾所有的,你可以調用TrackRequest()(在TelemetryClient類的對象),在適當的地方你的代碼,你知道後,你肯定需要將此請求記錄到AI。
有趣的選擇,雖然阿納斯塔西亞提出的抽樣方法看起來可能更容易實施。我必須在我的應用程序中插入TrackRequest()調用。不過,很高興知道這個選項。謝謝。 –
我的團隊有一個類似的情況,我們需要過濾成功的圖像請求(我們有很多這些使得我們達到30k數據點/分鐘限制)的url。
我們最終在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" />
好的提示,謝謝符文。我幾個月來一直在使用Sergey博客的代碼,並且它一直運行良好。但是我可以用你的技術來增強它,以將更大的油門值應用於我們的一次服務呼叫,從而獲得大部分流量。 –
這看起來很有希望。我會試一試。 –