Поделиться через


ASP.NET Основные метрики

В этой статье описываются встроенные метрики для ASP.NET Core, созданные с помощью System.Diagnostics.Metrics API. Список метрик на основе более старого API EventCounters см . здесь.

Совет

Дополнительные сведения о сборе, обогащении и тестировании ASP.NET основных метрик см. в разделе "Использование основных метрик ASP.NET Core".

Microsoft.AspNetCore.Hosting

Microsoft.AspNetCore.Hosting Метрики сообщают высокоуровневую информацию о HTTP-запросах, полученных ASP.NET Core:

Метрика: http.server.request.duration
Имя. Тип инструмента Единица (UCUM) Description
http.server.request.duration Гистограмма s Измеряет длительность входящих HTTP-запросов.
Атрибут Тип Описание Примеры Присутствие
http.route строка Соответствующий маршрут. {controller}/{action}/{id?} Если он доступен.
error.type строка Описывает класс ошибки, с которым закончилась операция. timeout; name_resolution_error; 500 Если запрос завершился ошибкой.
http.request.method строка Метод HTTP-запроса. GET; POST; HEAD Всегда
http.response.status_code INT Код состояния HTTP-ответа. 200 Если он был отправлен.
network.protocol.version строка Версия протокола, указанного в network.protocol.name. 3.1.1 Всегда
url.scheme строка Компонент схемы URI, определяющий используемый протокол. http; https Всегда
aspnetcore.request.is_unhandled Логический Значение True, если запрос не был обработан конвейером приложения. true Если запрос был необработанным.

Время, используемое для обработки входящего HTTP-запроса, измеряемого на уровне размещения ASP.NET Core. Измерение времени начинается после того, как базовый веб-узел имеет следующие значения:

  • Достаточно проанализировать заголовки HTTP-запроса в входящего сетевого потока, чтобы определить новый запрос.
  • Инициализировал структуры данных контекста, такие как HttpContext.

Время заканчивается, когда:

  • Конвейер обработчика ядра ASP.NET завершен.
  • Все данные ответа отправлены.
  • Структуры данных контекста для запроса удаляются.

При использовании OpenTelemetry контейнеры по умолчанию для этой метрики имеют значение [ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ].

Доступно начиная с .NET 8.0.

Метрика: http.server.active_requests
Имя. Тип инструмента Единица (UCUM) Description
http.server.active_requests UpDownCounter {request} Измеряет количество одновременных HTTP-запросов, которые в настоящее время выполняются в режиме полета.
Атрибут Тип Описание Примеры Присутствие
http.request.method строка Метод HTTP-запроса. [1] GET; POST; HEAD Всегда
url.scheme строка Компонент схемы URI, определяющий используемый протокол. http; https Всегда

Доступно начиная с .NET 8.0.

Microsoft.AspNetCore.Routing

Microsoft.AspNetCore.Routing Метрики сообщают сведения о маршрутизации HTTP-запросов в ASP.NET основных конечных точек:

Метрика: aspnetcore.routing.match_attempts
Имя. Тип инструмента Единица (UCUM) Description
aspnetcore.routing.match_attempts Счетчик {match_attempt} Количество запросов, которые пытались сопоставить с конечной точкой.
Атрибут Тип Описание Примеры Присутствие
aspnetcore.routing.match_status строка Результат сопоставления success; failure Всегда
aspnetcore.routing.is_fallback_route boolean Значение, указывающее, является ли соответствующий маршрут резервным. True Если маршрут был успешно сопоставлен.
http.route строка Соответствующий маршрут {controller}/{action}/{id?} Если маршрут был успешно сопоставлен.

Доступно начиная с .NET 8.0.

Microsoft.AspNetCore.Diagnostics

Отчет Microsoft.AspNetCore.Diagnostics о метриках диагностика сведения из по промежуточного слоя обработки ошибок ASP.NET Core:

Метрика: aspnetcore.diagnostics.exceptions
Имя. Тип инструмента Единица (UCUM) Description
aspnetcore.diagnostics.exceptions Счетчик {exception} Количество исключений, пойманных по промежуточному слоям обработки исключений.
Атрибут Тип Описание Примеры Присутствие
aspnetcore.diagnostics.exception.result строка ASP.NET результат обработки по промежуточному слоям исключений ASP.NET handled; unhandled Всегда
aspnetcore.diagnostics.handler.type строка Полное имя IExceptionHandler типа реализации, обрабатывающей исключение. Contoso.MyHandler Если исключение было обработано этим обработчиком.
exception.type строка Полное имя типа исключения. System.OperationCanceledException; Contoso.MyException Всегда

Доступно начиная с .NET 8.0.

Microsoft.AspNetCore.RateLimiting

Microsoft.AspNetCore.RateLimiting Метрики сообщают о скорости, ограничивающей информацию из ASP.NET по промежуточному по промежуточному слоям, ограничивающим частоту основных показателей:

Метрика: aspnetcore.rate_limiting.active_request_leases
Имя. Тип инструмента Единица (UCUM) Description
aspnetcore.rate_limiting.active_request_leases UpDownCounter {request} Количество запросов, которые в настоящее время активны на сервере, в которых хранится ограничение скорости аренды.
Атрибут Тип Описание Примеры Присутствие
aspnetcore.rate_limiting.policy строка Имя политики ограничения скорости. fixed; sliding; token Если соответствующая конечная точка для запроса имела политику ограничения скорости.

Доступно начиная с .NET 8.0.

Метрика: aspnetcore.rate_limiting.request_lease.duration
Имя. Тип инструмента Единица (UCUM) Description
aspnetcore.rate_limiting.request_lease.duration Гистограмма s Длительность ограничения скорости аренды, удерживаемой запросами на сервере.
Атрибут Тип Описание Примеры Присутствие
aspnetcore.rate_limiting.policy строка Имя политики ограничения скорости. fixed; sliding; token Если соответствующая конечная точка для запроса имела политику ограничения скорости.

Доступно начиная с .NET 8.0.

Метрика: aspnetcore.rate_limiting.queued_requests
Имя. Тип инструмента Единица (UCUM) Description
aspnetcore.rate_limiting.queued_requests UpDownCounter {request} Количество запросов, которые в настоящее время находятся в очереди, ожидающих получения ограничения скорости аренды.
Атрибут Тип Описание Примеры Присутствие
aspnetcore.rate_limiting.policy строка Имя политики ограничения скорости. fixed; sliding; token Если соответствующая конечная точка для запроса имела политику ограничения скорости.

Доступно начиная с .NET 8.0.

Метрика: aspnetcore.rate_limiting.request.time_in_queue
Имя. Тип инструмента Единица (UCUM) Description
aspnetcore.rate_limiting.request.time_in_queue Гистограмма s Время, затраченное в очереди, ожидающее получения ограничения скорости аренды.
Атрибут Тип Описание Примеры Присутствие
aspnetcore.rate_limiting.policy строка Имя политики ограничения скорости. fixed; sliding; token Если соответствующая конечная точка для запроса имела политику ограничения скорости.
aspnetcore.rate_limiting.result строка Результат ограничения скорости показывает, была ли получена аренда или содержит причину отклонения. acquired; request_canceled Всегда

Доступно начиная с .NET 8.0.

Метрика: aspnetcore.rate_limiting.requests
Имя. Тип инструмента Единица (UCUM) Description
aspnetcore.rate_limiting.requests Счетчик {request} Количество запросов, пытающихся получить ограничение скорости аренды.
Атрибут Тип Описание Примеры Присутствие
aspnetcore.rate_limiting.policy строка Имя политики ограничения скорости. fixed; sliding; token Если соответствующая конечная точка для запроса имела политику ограничения скорости.
aspnetcore.rate_limiting.result строка Результат ограничения скорости показывает, была ли получена аренда или содержит причину отклонения. acquired; request_canceled Всегда

Доступно начиная с .NET 8.0.

Microsoft.AspNetCore.HeaderParsing

Microsoft.AspNetCore.HeaderParsing Метрики сообщают сведения о синтаксическом анализе заголовка ASP.NET Core:

Метрика: aspnetcore.header_parsing.parse_errors
Имя. Тип инструмента Единица (UCUM) Description
aspnetcore.header_parsing.parse_errors Счетчик {parse_error} Количество ошибок, возникших при анализе заголовков HTTP-запроса.
Атрибут Тип Описание Примеры Присутствие
aspnetcore.header_parsing.header.name строка Имя заголовка. Content-Type Всегда
error.type строка Сообщение об ошибке. Unable to parse media type value. Всегда

Доступно начиная с .NET 8.0.

Метрика: aspnetcore.header_parsing.cache_accesses

Эта метрика создается только для средства синтаксического анализа заголовка HTTP-запроса, поддерживающие кэширование.

Имя. Тип инструмента Единица (UCUM) Description
aspnetcore.header_parsing.cache_accesses Счетчик {cache_access} Количество попыток доступа к кэшу, в котором хранятся значения синтаксического заголовка.
Атрибут Тип Описание Примеры Присутствие
aspnetcore.header_parsing.header.name строка Имя заголовка. Content-Type Всегда
aspnetcore.header_parsing.cache_access.type строка Значение, указывающее, найдено ли значение заголовка в кэше или нет. Hit; Miss Всегда

Доступно начиная с .NET 8.0.

Microsoft.AspNetCore.Server.Kestrel

Microsoft.AspNetCore.Server.Kestrel Метрики сообщают сведения о подключении HTTP с веб-сервера ASP.NET Core Kestrel:

Метрика: kestrel.active_connections
Имя. Тип инструмента Единица (UCUM) Description
kestrel.active_connections UpDownCounter {connection} Количество подключений, которые в настоящее время активны на сервере.
Атрибут Тип Описание Примеры Присутствие
network.transport строка Транспортный слой OSI или метод обмена данными между процессами. tcp; unix Всегда
network.type строка Сетевой уровень OSI или эквивалентный не OSI. ipv4; ipv6 Если транспорт имеет tcp значение или udp.
server.address строка Доменное имя сервера, если доступно без обратного поиска DNS; в противном случае IP-адрес или имя сокета домена Unix. example.com Всегда
server.port INT Номер порта сервера 80; 8080; 443 Если транспорт имеет tcp значение или udp.

Доступно начиная с .NET 8.0.

Метрика: kestrel.connection.duration
Имя. Тип инструмента Единица (UCUM) Description
kestrel.connection.duration Гистограмма s Длительность подключений на сервере.
Атрибут Тип Описание Примеры Присутствие
error.type строка Полное имя типа исключения. System.OperationCanceledException; Contoso.MyException Если исключение было создано.
network.protocol.name строка Уровень приложений OSI или эквивалентный не OSI. http; web_sockets Всегда
network.protocol.version строка Версия протокола, указанного в network.protocol.name. 1.1; 2 Всегда
network.transport строка Транспортный слой OSI или метод обмена данными между процессами. tcp; unix Всегда
network.type строка Сетевой уровень OSI или эквивалентный не OSI. ipv4; ipv6 Если транспорт имеет tcp значение или udp.
server.address строка Доменное имя сервера, если доступно без обратного поиска DNS; в противном случае IP-адрес или имя сокета домена Unix. example.com Всегда
server.port INT Номер порта сервера 80; 8080; 443 Если транспорт имеет tcp значение или udp.
tls.protocol.version строка Версия протокола TLS. 1.2; 1.3 Если подключение защищено с помощью TLS.

Так как эта метрика отслеживает длительность подключения, и в идеале http-подключения используются для нескольких запросов, контейнеры должны быть длиннее, чем те, которые используются для длительности запроса. Например, использование [ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 3000] предоставляет верхний контейнер 5 минут.

Доступно начиная с .NET 8.0.

Метрика: kestrel.rejected_connections
Имя. Тип инструмента Единица (UCUM) Description
kestrel.rejected_connections Счетчик {connection} Количество подключений, отклоненных сервером.
Атрибут Тип Описание Примеры Присутствие
network.transport строка Транспортный слой OSI или метод обмена данными между процессами. tcp; unix Всегда
network.type строка Сетевой уровень OSI или эквивалентный не OSI. ipv4; ipv6 Если транспорт имеет tcp значение или udp.
server.address строка Доменное имя сервера, если доступно без обратного поиска DNS; в противном случае IP-адрес или имя сокета домена Unix. example.com Всегда
server.port INT Номер порта сервера 80; 8080; 443 Если транспорт имеет tcp значение или udp.

Подключение, если текущее активное число превышает значение, настроенное с MaxConcurrentConnectionsпомощью.

Доступно начиная с .NET 8.0.

Метрика: kestrel.queued_connections
Имя. Тип инструмента Единица (UCUM) Description
kestrel.queued_connections UpDownCounter {connection} Количество подключений, которые в настоящее время находятся в очереди и ожидают запуска.
Атрибут Тип Описание Примеры Присутствие
network.transport строка Транспортный слой OSI или метод обмена данными между процессами. tcp; unix Всегда
network.transport строка Сетевой уровень OSI или эквивалентный не OSI. ipv4; ipv6 Если транспорт имеет tcp значение или udp.
server.address строка Доменное имя сервера, если доступно без обратного поиска DNS; в противном случае IP-адрес или имя сокета домена Unix. example.com Всегда
server.port INT Номер порта сервера 80; 8080; 443 Если транспорт имеет tcp значение или udp.

Доступно начиная с .NET 8.0.

Метрика: kestrel.queued_requests
Имя. Тип инструмента Единица (UCUM) Description
kestrel.queued_requests UpDownCounter {request} Количество HTTP-запросов в мультиплексированных подключениях (HTTP/2 и HTTP/3), которые в настоящее время находятся в очереди и ожидают запуска.
Атрибут Тип Описание Примеры Присутствие
network.protocol.name строка Уровень приложений OSI или эквивалентный не OSI. http; web_sockets Всегда
network.protocol.version строка Версия протокола, указанного в network.protocol.name. 1.1; 2 Всегда
network.transport строка Транспортный слой OSI или метод обмена данными между процессами. tcp; unix Всегда
network.transport строка Сетевой уровень OSI или эквивалентный не OSI. ipv4; ipv6 Если транспорт имеет tcp значение или udp.
server.address строка Доменное имя сервера, если доступно без обратного поиска DNS; в противном случае IP-адрес или имя сокета домена Unix. example.com Всегда
server.port INT Номер порта сервера 80; 8080; 443 Если транспорт имеет tcp значение или udp.

Доступно начиная с .NET 8.0.

Метрика: kestrel.upgraded_connections
Имя. Тип инструмента Единица (UCUM) Description
kestrel.upgraded_connections UpDownCounter {connection} Количество подключений, которые в настоящее время обновлены (WebSockets).
Атрибут Тип Описание Примеры Присутствие
network.transport строка Транспортный слой OSI или метод обмена данными между процессами. tcp; unix Всегда
network.transport строка Сетевой уровень OSI или эквивалентный не OSI. ipv4; ipv6 Если транспорт имеет tcp значение или udp.
server.address строка Доменное имя сервера, если доступно без обратного поиска DNS; в противном случае IP-адрес или имя сокета домена Unix. example.com Всегда
server.port INT Номер порта сервера 80; 8080; 443 Если транспорт имеет tcp значение или udp.

Счетчик отслеживает только подключения HTTP/1.1.

Доступно начиная с .NET 8.0.

Метрика: kestrel.tls_handshake.duration
Имя. Тип инструмента Единица (UCUM) Description
kestrel.tls_handshake.duration Гистограмма s Длительность подтверждения TLS на сервере.
Атрибут Тип Описание Примеры Присутствие
error.type строка Полное имя типа исключения. System.OperationCanceledException; Contoso.MyException Если исключение было создано.
network.transport строка Транспортный слой OSI или метод обмена данными между процессами. tcp; unix Всегда
network.transport строка Сетевой уровень OSI или эквивалентный не OSI. ipv4; ipv6 Если транспорт имеет tcp значение или udp.
server.address строка Доменное имя сервера, если доступно без обратного поиска DNS; в противном случае IP-адрес или имя сокета домена Unix. example.com Всегда
server.port INT Номер порта сервера 80; 8080; 443 Если транспорт имеет tcp значение или udp.
tls.protocol.version строка Версия протокола TLS. 1.2; 1.3 Если подключение защищено с помощью TLS.

При использовании OpenTelemetry контейнеры по умолчанию для этого metic имеют значение [ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ].

Доступно начиная с .NET 8.0.

Метрика: kestrel.active_tls_handshakes
Имя. Тип инструмента Единица (UCUM) Description
kestrel.active_tls_handshakes UpDownCounter {handshake} Количество подтверждения TLS, которые в настоящее время выполняются на сервере.
Атрибут Тип Описание Примеры Присутствие
network.transport строка Транспортный слой OSI или метод обмена данными между процессами. tcp; unix Всегда
network.transport строка Сетевой уровень OSI или эквивалентный не OSI. ipv4; ipv6 Если транспорт имеет tcp значение или udp.
server.address строка Доменное имя сервера, если доступно без обратного поиска DNS; в противном случае IP-адрес или имя сокета домена Unix. example.com Всегда
server.port INT Номер порта сервера 80; 8080; 443 Если транспорт имеет tcp значение или udp.

Доступно начиная с .NET 8.0.

Microsoft.AspNetCore.Http.Connections

Microsoft.AspNetCore.Http.Connections Метрики сообщают сведения о подключении из ASP.NET Core SignalR:

Метрика: signalr.server.connection.duration
Имя. Тип инструмента Единица (UCUM) Description
signalr.server.connection.duration Гистограмма s Длительность подключений на сервере.
Атрибут Тип Описание Примеры Присутствие
signalr.connection.status строка Состояние закрытия HTTP-подключения SignalR. app_shutdown; timeout Всегда
signalr.transport строка Тип транспорта SignalR web_sockets; long_polling Всегда

Доступно начиная с .NET 8.0.

значение Описание
normal_closure Подключение было закрыто обычно.
timeout Подключение было закрыто из-за времени ожидания.
app_shutdown Подключение было закрыто, так как приложение завершает работу.

signalr.transport — одно из следующих:

Значение Протокол
server_sent_events События, отправленные сервером
long_polling Длинный опрос
web_sockets WebSocket

Так как эта метрика отслеживает длительность подключения, и в идеале подключения SignalR устойчивы, контейнеры должны быть длиннее, чем те, которые используются для длительности запроса. Например, при использовании [0, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300] предоставляется верхний контейнер 5 минут.

Доступно начиная с .NET 8.0.

Метрика: signalr.server.active_connections
Имя. Тип инструмента Единица (UCUM) Description
signalr.server.active_connections UpDownCounter {connection} Количество подключений, которые в настоящее время активны на сервере.
Атрибут Тип Описание Примеры Присутствие
signalr.connection.status строка Состояние закрытия HTTP-подключения SignalR. app_shutdown; timeout Всегда
signalr.transport строка Тип транспорта SignalR web_sockets; long_polling Всегда

Доступно начиная с .NET 8.0.