При использовании выборки Application Insights можно сохранить связанные записи вместе с исключенными элементами.C#

Место общения программистов C#
Ответить
Anonymous
 При использовании выборки Application Insights можно сохранить связанные записи вместе с исключенными элементами.

Сообщение Anonymous »

Я экспериментировал с выборкой данных телеметрии, чтобы не превысить лимит ежедневных журналов App Insights. В идеале я хочу применять выборку ко всему, но исключать исключения и сохранять связанные трассировки (тот же идентификатор операции) для исключений.
Я создал пример консольного приложения для тестирования и до сих пор Я могу успешно выбирать и сохранять исключения. Но связанные трассировки также выбираются.
Я рассмотрел реализацию специального ITelemetryProcessor, но он обрабатывает одну запись за раз. Поэтому я не уверен, возможно ли это вообще с помощью специального процессора. Возможно, есть что-то, что поможет добиться желаемого поведения.
Код Program.cs приведен ниже
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

const string appInsightConnString = "";
const double samplingPercentage = 50;

var services = new ServiceCollection();

// add context
var context = new Context();
services.AddSingleton(context);

// configure application insights
services.AddApplicationInsightsTelemetryWorkerService(
(options) =>
{
// disable adaptive sampling
options.EnableAdaptiveSampling = false;
options.ConnectionString = appInsightConnString;
});

// configure logging
services.AddLogging(loggingBuilder =>
{
loggingBuilder.ClearProviders();
loggingBuilder.Services.AddSingleton();
loggingBuilder.AddConsole();
});

var serviceProvider = services.BuildServiceProvider();

// setup sampling
var telemetryConfiguration = serviceProvider.GetRequiredService();
var telemetryBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
telemetryBuilder.UseSampling(samplingPercentage, excludedTypes: "Exception");
telemetryBuilder.Build();

// get logger
var logger = serviceProvider.GetRequiredService();

// do something important
DoWork(context, logger);

// explicitly call Flush() followed by sleep is required in console apps.
// this is to ensure that even if application terminates, telemetry is sent to the back-end.
var telemetryClient = serviceProvider.GetRequiredService();
telemetryClient.Flush();
Task.Delay(10000).Wait();

Console.WriteLine("Flushed. Press any key to exit");
Console.ReadKey();

static void DoWork(Context context, ILogger logger)
{
const int iterations = 50;
const int errors = 15;

// session Id to filter logs
var sessionId = Guid.NewGuid().ToString();
Console.WriteLine($"Session Id: {sessionId}");

// randomize errors
var random = new Random();
var errorsHash = new HashSet();
while (errorsHash.Count < errors)
{
errorsHash.Add(random.Next(0, iterations));
}

// log
for (var i = 0; i < iterations; i++)
{
context.CorrelationId = Guid.NewGuid().ToString();
logger.LogInformation($"Begin operation: {context.CorrelationId}. Session Id: {sessionId}");
if (errorsHash.Contains(i))
logger.LogError(new Exception("test ex"), $"Error operation: {context.CorrelationId}. Session Id: {sessionId}");
logger.LogInformation($"End operation: {context.CorrelationId}. Session Id: {sessionId}");
}
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... lated-entr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»