Телеметрическая выборка без влияния на ошибки / сбои - PullRequest
3 голосов
/ 17 апреля 2019

Я хочу регистрировать процент успешных звонков в приложении Insights. Я наткнулся на этот пост https://docs.microsoft.com/en-us/azure/azure-monitor/app/sampling и думаю, что здесь подходит выборка с фиксированной частотой. Но влияет ли это на все записи одинаково? Будут ли регистрироваться некоторые ошибки / сбои?

Я ищу решение, которое регистрирует процент успешных вызовов, но сохраняет все неудавшиеся запросы / ошибки.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Чтобы исключить неудачные события из-за выборки, (при выполнении выборки для всего остального) напишите TelemetryInitializer с этой логикой.

public class PreventSamplingForFailedTelemetryInitializer: ITelemetryInitializer
{
  public void Initialize(ITelemetry telemetry)
  {
        if(failed)
        {
            // Set to 100, so that actual SamplingProcessors ignore this from sampling considerations.
            ((ISupportSampling)telemetry).SamplingPercentage = 100;
        }
   }
}

(Make sure to add this TelemetryInitializer to the TelemetryConfiguration)

Failed or not can be determined from RequestTelemetry and DependencyTelemetry from their `Success` field.

(the last one in FAQ sections has hints to answer your question https://docs.microsoft.com/en-us/azure/azure-monitor/app/sampling#frequently-asked-questions)
1 голос
/ 17 апреля 2019

Я не думаю, что это поддерживается из коробки, но вы можете написать свой собственный ITelemetryProcessor.

См .: https://docs.microsoft.com/en-us/azure/azure-monitor/app/api-filtering-sampling#filtering-itelemetryprocessor

Application Insights в .NET использует цепочку телеметрических процессоров, которые вы можете использовать для фильтрации телеметрии, поэтому вы можете написать свой собственный, который проверяет resultCode (я думаю, что именно так Application Insights называет код состояния HTTP, но вы Придется дважды проверить) объект телеметрии запроса и утвердить его, если он равен 500 (или 5хх), но имеет только 10% шансов на его отправку, если это 2хх или 3хх. Вы можете переопределить метод OKToSend(), чтобы выполнить вышеуказанную проверку на входе ITelemetry, и вернуть соответственно true / false.

Может быть, что-то вроде (я написал это в браузере, оно не обязательно будет работать без нареканий как есть):

// Approves 500 errors and 10% of other telemetry objects
private bool OKtoSend (ITelemetry telemetry)
{
    if (telemetry.ResponseCode == 500) {
        return true;
    } else {
        Random rnd = new Random();
        int filter = rnd.Next(1, 11);
        return filter == 1;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...