Application Insights越做越強大,基本上程式內部怎樣運作,Application Insights都可以蒐集到相關資訊,不過,有時候這樣會帶來一種困惱就是在某些情境下的資訊,並不想被蒐集到Application Insights內進行分析,因為有可能造成分析錯誤或是統計資訊的誤差,舉例來說,目前發現如果在IIS中針對Web Site設定Preload
功能,在Application Insights就會多一筆Request,帶出來的資訊是localhost/XXX
,這樣資訊對目前數據分析並不重要,但是,又會被多記一筆Request的Count。
因此,像這種資訊就會希望不要被記錄到Application Insights中,目前,在Application Insights的Portal中似乎不能設定過濾訊息,所以,就必須從程式面著手
自訂Filter
從程式面就是需要自己訂定Filter功能,首先自己建立一個叫做TelemetryFilter
的Class,並繼承ITelemetryProcessor
,從官方解釋ITelemetryProcessor
為
讓您更直接地控制包含在遙測串流中或排除於遙測串流外的內容
所以,透過它可以獲取要送到Application Insights的檢測資訊,進而做一些篩檢或是變更等動作,繼承ITelemetryProcessor
會變成如下
在這個Process中,針對遙測資訊進行處理,以剛剛案例來說,希望排除到http://localhost/XXX
資訊。就可以在這處理器這樣寫
把Item轉型為Request Type,並抓取資料中的Url
進行過濾。如果,有符合過濾條件的,就拋棄掉這個訊息不做上報的動作,如果不是,則透過Process
處理收集的資訊項目。完整的寫法如下
有這樣方式,想要過濾甚麼就可自己去定義了
註冊過濾器
開發完畢後,還必須把過濾器註冊,這樣才有辦法當Application Insights啟動後,自動掛載這個過濾器。要註冊過濾器,只要在ApplicationInsights.config
中設定就可以
這樣就可以一個簡單的Application Insights資訊過濾器就可以運作,簡單說,這個就是AP & Application Insights訊息的中繼站,所有資訊都會先到這邊再往Azure送,換句話說要在這邊做置換資訊動作也是可以的