День 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/