Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

3 года назад
Открыть в
День 1635. #ЧтоНовенького Метрики в .NET 8 Метрики — это измерения, которые собираются с течением времени и чаще всего используются для мониторинга работоспособности приложения и создания предупреждений. Например, счётчик, сообщающий о неудачных HTTP-запросах, может отображаться на информационных панелях или генерировать оповещения, когда количество сбоев превышает пороговое значение. В превью .NET 8 в ASP.NET Core добавлены: - новые виды измерений со счетчиками, датчиками и гистограммами; - мощные отчёты с многомерными значениями; - интеграция в более широкую облачную экосистему за счёт соответствия стандартам OpenTelemetry; - добавлены метрики для хостинга ASP.NET Core, Kestrel и SignalR. Также ASP.NET Core теперь использует API IMeterFactory для создания и получения счётчиков. Это позволяет использовать внедрение зависимостей, что упрощает изоляцию и сбор метрик. IMeterFactory особенно полезен для юнит-тестов, когда несколько тестов могут выполняться параллельно и собирать данные только для своего теста:
public class BasicTests :
 IClassFixture<WebApplicationFactory<Program>>
{
  private WebApplicationFactory<Program> factory;
  public BasicTests(
   WebApplicationFactory<Program> f) 
   => factory = f;

  [Fact]
  public async Task GetRequest()
  {
    var mf = factory.Services
     .GetRequiredService<IMeterFactory>();
    var col = new MetricCollector<double>(
     mf, 
     "Microsoft.AspNetCore.Hosting", 
     "http-server-request-duration"
    );
    var cl = factory.CreateClient();

    var resp = await cl.GetAsync("/");

    Assert.Equal("Hello World!", 
     await resp.Content.ReadAsStringAsync());

    await col.WaitForMeasurementsAsync(
     minCount: 1);
    Assert.Collection(col.GetMeasurementSnapshot(),
     m => {
      Assert.Equal("http", m.Tags["scheme"]);
      Assert.Equal("GET", m.Tags["method"]);
      Assert.Equal("/", m.Tags["route"]);
    });
  }
}

Новые счетчики в превью 6 - routing-match-success и routing-match-failure сообщают, как запрос был перенаправлен в приложении. Если запрос успешно соответствует маршруту, счётчик включает информацию о шаблоне маршрута и о том, был ли это резервный маршрут. - diagnostics-handler-exception добавляется к ПО обработки исключений и сообщает, как оно обрабатывает необработанные исключения, включая информацию об имени исключения и результате обработки. - http-server-unhandled-requests — сообщает, когда HTTP-запрос достигает конца конвейера промежуточного ПО и не обрабатывается приложением. - Различные новые счётчики промежуточного ПО ограничений позволяют отслеживать количество прошедших запросов, запросов в очереди, продолжительность очереди и многое другое. Если вам интересно попробовать метрики, разработчики .NET собрали панели мониторинга Grafana, которые сообщают о метриках ASP.NET Core, собранных Prometheus в репозитории aspnetcore-grafana Источники: - https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-8-preview-6/ - https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-8-preview-4/