应用程序的性能监控

时间:2018-07-10 18:15:55

标签: performance logging asp.net-core monitoring serilog

我想拥有有关以下信息的特殊性能日志: 一行http请求

  • 要求的网址
  • 经过时间
  • 用户名
  • 返回状态码
  • 活动ID(以防某些请求在内部重定向到其他操作)

我现在正在使用serilog记录未处理的异常。在哪里添加这种日志插入的理想位置或最佳实践是什么?将日志存储到数据库中是个好习惯吗?

3 个答案:

答案 0 :(得分:2)

中间件方法似乎可行。

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.");
            }

        }
    }

答案 1 :(得分:1)

如果您想简化它并使用自己的解决方案,则可以为asp.net核心管道编写一个Middleware来跟踪所需的数据。

我不建议使用Serilog保留收集的信息。 Serilog是一个日志记录框架,不应用于跟踪应用程序指标。

直接使用数据库(sql,mongo等)存储和分析数据。您已经在问题中定义了对象模型,因此应该很容易在数据库中创建模型实例并将其持久化。

答案 2 :(得分:0)

为什么不使用APM工具或跟踪工具来执行此操作,而只创建包含数据的日志,这些数据不允许您实际识别和解决问题。 APm工具不仅可以记录性能数据,还可以提供更多的价值,但可以帮助您解决问题。该领域的领导者是AppDynamics,New Relic和Dynatrace。有很多开源工具也可以在这里提供帮助,例如Zipkin,Jaeger和Skywalking。您可能也想解释应用程序的体系结构和语言:)