You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8孤立Azure Function中App Insight自适应采样配置不生效排查

.NET 8孤立Azure Function自适应采样不生效的问题排查与修复

问题根源分析

你的配置存在以下几个关键问题,导致自适应采样未生效:

  • 配置顺序与重复采样逻辑冲突:AddApplicationInsightsTelemetryWorkerService已默认启用自适应采样(当EnableAdaptiveSampling=true时),后续手动通过TelemetryProcessorChainBuilder.UseAdaptiveSampling添加的采样规则会与默认配置冲突,函数运行时可能优先使用内置规则,忽略手动配置。
  • 孤立函数Telemetry处理器链被运行时重置:孤立模式的Azure Function会自行管理Application Insights的Telemetry处理器链,直接修改TelemetryConfiguration.DefaultTelemetrySink的处理器链可能不会生效,因为函数运行时初始化阶段会覆盖或重置这部分配置。
  • 不当的服务容器构建:在Configure<TelemetryConfiguration>中调用services.BuildServiceProvider()属于反模式,会创建额外服务容器实例,可能导致配置读取与实际应用不一致。

修复方案

步骤1:调整配置顺序与采样规则配置方式

移除手动添加的UseAdaptiveSampling,转而通过AddApplicationInsightsTelemetryWorkerService的选项直接配置采样参数,同时通过正确方式添加自定义处理器:

services.AddApplicationInsightsTelemetryWorkerService(options =>
{
    var aiKey = configuration.GetValue<string>("appSettings:AIKey");
    options.ConnectionString = aiKey;
    // 启用自适应采样并配置核心参数
    options.EnableAdaptiveSampling = true;
    options.AdaptiveSamplingOptions.MaxTelemetryItemsPerSecond = 2;
    options.AdaptiveSamplingOptions.ExcludedTypes = "Exception";
})
.ConfigureTelemetryProcessorChain((builder, sp) =>
{
    // 添加自定义Telemetry处理器
    builder.Use(next => new RemoveUnwanted409Processor(next));
    builder.Use(next => new RemoveUnwanted404Processor(next));
});

// 配置函数的Application Insights集成,确保规则生效
services.ConfigureFunctionsApplicationInsights();

return services;

步骤2:明确采样逻辑的时间窗口特性

自适应采样是基于每秒事件速率动态调整的:如果100个事件在1秒内发送,采样率会调整为2/100,最终保留约2个事件(而非你预期的20个)。若需要固定比例采样,可改用固定采样规则:

options.EnableAdaptiveSampling = false;
options.EnableSampling = true;
options.SamplingOptions.SamplingPercentage = 20; // 固定保留20%的事件

步骤3:确保TelemetryClient正确注入

确认_telemetryClient是通过依赖注入获取的,手动实例化的TelemetryClient不会应用全局采样配置:

public class TestSamplingFunction
{
    private readonly TelemetryClient _telemetryClient;

    // 构造函数注入TelemetryClient
    public TestSamplingFunction(TelemetryClient telemetryClient)
    {
        _telemetryClient = telemetryClient;
    }

    [Function("TestSampling")]
    public void Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer)
    {
        for (int i = 0; i < 100; i++)
        {
            _telemetryClient.TrackEvent("TESTSampling", new Dictionary<string, string>
            {
                { "TestNumber", i.ToString() },
                { "Timestamp", DateTime.UtcNow.ToString("o") },
                { "BatchId", Guid.NewGuid().ToString() }
            });
        }
    }
}

步骤4:环境测试注意事项

本地调试时,Application Insights采样可能因环境特性未严格执行,建议将函数部署到Azure环境后验证采样效果。

内容的提问来源于stack exchange,提问作者GiangMH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 17:43:09