Прошлой ночью мы получили сотни жалоб на ошибки одного из наших веб-приложений Azure.
На портале Azure мы посмотрели на веб-приложение и увидели тысячи ошибок 5xx.

Приложение представляет собой веб-API .NET 6 и настроено на использование пакета SDK для Application Insights. Однако Application Insights показывает только 44 ошибки за тот же период времени. Он также показывает тысячи успешных запросов за этот период времени. Итак, мы знаем, что Application Insights подключен и работает, поскольку там были тысячи журналов, но мы ожидаем увидеть гораздо больше журналов ошибок.
Это наш appsettings.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);
}
}
}
}
На что мы можем обратить внимание, чтобы увидеть эти ошибки?
Привет, amit_g, интересно. Мы не возражаем против выборки запросов, однако мы хотим, чтобы каждая ошибка регистрировалась, чтобы мы могли выявлять шаблоны и отслеживать проблемы. Можно ли настроить анализ приложений таким образом, чтобы ошибки всегда регистрировались?
Адаптивная выборка включена по умолчанию. Отключите его либо в конфиге, либо в коде. Настройка адаптивной выборки для приложений ASP.NET
@BryceBy — обратитесь к конфигурации из SOThread для регистрации ошибок и исключений.
Похоже, что многие из этих ошибок возникают из-за тайм-аута SQL при запросе к сторонней базе данных. Кажется, Application Insights не регистрирует такие ошибки?


Я могу зарегистрировать ошибку с кодом состояния 500 с той же конфигурацией из вашего файла appsettings.json.
Чтобы зарегистрировать ошибку 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);
}
}


Наиболее вероятной причиной является выборка по умолчанию Выборка в Application Insights