Application Insights 中的取樣
取樣是 Application Insights 中的功能。 若要既能減少遙測流量、資料成本和儲存成本,又能保有應用程式資料在統計上的正確分析,便建議使用此方法。 取樣也可協助您避免 Application Insights 節流您的遙測。 取樣篩選條件會選取相關的項目,以便您可以在執行診斷調查時,瀏覽於專案之間。
在入口網站中呈現計量計數時,會將其重新標準化,以將取樣納入考慮。 這樣做會將對統計資料的任何影響降到最低。
注意
- 如果您已採用我們的 OpenTelemetry Distro,並正在尋找設定選項,請參閱啟用取樣。
警告
我們建議為新應用程式或客戶提供 Azure 監視器 Application Insights 的 Azure 監視器 OpenTelemetry 散發版本。 Azure 監視器 OpenTelemetry 散發版本提供與 Application Insights SDK 類似的功能和體驗。 您可以使用適用於 .NET、Node.js 和 Python 的移轉指南,從 Application Insights SDK 移轉,但我們仍在努力新增更多功能以提供回溯相容性。
簡短摘要
- 有三種不同類型的取樣:調適型取樣、固定取樣率和擷取取樣。
- 調適型取樣預設會在所有最新版 Application Insights ASP.NET 和 ASP.NET Core 軟體開發套件 (SDK) 及 Azure Functions 中啟用。
- 最新版 ASP.NET、ASP.NET Core、Java (代理程式和 SDK)、JavaScript 和 Python 的 Application Insights SDK 有固定取樣率可供您使用。
- 在 JAVA 中,有取樣覆寫可供您使用,而且當您需要將不同的取樣率套用至選取的相依項目、要求和健康情況檢查時很有用。 例如,使用取樣覆寫可以抽離一些雜訊相依項目,同時將所有重要錯誤都保持在 100%。 此行為是一種可讓您精確控制遙測的固定取樣形式。
- 擷取取樣在 Application Insights 服務端點上運作。 僅適用於沒有實施其他取樣的時機。 如果 SDK 對遙測資料取樣,擷取取樣會停用。
- 若是 Web 應用程式,如果您記錄自訂事件,而且需要確保一組事件會一起保留或捨棄,則事件必須具有相同
OperationId
的值。 - 如果您要撰寫分析查詢,請 考慮到取樣。 特別是,您應該使用
summarize sum(itemCount)
,而非只計算記錄。 - 某些遙測類型 (包括效能計量和自訂計量) 會一律保留,不論是否已啟用取樣。
下表摘要說明每個 SDK 和應用程式類型的可用取樣類型:
Application Insights SDK | 支援調適型取樣 | 支援固定取樣率 | 支援擷取取樣 |
---|---|---|---|
ASP.NET | 是 (依預設啟用) | 是 | 只有在沒有實施其他取樣時 |
ASP.NET Core | 是 (依預設啟用) | 是 | 只有在沒有實施其他取樣時 |
Azure Functions | 是 (依預設啟用) | No | 只有在沒有實施其他取樣時 |
Java | No | 是 | 只有在沒有實施其他取樣時 |
JavaScript | No | 是 | 只有在沒有實施其他取樣時 |
Node.JS | No | 是 | 只有在沒有實施其他取樣時 |
Python | No | 是 | 只有在沒有實施其他取樣時 |
All others | No | 無 | 是 |
注意
使用取樣的時機
一般而言,對於大部分的小型和中型應用程式,您不需要取樣。 您可以透過收集所有使用者活動的相關資料,取得最有用的診斷資訊和最精確的統計資料。
取樣的主要優點如下:
- 當您的應用程式在短時間間隔內傳送高比率的遙測資料時,Application Insights 服務會捨棄 (「節流」) 資料點。 取樣可減少應用程式看到節流發生的可能性。
- 保持在定價層的資料點 配額 內。
- 若要從收集的遙測降低網路流量。
取樣的運作方式
採樣演算法會決定要保留或捨棄哪些遙測項目,無論 SDK 或 Application Insights 服務是否執行取樣。 遵循規則進行以保持所有相互關聯的資料點不變,確保 Application Insights 提供可採取動作的可靠診斷體驗,即使資料較少也如此。 例如,如果樣本包含失敗的要求,則將保留所有相關的遙測項目,例如例外狀況和追蹤。 如此一來,當您在 Application Insights 中檢視要求詳細資料時,您一律可以看到要求和其相關聯的遙測。
取樣決策會以要求的作業識別碼為依據,這表示屬於特定作業的所有遙測項目不是保留就是捨棄。 對於未設定作業識別碼的遙測項目 (例如,在沒有 HTTP 內容的情況下,從非同步執行緒報告的遙測項目),取樣只會擷取每種類型的遙測項目百分比。
向您呈現遙測資料時,Application Insights 服務會透過收集時所使用的相同取樣百分比來調整計量,以補償遺漏的資料點。 因此,在 Application Insights 中查看遙測時,使用者會看到統計正確也接近實際數的近似值。
近似值的精確度很大程度上取決於設定的取樣百分比。 此外,對於處理大量使用者類似要求的應用程式,精確度也會增加。 另一方面,對於未處理大量負載的應用程式,不需要取樣,因為這些應用程式通常可以傳送其所有遙測資料,同時保持在配額內,而不會因節流導致資料遺失。
取樣類型
有三種不同的取樣方法:
調適型取樣會自動調整來自 ASP.NET/ASP.NET Core 應用程式中 SDK 以及來自 Azure Functions 所傳送的遙測量。 當您使用 ASP.NET 或 ASP.NET Core SDK 時,這是預設取樣。 調適型取樣目前僅適用於 ASP.NET/ASP.NET Core 伺服器端遙測,以及適用於 Azure Functions。
固定取樣率可以減少來自 ASP.NET 或 ASP.NET Core 或 Java 伺服器,以及來自使用者瀏覽器兩者所傳送的遙測量。 您可以設定速率。 用戶端和伺服器會同步處理其取樣,讓您可以在 [搜尋] 中於相關的頁面檢視和要求之間瀏覽。
擷取取樣發生於 Application Insights 服務端點。 其會捨棄以您設定的取樣率從應用程式送達的一些遙測資料。 其不會減少從應用程式傳送的遙測流量,但可協助您保持在每月配額內。 擷取取樣的主要優點是您可以設定取樣率,而不需重新部署您的應用程式。 擷取取樣針對所有伺服器和用戶端統一運作,但有任何其他類型的取樣執行時,其就不適用。
重要
如果針對遙測類型啟用了調適型或固定速率取樣方法,則會停用該遙測的擷取取樣。 不過,在 SDK 層級從取樣中排除的遙測類型仍有可能以入口網站中設定的速率進行擷取取樣。
調適性取樣
調適性取樣會影響從您的 Web 伺服器應用程式傳送給 Application Insights 服務端點的遙測量。
提示
當您使用 ASP.NET SDK 或 ASP.NET Core SDK 時,調適型取樣依預設為啟用狀態,Azure Functions 的調適型取樣也會依預設啟用。
資料量會自動調整以保持在 MaxTelemetryItemsPerSecond
速率限制內。 如果應用程式產生低遙測 (例如在偵測期間或使用量低時),則只要資料量保持在 MaxTelemetryItemsPerSecond
以下,便不會卸除項目。 遙測量增加時,便會增加取樣速率以達到目標資料量。 此調整會定期重新計算,取決於傳出傳輸速率的移動平均。
為了要讓遙測量達到目標,系統會捨棄部分已產生的遙測。 但就跟其他取樣類型一樣,演算法會保留相關的遙測項目。 舉例來說,當您在 [搜尋] 中檢查遙測時,將能夠尋找與特定例外狀況相關的要求。
計量計數 (例如要求率及例外狀況率) 會受到調整來補償取樣率,讓它們能在計量瀏覽器中顯示近似值。
設定 ASP.NET 應用程式的調適型取樣
注意
本小節適用於 ASP.NET 應用程式,不適用於 ASP.NET Core 應用程式。 請在本文件後續內容中,深入了解設定 ASP.NET Core 應用程式的調適型取樣。
在 ApplicationInsights.config
中,您可以調整 AdaptiveSamplingTelemetryProcessor
節點中的數個參數。 顯示的數字是預設值:
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
邏輯運算的目標比率,是調適型演算法在每個伺服器主機上收集的目的。 如果 Web 應用程式在許多主機上執行,請減少此值,以保持在您的 Application Insights 入口網站的流量目標速率內。
<EvaluationInterval>00:00:15</EvaluationInterval>
重新評估目前遙測比率的時間間隔。 評估是以移動平均來執行。 如果您的遙測會突然暴增,您可能想要縮短此間隔。
<SamplingPercentageDecreaseTimeout>00:02:00</SamplingPercentageDecreaseTimeout>
當取樣百分比值變更時,便會決定我們多快可再次減少取樣百分比以擷取較少的資料。
<SamplingPercentageIncreaseTimeout>00:15:00</SamplingPercentageIncreaseTimeout>
當取樣百分比值變更時,便會決定我們多久可再次增加取樣百分比以擷取較多的資料。
<MinSamplingPercentage>0.1</MinSamplingPercentage>
隨著取樣百分比改變,我們獲允許可設定的最小值是多少?
<MaxSamplingPercentage>100.0</MaxSamplingPercentage>
隨著取樣百分比改變,我們獲允許可設定的最大值是多少?
<MovingAverageRatio>0.25</MovingAverageRatio>
在計算移動平均值時,此值可指定應指派給最新值的權數。 使用等於或小於 1 的值。 較小的值會讓演算法不易受突然的變更影響。
<InitialSamplingPercentage>100</InitialSamplingPercentage>
應用程式啟動時要取樣的遙測量。 請勿在偵錯時降低此值。
<ExcludedTypes>type;type</ExcludedTypes>
不要進行取樣的類型清單,清單以分號分隔。 可辨識的類型為:
Dependency
、Event
、Exception
、PageView
、Request
、Trace
。 傳送指定類型的所有遙測;未指定的類型會進行取樣。<IncludedTypes>type;type</IncludedTypes>
要進行取樣的類型清單,清單以分號分隔。 可辨識的類型為:
Dependency
、Event
、Exception
、PageView
、Request
、Trace
。 指定的類型會進行取樣;其他類型的遙測則會一律傳送。
若要關閉調適型取樣,請從 ApplicationInsights.config
移除 AdaptiveSamplingTelemetryProcessor
節點。
替代方法:以程式碼設定調適性取樣
除了在 .config
檔案中設定取樣參數之外,您還可以程式設計方式設定這些值。
從
AdaptiveSamplingTelemetryProcessor
檔案移除所有.config
節點。使用下列程式碼片段設定調適型取樣:
using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation; using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel; // ... var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // For older versions of the Application Insights SDK, use the following line instead: // var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder; // Enable AdaptiveSampling so as to keep overall telemetry volume to 5 items per second. builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5); // If you have other telemetry processors: builder.Use((next) => new AnotherProcessor(next)); builder.Build();
(深入了解遙測處理器)。
您也可以個別調整每個遙測類型的取樣率,或甚至可以排除特定類型而完全不取樣:
// The following configures adaptive sampling with 5 items per second, and also excludes Dependency telemetry from being subjected to sampling.
builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
設定 ASP.NET Core 應用程式的調適型取樣
ASP.NET Core 應用程式可以在程式碼中或透過 appsettings.json
檔案加以設定。 如需詳細資訊,請參閱 ASP.NET Core 中的組態。
所有的 ASP.NET Core 應用程式預設會啟用調適型取樣。 您可以停用或自訂取樣行為。
關閉調適性取樣
新增 Application Insights 服務時,可以停用預設的取樣功能。
在 Program.cs
檔案中的 WebApplication.CreateBuilder()
方法之後新增 ApplicationInsightsServiceOptions
:
var builder = WebApplication.CreateBuilder(args);
var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
aiOptions.EnableAdaptiveSampling = false;
builder.Services.AddApplicationInsightsTelemetry(aiOptions);
var app = builder.Build();
上方程式碼會停用調適型取樣。 請遵循下列步驟使用更多自訂選項新增取樣。
設定取樣設定
使用下列 TelemetryProcessorChainBuilder
的擴充方法自訂取樣行為。
重要
如果您使用此方法設定取樣,請務必在呼叫 AddApplicationInsightsTelemetry()
時,將 aiOptions.EnableAdaptiveSampling
屬性設定為 false
。 進行此項變更之後,您接著必須完全遵循下列程式碼區塊中的指示,才能就地使用您的自訂項目重新啟用調適型取樣。 若無法這麼做,可能會導致資料擷取過量。 請務必在變更取樣設定後進行測試,並設定適當的每日資料上限,以協助控制成本。
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.ApplicationInsights.Extensibility;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
// Using adaptive sampling
telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);
// Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling:
// telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
telemetryProcessorChainBuilder.Build();
});
builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
EnableAdaptiveSampling = false,
});
var app = builder.Build();
您可以使用 SamplingPercentageEstimatorSettings 類別自訂其他取樣設定:
using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation;
telemetryProcessorChainBuilder.UseAdaptiveSampling(new SamplingPercentageEstimatorSettings
{
MinSamplingPercentage = 0.01,
MaxSamplingPercentage = 100,
MaxTelemetryItemsPerSecond = 5
}, null, excludedTypes: "Dependency");
設定 Azure Functions 的調適型取樣
請遵循此頁面中的指示,針對在 Azure Functions 中執行的應用程式設定調適型取樣。
固定取樣率
固定取樣率會減少來自網頁伺服器和網頁瀏覽器所傳送的流量。 但它會依照您設定的速率來降低遙測,這與調適性取樣不同。 固定取樣率可用於 ASP.NET、ASP.NET Core、Java 和 Python 應用程式。
就像其他技術一樣,固定取樣率也會保留相關項目。 固定取樣率也會同步用戶端及伺服器取樣,讓相關項目能夠保留。 例如,當您在搜尋中查看頁面檢視時,您可以尋找其相關伺服器要求。
在計量瀏覽器中,速率 (例如要求及例外狀況計數) 會乘以某個係數來補償取樣率,讓它們盡可能準確。
設定 ASP.NET 應用程式的固定取樣率
停用調適型取樣:在
ApplicationInsights.config
中,移除AdaptiveSamplingTelemetryProcessor
節點或將其設成註解。<TelemetryProcessors> <!-- Disabled adaptive sampling: <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond> </Add> -->
啟用固定取樣率模組。 將此程式碼片段新增至
ApplicationInsights.config
:在此範例中,SamplingPercentage 為 20,因此會取樣所有項目的 20%。 計量瀏覽器中的值將會乘以 (100/20) = 5 來補償。
<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.SamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <!-- Set a percentage close to 100/N where N is an integer. --> <!-- E.g. 50 (=100/2), 33.33 (=100/3), 25 (=100/4), 20, 1 (=100/100), 0.1 (=100/1000) --> <SamplingPercentage>20</SamplingPercentage> </Add> </TelemetryProcessors>
或者,除了在
ApplicationInsights.config
檔案中設定取樣參數之外,您還可以程式設計方式設定這些值:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel; // ... var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // For older versions of the Application Insights SDK, use the following line instead: // var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder; builder.UseSampling(10.0); // percentage // If you have other telemetry processors: builder.Use((next) => new AnotherProcessor(next)); builder.Build();
(深入了解遙測處理器)。
設定 ASP.NET Core 應用程式的固定取樣率
停用調適性取樣
您可以使用
ApplicationInsightsServiceOptions
在WebApplication.CreateBuilder()
方法之後進行變更:var builder = WebApplication.CreateBuilder(args); var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions(); aiOptions.EnableAdaptiveSampling = false; builder.Services.AddApplicationInsightsTelemetry(aiOptions); var app = builder.Build();
啟用固定取樣率模組
您可以在
WebApplication.CreateBuilder()
方法之後進行變更:var builder = WebApplication.CreateBuilder(args); builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration => { var builder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // Using fixed rate sampling double fixedSamplingPercentage = 10; builder.UseSampling(fixedSamplingPercentage); builder.Build(); }); builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions { EnableAdaptiveSampling = false, }); var app = builder.Build();
設定 JAVA 應用程式的取樣覆寫和固定取樣率
依預設,Java 自動檢測和 SDK 中未啟用任何取樣。 JAVA 自動檢測目前支援取樣覆寫和固定取樣率。 JAVA 不支援調適型取樣。
設定 JAVA 自動檢測
注意
針對取樣百分比,選擇接近 100/N 的百分比,其中 N 是整數。 目前取樣並不支援其他值。
設定 OpenCensus Python 應用程式的固定取樣率
使用最新版 OpenCensus Azure 監視器匯出工具檢測您的應用程式。
注意
固定取樣率不可用於計量匯出工具。 這表示自訂計量是唯一無法設定取樣的遙測類型。 計量匯出工具會傳送其追蹤的所有遙測。
用於追蹤的固定取樣率
您可以指定 sampler
作為 Tracer
設定的一部分。 如果未提供明確的取樣器,依預設會使用 ProbabilitySampler
。 ProbabilitySampler
預設會使用 1/10000 的比率,這表示每 10,000 個要求中有一個要求會傳送至 Application Insights。 如果您想要指定取樣率,請參閱下列詳細資料。
若要指定取樣率,請確定您的 Tracer
會指定取樣率介於 0.0 和 1.0 (含) 之間的取樣器。 取樣率 1.0 代表 100%,這表示您的所有要求都會作為遙測傳送至 Application Insights。
tracer = Tracer(
exporter=AzureExporter(
instrumentation_key='00000000-0000-0000-0000-000000000000',
),
sampler=ProbabilitySampler(1.0),
)
用於追蹤的固定取樣率
您可以透過修改 logging_sampling_rate
選用引數來設定 AzureLogHandler
的固定取樣率。 如果未提供引數,則會使用 1.0 的取樣率。 取樣率 1.0 代表 100%,這表示您的所有要求都會做為遙測傳送至 Application Insights。
handler = AzureLogHandler(
instrumentation_key='00000000-0000-0000-0000-000000000000',
logging_sampling_rate=0.5,
)
針對使用 JavaScript 的網頁設定固定取樣率
您可以設定 JavaScript 型網頁以使用 Application Insights。 遙測會從使用者瀏覽器內執行的用戶端應用程式傳送,而且頁面可以從任何伺服器裝載。
當您設定 JavaScript 型網頁以用於 Application Insights 時,請修改您從 Application Insights 入口網站取得的 JavaScript 程式碼片段。
提示
在包含 JavaScript 的 ASP.NET 應用程式中,該程式碼片段通常會位於 _Layout.cshtml
中。
在檢測金鑰之前插入類似 samplingPercentage: 10,
的一行:
<script>
var appInsights = // ...
({
// Value must be 100/N where N is an integer.
// Valid examples: 50, 25, 20, 10, 5, 1, 0.1, ...
samplingPercentage: 10,
instrumentationKey: ...
});
window.appInsights = appInsights;
appInsights.trackPageView();
</script>
針對取樣百分比,選擇接近 100/N 的百分比,其中 N 是整數。 目前取樣並不支援其他值。
協調伺服器端和用戶端取樣
用戶端 JavaScript SDK 會與伺服器端 SDK 一起參與固定取樣率。 受檢測頁面只會從伺服器端 SDK 決定納入取樣的相同使用者傳送用戶端遙測。 此邏輯的設計是為了在用戶端和伺服器端應用程式之間保有使用者工作階段的完整性。 因此,從 Application Insights 中的任何特定遙測項目中,您可以找到此使用者或工作階段的所有其他遙測項目,以及在 [搜尋] 中,您可以瀏覽相關頁面檢視和要求。
如果您的用戶端和伺服器端遙測未顯示協調範例:
- 請確認您在伺服器及用戶端皆已啟用取樣。
- 請檢查您的用戶端和伺服器中設定相同的取樣百分比。
- 確定 SDK 版本為 2.0 或更新版本。
擷取取樣
擷取取樣會在來自網頁伺服器、瀏覽器及裝置的遙測抵達 Application Insights 服務端點時開始作業。 雖然它不會減少來自您應用程式的遙測流量,但會減少 Application Insights 所處理及保留 (並收費) 的遙測量。
如果您的應用程式通常會超過每月配額,且您無法選擇使用任何一種 SDK 式的取樣類型,請使用這種類型的取樣。
在 [使用量和估計成本] 頁面中設定取樣率:
就跟其他取樣類型一樣,演算法會保留相關的遙測項目。 舉例來說,當您在 [搜尋] 中檢查遙測時,將能夠尋找與特定例外狀況相關的要求。 度量計量 (例如要求率及例外狀況率) 會正確地保留。
取樣捨去特定資料點,使這些資料點無法在任何 Application Insights 功能中使用,例如連續匯出。
調適型取樣或固定取樣率運作期間,擷取取樣不會運作。 ASP.NET SDK、ASP.NET Core SDK、Azure App Service 或 Application Insights 代理程式的調適型取樣會自動啟動。 當 Application Insights 服務端點接收遙測並偵測到取樣率低於 100% (表示作用中取樣) 時,便會忽略設定的擷取取樣率。
警告
入口網站圖格上顯示的值表示您設定的擷取取樣值。 如果有任何一種 SDK 取樣 (調適型或固定取樣率) 正在作業中,則該值不代表實際的取樣率。
我應該使用哪種類型的取樣?
如果是下列情形,請使用擷取取樣:
- 您經常用到每月的遙測配額。
- 您收到大量來自使用者網頁瀏覽器的遙測。
- 您使用不支援取樣的 SDK 版本,例如 ASP.NET 版本 2.0 之前的版本。
如果是下列情形,則使用固定取樣率:
- 您需要同步用戶端和伺服器之間的取樣,才能在相關事件間瀏覽。 例如,調查事件時搜尋中的頁面檢視和 HTTP 要求。
- 您對於應用程式的適當取樣百分比有信心。 應該夠高以取得精確的度量,但是低於超過價格配額和節流限制的取樣率。
使用調適性取樣:
如果欲使用其他形式取樣但條件不適用,建議使用適應型取樣。 此設定依預設會在 ASP.NET/ASP.NET Core SDK 中啟用。 在達到特定的比率下限之前,不會減少流量,因此可能完全不會對低使用率的網站進行取樣。
了解是否正常取樣
使用 Analytics 查詢以尋找取樣率。
union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType
如果您看到任何類型的 RetainedPercentage
小於 100,則表示正在對該類型的遙測進行取樣。
重要
Application Insights 不會在任何取樣技術中,對工作階段、計量 (包括自訂計量) 或效能計數器等遙測類型進行取樣。 由於不想要降低這些遙測類型的精確度,這些類型一律會從取樣中排除。
記錄查詢精確度和高取樣速率
當應用程式擴大時,可能會每秒處理數十個、數百個或數千個工作項目。 針對每個工作項目記錄事件,不論在資源或成本上都不符合效益。 Application Insights 會使用取樣,以彈性的方式適應持續增長的遙測量,並控制資源使用量和成本。
警告
如果在分散式作業中的任何應用程式啟用取樣,則分散式作業的端對端檢視的完整性可能會受到影響。 分散式作業中的每個應用程式都會做出不同的取樣決策,因此一個應用程式可能會儲存一個作業識別碼的遙測,而其他應用程式則可能會決定不要取樣相同作業識別碼的遙測。
隨著取樣率增加,記錄型查詢精確度會隨之降低,且數量會過高。 這只有在啟用取樣且取樣速率處於較高的範圍 (~ 60%) 時才會影響記錄式查詢的精確度。 影響會依據遙測類型、每個作業的遙測計數以及其他因素而有所差異。
SDK 使用預先彙總的計量來解決取樣造成的問題。 如需這些計量的詳細資訊,請參閱 Azure Application Insights - Azure 監視器| Microsoft Docs。SDK 會先識別記錄資料的相關屬性並擷取統計資料,才會進行取樣。 為了最小化資源使用和成本,計量會進行彙總。 此程序每分鐘產生幾個計量遙測項目,而不是產生數千個事件遙測項目。 例如,這些計量可能將「此 Web 應用程式已處理 25 個要求」回報給 MDM 帳戶,且傳送要求遙測記錄中的 itemCount
為 100。 這些預先彙總的計量提供精確的數字,並在取樣影響記錄型查詢結果時也能提供可靠的數字。 您可以在 Application Insights 入口網站的 [計量] 窗格上進行檢視。
常見問題集
取樣是否會影響警示精確度?
- 是。 只有取樣資料時才會觸發警示。 主動篩選可能會導致警示未如預期般引發。
注意
取樣不會套用至計量,但計量可以衍生自取樣資料。 因此,取樣可能會間接影響警示精確度。
ASP.NET 和 ASP.NET Core SDK 中的預設取樣行為為何?
- 如果您使用上述 SDK 的最新版本之一,則預設會啟用調適型取樣,每秒五個遙測項目。
根據預設,系統會新增兩個
AdaptiveSamplingTelemetryProcessor
節點,一個在取樣中包含Event
類型,另一個則排除該類型。 此設定將遙測限制為五個Event
類型項目和所有其他類型合併的五個項目,確保與其他遙測類型分開取樣Events
。
請利用此頁面中先前小節中的範例變更此預設行為。
可以對遙測多次取樣嗎?
- 否。 如果已對項目取樣,則 SamplingTelemetryProcessors 會從取樣考量中忽略該項目。 擷取取樣亦是如此,不會對已在 SDK 本身中取樣的項目進行取樣。
為什麼不取樣簡單的「收集每個遙測類型百分之 X」?
- 雖然這個取樣方法會提供高精確度的計量近似值,卻會破壞根據每個使用者、工作階段和要求相互關聯資料的能力,而這對於診斷是非常重要。 因此,使用如「收集百分之 X 應用程式使用者的所有遙測項目」或「收集百分之 X 應用程式要求的所有遙測」的原則,取樣的效果更佳。對於與要求無關聯的遙測項目 (例如背景非同步處理),應變原則是「收集每個遙測類型所有項目的百分之 X」。
取樣百分比會隨著時間變更嗎?
- 是的,調適性取樣會根據目前觀察到的遙測量,逐漸變更取樣百分比。
如果我使用固定取樣率,如何知道哪個取樣百分比最適合我的應用程式?
開始使用調適性取樣的其中一個方法,就是找出它選擇的取樣率 (請參閱上一個問題),然後再切換為使用該取樣率的固定取樣率。
否則,您就必須猜測。 分析 Application Insights 中您目前的遙測使用量、觀察目前的節流,並估計所收集之遙測的量。 這三項輸入與所選定價層,可對您可能想要減少收集的遙測量提出建議。 不過,使用者數目的增加或遙測量的其他某些變化可能會讓您的評估失效。
如果將取樣百分比設定成太低會發生什麼事?
- 當 Application Insights 嘗試補償減少資料量縮減的資料視覺效果時,過低的取樣百分比會造成過度積極取樣,而降低近似值的精確度。 此外,您的診斷經驗可能會有負面影響,因為可能會出取樣出某些不常失敗或緩慢的要求。
如果將取樣百分比設定成太高會發生什麼事?
- 設定太高的取樣百分比 (不夠積極) 會導致收集的遙測量減少不足。 您可能仍會遇到與節流相關的遙測資料遺失,而使用 Application Insights 的成本由於超額費可能高於您的計劃。
如果我同時設定 IncludedTypes 和 ExcludedTypes 設定,會發生什麼事?
- 最好不要在設定中同時設定
ExcludedTypes
和IncludedTypes
,以避免發生任何衝突,並確保清除遙測收集設定。 - 即使
IncludedTypes
設定中也會設定ExcludedTypes
中所列的遙測類型,也會排除這些類型。 ExcludedTypes 的優先順序會高於 IncludedTypes。
我可以在何種平台上使用取樣?
- 如果 SDK 未執行取樣,則擷取取樣會在任何遙測超過特定數量時自動運作。 例如,如果您使用舊版 ASP.NET SDK 或 Java SDK,此組態應該可行。
- 如果您使用最新版 ASP.NET 或 ASP.NET Core SDK (裝載於 Azure 或您自己的伺服器上),依預設,您可以使用調適性取樣,但您可以切換為固定取樣率,如上所述。 使用固定取樣率,瀏覽器 SDK 會自動同步至取樣相關的事件。
- 如果您使用最新版 Java 代理程式,您可以設定
applicationinsights.json
(若是 Java SDK,請設定ApplicationInsights.xml
) 以開啟固定取樣率。 根據預設取樣功能為關閉。 透過固定取樣率,瀏覽器 SDK 和伺服器會自動同步以對相關事件進行取樣。
我一律想要看見特定罕見的事件。 我要如何讓這些事件通過取樣模組?
一律看見特定事件的最佳方式是撰寫自訂 TelemetryInitializer,在您想要保留的遙測項目上將
SamplingPercentage
設定為 100,如下列範例所示。 初始設定式保證會在遙測處理器 (包括取樣) 之前執行,如此可確保所有取樣技術都會針對任何取樣考量忽略此項目。 自訂遙測初始設定式可用於 ASP.NET SDK、ASP.NET Core SDK、JavaScript SDK 和 Java SDK。 例如,您可以使用 ASP.NET SDK 設定遙測初始設定式:public class MyTelemetryInitializer : ITelemetryInitializer { public void Initialize(ITelemetry telemetry) { if(somecondition) { ((ISupportSampling)telemetry).SamplingPercentage = 100; } } }
舊版 SDK
調適型取樣可用於 ASP.NET v2.0.0-beta3 和更新版本的 Application Insights SDK、Microsoft.ApplicationInsights.AspNetCore SDK v2.2.0-beta1 和更新版本,且預設為啟用。
固定取樣率是從 ASP.NET 版本 2.0.0 的 SDK 和 Java SDK 版本 2.0.1 及更新版本開始有的功能。
在 ASP.NET SDK v2.5.0-beta2 和 ASP.NET Core SDK v2.2.0-beta3 之前,定義「使用者」的應用程式取樣決策 (例如大部分 Web 應用程式) 依賴使用者識別碼的雜湊。 針對未定義使用者的應用程式 (例如 Web 服務),決策將取決於要求的作業識別碼。 最新版 ASP.NET 和 ASP.NET Core SDK 現在使用取樣決策的作業識別碼。
下一步
- 篩選 可以對您的 SDK 所傳送的內容,提供更嚴格的控制。
- 請閱讀 Developer Network 文章:使用 Application Insights 最佳化遙測 (英文)。