Application Insights 中的取樣

取樣是 Application Insights中的一項功能。 若要既能減少遙測流量、資料成本和儲存成本,又能保有應用程式資料在統計上的正確分析,便建議使用此方法。 取樣也可協助您避免 Application Insights 對遙測進行節流處理。 取樣篩選器會選取相關的項目,以便您在進行診斷調查時瀏覽各個項目。

計量計數出現在入口網站時,表示已重新對其正規化以計入取樣。 這樣做可以將對統計資料的影響降至最低。

簡短摘要

  • 有三種不同類型的取樣:調適型取樣、固定取樣率和擷取取樣。
  • 調適型取樣預設會在所有最新版 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 是 (依預設啟用) 只有在沒有實施其他取樣時
Java 只有在沒有實施其他取樣時
JavaScript 只有在沒有實施其他取樣時
Node.JS 只有在沒有實施其他取樣時
Python 只有在沒有實施其他取樣時
All others

注意

此頁面上的大部分資訊適用於最新版 Application Insights SDK。 如需舊版 SDK 的相關資訊,請參閱以下小節

使用取樣的時機

通常,對於大多數小型和中型的應用程式,您不需要取樣。 最有用的診斷資訊和最準確的統計資料會是透過收集所有使用者活動的資料取得。

取樣的主要優點如下:

  • 當您的應用程式在短時間間隔傳送非常高比率的遙測時,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 伺服器端遙測,以及用於 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>

    不要進行取樣的類型清單,清單以分號分隔。 可辨識的類型為:DependencyEventExceptionPageViewRequestTrace。 傳送指定類型的所有遙測;未指定的類型會進行取樣。

  • <IncludedTypes>type;type</IncludedTypes>

    要進行取樣的類型清單,清單以分號分隔。 可辨識的類型為:DependencyEventExceptionPageViewRequestTrace。 指定的類型會進行取樣;其他類型的遙測會一律傳送。

若要關閉調適型取樣,請從 ApplicationInsights.config 移除 AdaptiveSamplingTelemetryProcessor 節點。

替代方法:以程式碼設定調適性取樣

除了在 .config 檔案中設定取樣參數之外,您還可以程式設計方式設定這些值。

  1. AdaptiveSamplingTelemetryProcessor 檔案移除所有 .config 節點。

  2. 使用下列程式碼片段設定調適型取樣:

    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 builder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;

    // Using adaptive sampling
    builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);

    // Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling:
    // configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");

    // If you have other telemetry processors:
    builder.Use(next => new AnotherProcessor(next));

});

builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
    EnableAdaptiveSampling = false,
});

var app = builder.Build();

設定 Azure Functions 的調適型取樣

請遵循此頁面中的指示,針對在 Azure Functions 中執行的應用程式設定調適型取樣。

固定取樣率

固定取樣率會減少來自網頁伺服器和網頁瀏覽器所傳送的流量。 但它會依照您設定的速率來降低遙測,這與調適性取樣不同。 固定取樣率可用於 ASP.NET、ASP.NET Core、Java 和 Python 應用程式。

就像其他技術一樣,固定取樣率也會保留相關項目。 固定取樣率也會同步用戶端及伺服器取樣,讓相關項目能夠保留。 例如,當您在搜尋中查看頁面檢視時,您可以尋找其相關伺服器要求。

在計量瀏覽器中,速率 (例如要求及例外狀況計數) 會乘以某個係數來補償取樣率,讓它們盡可能準確。

設定 ASP.NET 應用程式的固定取樣率

  1. 停用調適型取樣:在 ApplicationInsights.config 中,移除 AdaptiveSamplingTelemetryProcessor 節點或將其設成註解。

    <TelemetryProcessors>
        <!-- Disabled adaptive sampling:
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
        </Add>
        -->
    
  2. 啟用固定取樣率模組。 將此程式碼片段新增至 ApplicationInsights.config

    <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>10</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 應用程式的固定取樣率

  1. 停用調適性取樣

    您可以使用 在 方法 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();
    
  2. 啟用固定速率取樣模組

    您可以在 方法之後 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.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 設定的一部分。 如果未提供明確的取樣器,依預設會使用 ProbabilitySamplerProbabilitySampler 預設會使用 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>

注意

針對檢測金鑰擷取的支援將在 2025 年 3 月 31 日結束。 檢測金鑰擷取將會繼續運作,但我們將不再提供該功能的更新或支援。 轉換至連接字串以利用新功能

針對取樣百分比,選擇接近 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 服務 或使用 Application Insights 代理程式啟用 Application Insights 時,預設會啟用調適性取樣。 當 Application Insights 服務端點接收到遙測,會檢查遙測,如果回報的取樣率低於 100% (表示正在對該遙測進行取樣),則會忽略您設定的擷取取樣率。

警告

入口網站圖格上顯示的值表示您設定的擷取取樣值。 如果有任何一種 SDK 取樣 (調適型或固定取樣率) 正在作業中,則該值不代表實際的取樣率。

我應該使用哪種類型的取樣?

如果是下列情形,請使用擷取取樣:

  • 您經常用到每月的遙測配額。
  • 您收到大量來自使用者網頁瀏覽器的遙測。
  • 您使用不支援取樣的 SDK 版本,例如比 ASP.NET 版本 2 早的版本。

如果是下列情形,則使用固定取樣率:

  • 您想要同步處理用戶端與伺服器之間的取樣,因此,當您在 [搜尋] 中調查事件時,您可以在用戶端與伺服器的相關事件之間瀏覽,例如頁面檢視和 HTTP 要求。
  • 您對於您的應用程式的適當取樣百分比有信心。 應該夠高以取得精確的度量,但是低於超過價格配額和節流限制的取樣率。

使用調適性取樣:

如果欲使用其他形式取樣但條件不適用,建議使用適應型取樣。 此設定依預設會在 ASP.NET/ASP.NET Core SDK 中啟用。 在達到特定的比率下限之前,不會減少流量,因此可能完全不會對低使用率的網站進行取樣。

了解是否正常取樣

若要找出實際的取樣率 (不論是否已套用),請使用如下所示的 分析查詢

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中參考這些計量、記錄型和預先匯總的其他詳細資料。系統會識別記錄資料的相關屬性,並在取樣發生之前擷取統計資料。 為了避免資源與成本問題,系統會匯總計量。 所產生的匯總資料只會以每分鐘幾個計量遙測項目來表示,而不是潛在的數千個事件遙測項目。 這些計量會計算樣本中的 25 個要求,並將計量傳送至 MDM 帳戶以回報「此 Web 應用程式已處理 25 個要求」,但傳送的要求遙測記錄將會有 100 個 itemCount。 這些預先匯總的計量會回報正確的數目,在取樣影響到記錄式查詢的結果時,便可以依賴這些計量。 您可以在 Application Insights 入口網站的 [計量] 窗格上對其進行檢視。

常見問題集

取樣是否會影響警示精確度?

  • 是。 只有取樣資料時才會觸發警示。 主動篩選可能會導致警示未如預期般引發。

注意

取樣不會套用至計量,但計量可以衍生自取樣資料。 因此,取樣可能會間接影響警示精確度。

ASP.NET 和 ASP.NET Core SDK 中的預設取樣行為為何?

  • 如果您使用上述 SDK 的最新版本之一,則預設會啟用調適型取樣,每秒五個遙測項目。 預設會新增兩個 AdaptiveSamplingTelemetryProcessor 節點,一個在取樣中包含 Event 類型,另一個從取樣排除 Event 類型。 此組態代表 SDK 會嘗試將遙測項目限制為 Event 類型的五個遙測項目,以及合併所有其他類型的五個遙測項目,進而確保 Events 與其他遙測類型分開取樣。 Events 通常用於商務遙測,而且最有可能不會受到診斷遙測量的影響。

    以下顯示產生的預設 ApplicationInsights.config 檔案。 在 ASP.NET Core 中,相同的預設行為會以程式碼進行啟用。 請利用此頁面中先前小節中的範例變更此預設行為。

    <TelemetryProcessors>
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
            <ExcludedTypes>Event</ExcludedTypes>
        </Add>
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
            <IncludedTypes>Event</IncludedTypes>
        </Add>
    </TelemetryProcessors>
    

可以對遙測多次取樣嗎?

  • 不可以。 如果已對項目取樣,則 SamplingTelemetryProcessors 會從取樣考量中忽略該項目。 擷取取樣亦是如此,不會對已在 SDK 本身中取樣的項目進行取樣。

為什麼不取樣簡單的「收集每個遙測類型百分之 X」?

  • 雖然這個取樣方法會提供高精確度的計量近似值,卻會破壞根據每個使用者、工作階段和要求相互關聯資料的能力,而這對於診斷是非常重要。 因此,使用如「收集百分之 X 應用程式使用者的所有遙測項目」或「收集百分之 X 應用程式要求的所有遙測」的原則,取樣的效果更佳。 對於與要求無關聯的遙測項目 (例如背景非同步處理),應變原則是「收集每個遙測類型所有項目的百分之 X」。

取樣百分比會隨著時間變更嗎?

  • 是的,調適性取樣會根據目前觀察到的遙測量,逐漸變更取樣百分比。

如果我使用固定取樣率,如何知道哪個取樣百分比最適合我的應用程式?

  • 開始使用調適性取樣的其中一個方法,就是找出它選擇的取樣率 (請參閱上一個問題),然後再切換為使用該取樣率的固定取樣率。

    否則,您就必須猜測。 分析 Application Insights 中您目前的遙測使用量、觀察目前的節流,並估計所收集之遙測的量。 這三項輸入與所選定價層,可對您可能想要減少收集的遙測量提出建議。 不過,使用者數目的增加或遙測量的其他某些變化可能會讓您的評估失效。

如果將取樣百分比設定成太低會發生什麼事?

  • 當 Application Insights 嘗試補償減少資料量縮減的資料視覺效果時,過低的取樣百分比會造成過度積極取樣,而降低近似值的精確度。 此外,您的診斷經驗可能會有負面影響,因為可能會出取樣出某些不常失敗或緩慢的要求。

如果將取樣百分比設定成太高會發生什麼事?

  • 設定太高的取樣百分比 (不夠積極) 會導致收集的遙測量減少不足。 您可能仍會遇到與節流相關的遙測資料遺失,而使用 Application Insights 的成本由於超額費可能高於您的計劃。

我可以在何種平台上使用取樣?

  • 如果 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 使用取樣決策的作業識別碼。

後續步驟