Application Insights 是 Azure 上一個很好用的監控、診斷、收集日誌的服務,不過它不便宜,它的不便宜來自於搭配的 Log Analytics 服務,如果採用隨用隨付,每 GB 的資料量就要價 $4.03 鎂,而且 Application Insights 預設又什麼模組都幫我們打開,有一些模組其實我們可以暫時關掉省一點錢。
Application Insights Modules
如果我們想知道 Application Insights 有支援哪些模組?我們可以從 ApplicationInsightsServiceOptions Settings 這張表裡面得知,夯不啷噹十幾個模組,而且幾乎預設是全部打開的。
- PerformanceCounterCollectionModule
- RequestTrackingTelemetryModule
- EventCounterCollectionModule
- DependencyTrackingTelemetryModule
- AppServicesHeartbeatTelemetryModule
- AzureInstanceMetadataTelemetryModule
- QuickPulseMetricStream(LiveMetrics)
- AdaptiveSampling
- Heartbeat
- AutoCollectedMetricExtractor
- RequestCollectionOptions.TrackExceptions
- DiagnosticsTelemetryModule
Data Volume Trends
如果我們想知道哪些模組耗費的資料量最多?我們可以到 Application Insights 的管理介面,找到「Usage and estimated costs
」有一個「This query
」的超連結。
點下去之後,就會跳到一個資料表的查詢介面,預設會帶入一組查詢語句,幫我們列出統計的資料量,方便我們來去判斷特定模組耗費的資料量,不過它預設是用每天幾 GB 的單位來呈現,我們可以自己調整想要的呈現單位,我在這邊就把它改成每小時幾 MB。
關閉不要的模組
我這邊是用 ASP.NET Core 當範例,首先安裝 Microsoft.ApplicationInsights.AspNetCore
套件,接著在 Startup.cs 的 ConfigureServices() 方法中,加入 services.AddApplicationInsightsTelemetry(Action<ApplicationInsightsServiceOptions> options)
這個擴充方法,然後在裡面指定 Application Insights 服務的 Instrumentation Key
,或是 Connection String
也可以。
public class Startup
{
// ...
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddApplicationInsightsTelemetry(
options =>
{
options.InstrumentationKey = "Instrumentation Key";
// OR
options.ConnectionString = "Connection String";
});
}
// ...
}
再來看我們是要只啟動需要的模組
,還是關閉資料量比較大的模組
,都可以在方法裡面做設定。
public class Startup
{
// ...
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddApplicationInsightsTelemetry(
options =>
{
// ...
options.EnablePerformanceCounterCollectionModule = false;
options.EnableEventCounterCollectionModule = false;
options.EnableDependencyTrackingTelemetryModule = false;
});
}
// ...
}
還有一個設定的方式是從 appsettings.json
下手,我們新增一個名為 ApplicationInsights
的 Section,對應的設定名稱跟 ApplicationInsightsServiceOptions
的屬性名稱一樣。
{
"...": "...",
"ApplicationInsights": {
"InstrumentationKey": "Instrumentation Key",
"ConnectionString": "Connection String",
"EnablePerformanceCounterCollectionModule": false,
"EnableEventCounterCollectionModule": false,
"EnableDependencyTrackingTelemetryModule": false
}
}
InstrumentationKey 及 ConnectionString 則一設定即可
然後在 ConfigureServices() 方法中改加入 services.AddApplicationInsightsTelemetry(IConfiguration configuration)
這個擴充方法就可以了,這也是官方推薦的設定方式。
public class Startup
{
// ...
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddApplicationInsightsTelemetry(this.Configuration);
}
// ...
}
關掉想關的模組之後,過一段時間再來看統計圖表,沒意外的話應該不會再有相關的資料量記錄。