azure Application Insights未显示所有错误

4zcjmb1e  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(124)

昨晚,我们收到了数百个来自Azure Web应用程序的错误投诉。
在Azure Portal中,我们查看了Web应用程序,可以看到我们收到了数千个5xx错误。

该应用程序是. NET 6 Web API,并配置为使用Application Insights SDK。然而,Application Insights在同一时间段内仅显示44个错误。它还显示了在此时间段内成功的数千个请求。因此,我们知道ApplicationInsights是连接的&工作的,因为那里有成千上万的日志,但我们希望看到更多的错误日志。
这是我们的appsets.json:

{
  "AllowedHosts": "*",
  "ApplicationInsights": {
    "InstrumentationKey": "Instrumentation Key from Azure"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Error"
      }
    }
  } 
}

我们有这个在我们的Pragram. cs:

var services = builder.Services;
var configuration = builder.Configuration;

services.AddApplicationInsightsTelemetry(configuration["ApplicationInsights:InstrumentationKey"]);

在我们的控制器中:

namespace MyAPI.Controllers
{
    [Route("api/[controller]")]
    [Authorize]
    [ApiController]
    public class MyController : ControllerBase
    {
        private readonly ILogger _logger;
        
        public MyController(ILogger<MyController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public async Task<ActionResult> MyTask()
        {
            try
            {
                // Do things async

                return Ok()
            }
            catch (Exception e)
            {
                _logger.LogError("{error}", e.Message);
                return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
            }
        }
    }
}

我们可以通过什么来了解这些错误?

8ulbf1ek

8ulbf1ek1#

我能够从您的appsettings.json文件中使用相同的配置记录状态代码为500的错误。
为了记录500错误,我显式地抛出了一个异常。

我的Controller

[HttpGet(Name = "Task")]
public ActionResult MyTask()
{
    try
    {
        throw new Exception();       
    }
    catch (Exception e)
    {
        _logger.LogError("{error}", e.Message);
        return StatusCode(StatusCodes.Status500InternalServerError, e.InnerException);
    }
}

您可以看到500个错误被记录为Request。在Transaction Search中检查相同的内容。

  • 单击REQUEST条目以获取错误的详细列表。

检查Failures中的错误计数。

其中许多错误似乎是由于查询第三方数据库时SQL超时而发生的。
请参阅SOThread,它解释了如何记录SQL超时错误。
我能够用下面的代码记录SQL超时异常。

public ActionResult MyTask()
 {           
     SqlConnection conn = new SqlConnection("Data Source=****\\****;Initial Catalog=Test;Integrated Security=True");
     TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
     TelemetryClient telemetry = new TelemetryClient(configuration);
     try
     {
         conn.Open();
         SqlCommand cmd= new SqlCommand();
         cmd.CommandText= "Select  * from Test";
         cmd.ExecuteNonQuery();
         return Ok();
     }
     catch (Exception e)
     {
         telemetry.TrackException(e);
         _logger.LogError("{error}", e.StackTrace);
         return StatusCode(StatusCodes.Status500InternalServerError, e.InnerException);
     }
 }
  • SQL超时错误记录为跟踪。

相关问题