как исключить исключения из appinsight функции Azure?

#azure #azure-functions #azure-application-insights

#azure #azure-функции #azure-application-insights

Вопрос:

У нас есть этот файл host.json в нашей функции Azure:

 {
  "version": "2.0",
  "functions": [ "xxx" ],
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    }
  }
}
  

Теперь мы хотим исключить исключение, которое также будет автоматически регистрироваться (поскольку мы сами обрабатываем исключения в блоке try catch, поэтому не хотим, чтобы оно регистрировалось дважды).
Однако я не уверен, что samplingExcludedTypes является правильным свойством для использования в соответствии с этой проблемой:
https://github.com/MicrosoftDocs/azure-docs/issues/47219 , excludeTypes — это тот, который нужно использовать
Должен ли я просто сделать это:

 "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request;Exception"
      }
    }
  }
  

Ответ №1:

Обычно я бы сказал, что вам нужен процессор телеметрии или инициализатор телеметрии, в зависимости от языка, который удаляет всю телеметрию исключений. Но, к сожалению, это не работает в функции Azure, она не поддерживается.

Однако мы можем использовать параметры выборки, чтобы предотвратить отправку телеметрии, принудительно выполнив выборку. Это работает, когда включена адаптивная выборка (я просто не пробовал использовать другие типы выборки), что является поведением выборки по умолчанию для функции Azure. Для этого мы можем установить ProactiveSamplingDecision свойство следующим образом:

     public class DropExceptionTelemetry : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            if (!(telemetry is ExceptionTelemetry item)) return;

            item.ProactiveSamplingDecision = SamplingDecision.SampledOut;
        }
    }
  

Кроме того, не забудьте добавить этот инициализатор с помощью DI:

     public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddSingleton<ITelemetryInitializer, DropExceptionTelemetry>();
            builder.Services.AddLogging();
        }
    }
  

Чтобы это сработало, убедитесь, что исключение не прослушивается в свойстве exludedTypes

     "applicationInsights": {
      "samplingSettings": {
        "excludedTypes": "Event;Request"
      }
    }