Я хотел бы иметь специальный журнал производительности с информацией о HTTP-запрос в одной строке
Сейчас я использую серилог для регистрации необработанных исключений. Где лучше всего добавить такую вставку журнала или что лучше? Хранить журналы в базе данных - это хорошая практика?
спасибо, я изучу это, но я хотел бы, чтобы все было проще. Например, у моего приложения есть только разрешение на выполнение в базе данных, и я чувствую, что могу ожидать некоторых проблем таким образом.
Почему голосование против? Стоит добавить некоторые детали?


Если вы хотите, чтобы это было просто и вы используете собственное решение, вы можете написать Промежуточное ПО для основного конвейера asp.net для отслеживания необходимых данных.
Я бы не рекомендовал использовать Serilog для сохранения собранной информации. Serilog - это фреймворк для ведения журналов, и его не следует использовать для отслеживания показателей приложения.
Используйте напрямую базу данных (sql, mongo и т. д.) Для хранения и анализа ваших данных. Вы уже определили объектную модель в своем вопросе, поэтому вам должно быть легко создать и сохранить экземпляр вашей модели в базе данных.
Спасибо, Джехоф, я написал промежуточное ПО, которое, кажется, работает нормально.
Я поддерживаю довольно полный пример "промежуточного программного обеспечения Serilog" здесь с некоторыми пояснениями в это сообщение в блоге. Он нацелен на одно событие на запрос и поставляется в качестве источника, чтобы легко настроить включенные свойства. HTH :-)
Почему бы не взглянуть на инструмент APM или инструмент трассировки, чтобы сделать это, вместо того, чтобы просто создавать журналы с данными, которые не позволяют вам фактически идентифицировать и решать проблемы. Инструменты APm предоставляют гораздо большую ценность, чем просто запись данных о производительности, но вместо этого позволяют решать проблемы. Лидерами в этой области являются AppDynamics, New Relic и Dynatrace. Здесь также могут помочь многие инструменты с открытым исходным кодом, такие как Zipkin, Jaeger и Skywalking. Вы также можете объяснить архитектуру и язык своего приложения :)
Я хотел, чтобы это было просто. Я уже регистрирую необработанные ошибки с помощью Serilog, поэтому могу получать информацию об ошибках приложения.
Да, необработанные исключения, безусловно, являются одним из способов отладки проблем, но есть много других категорий проблем, помимо ошибок, с которыми вы можете столкнуться и которые будет сложно отлаживать в производственной среде, например, проблемы с производительностью (db, code apis), вопросы об использовании и эффективности кода, которые могут решить инструменты APM. Многие коммерческие инструменты также помогают в мониторинге инфраструктуры.
Подход промежуточного программного обеспечения, кажется, работает.
public class PerformanceMiddleware
{
private readonly RequestDelegate next;
private readonly IConfiguration _configuration;
private readonly ILogger _logger;
public PerformanceMiddleware(RequestDelegate next, IConfiguration configuration, ILogger<PerformanceMiddleware> logger)
{
_configuration = configuration;
_logger = logger;
this.next = next;
}
public async Task Invoke(HttpContext context)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
await next.Invoke(context);
stopwatch.Stop();
try
{
using (var conn = new SqlConnection(_configuration.GetConnectionString("DefaultConnection")))
using (var command = new SqlCommand("dbo.usp_insertPerformance", conn) { CommandType = CommandType.StoredProcedure })
{
conn.Open();
// set parameters
command.ExecuteNonQuery();
}
}
// We dont want show this error to user.
catch (Exception ex)
{
_logger.LogError(ex, "Error in PerformanceMiddleware database operation.");
}
}
}
Вы должны использовать что-то вроде prometheus и библиотеку метрик для измерения и отслеживания производительности.