Application Insights не показывает все ошибки

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

На портале Azure мы посмотрели на веб-приложение и увидели тысячи ошибок 5xx.

Application Insights не показывает все ошибки

Приложение представляет собой веб-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);
            }
        }
    }
}

На что мы можем обратить внимание, чтобы увидеть эти ошибки?

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

amit_g 06.06.2023 19:16

Привет, amit_g, интересно. Мы не возражаем против выборки запросов, однако мы хотим, чтобы каждая ошибка регистрировалась, чтобы мы могли выявлять шаблоны и отслеживать проблемы. Можно ли настроить анализ приложений таким образом, чтобы ошибки всегда регистрировались?

BryceBy 06.06.2023 22:07

Адаптивная выборка включена по умолчанию. Отключите его либо в конфиге, либо в коде. Настройка адаптивной выборки для приложений ASP.NET

amit_g 07.06.2023 02:24

@BryceBy — обратитесь к конфигурации из SOThread для регистрации ошибок и исключений.

Harshitha 07.06.2023 07:10

Похоже, что многие из этих ошибок возникают из-за тайм-аута SQL при запросе к сторонней базе данных. Кажется, Application Insights не регистрирует такие ошибки?

BryceBy 08.06.2023 01:52
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
5
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я могу зарегистрировать ошибку с кодом состояния 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);
     }
 }
  • Ошибки времени ожидания SQL регистрируются как трассировки.

Другие вопросы по теме