2015-06-30 50 views
6

我們部署了一個Azure Web角色,該角色一直使用Application Insights(版本1.0.0.4220),但是,我們正在審查我們的數據配額。是否可以配置Application Insights忽略特定的URL?是否可以從Application Insights中排除url?

我們有一個狀態網絡服務,可以獲得大量的流量,但從不拋出任何錯誤。如果我可以排除這一個服務網址,我可以將我的數據使用量減半。

回答

6

開箱不支持。採樣功能即將推出,但不能通過特定的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/

+0

這看起來很有希望。我會試一試。 –

1

或者,您可以禁用自動請求集合並僅保留異常自動收集,只需從applicationinsights.config中刪除RequestTrackingModule行即可。

如果您還需要收集一些要求,而不僅僅是過濾所有的,你可以調用TrackRequest()(在TelemetryClient類的對象),在適當的地方你的代碼,你知道後,你肯定需要將此請求記錄到AI。

+0

有趣的選擇,雖然阿納斯塔西亞提出的抽樣方法看起來可能更容易實施。我必須在我的應用程序中插入TrackRequest()調用。不過,很高興知道這個選項。謝謝。 –

3

我的團隊有一個類似的情況,我們需要過濾成功的圖像請求(我們有很多這些使得我們達到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" /> 
+0

好的提示,謝謝符文。我幾個月來一直在使用Sergey博客的代碼,並且它一直運行良好。但是我可以用你的技術來增強它,以將更大的油門值應用於我們的一次服務呼叫,從而獲得大部分流量。 –

相關問題