Показатели на основе журнала Application Insights
Метрики Application Insights на основе журналов позволяют анализировать работоспособность контролируемых приложений, создавать мощные панели мониторинга и настраивать оповещения. Метрики относятся к двум следующим типам.
- Метрики на основе журнала, невидимые для стороннего наблюдателя, преобразуются в запросы Kusto из хранимых событий.
- Стандартные метрики хранятся в виде предварительно подготовленных временных рядов .
Так как стандартные метрики предварительно агрегируются во время сбора, они имеют более высокую производительность во время запроса. Поэтому они являются лучшим выбором для панелей мониторинга и оповещений в режиме реального времени. Метрики на основе журнала имеют больше измерений, что делает их главным вариантом для анализа данных и автоматизированной диагностики. С помощью селектора пространства имен можно переключаться между метриками на основе журнала и стандартными метриками в обозревателе метрик.
Интерпретация и использование запросов из этой статьи
В этой статье перечислены метрики с поддерживаемыми агрегатами и измерениями. Сведения о метриках на основе журнала включают в себя базовые инструкции запроса Kusto. Для удобства в каждом запросе используются значения по умолчанию для степени детализации времени, типа диаграммы и иногда разбиение измерения, что упрощает использование запроса в Log Analytics без необходимости изменений.
При построении одной и той же метрики в обозревателе метрик нет значений по умолчанию; запрос динамически корректируется в соответствии с настройками диаграммы.
Выбранный диапазон времени преобразуется в дополнительное предложение where timestamp..., чтобы выбрать только события из выбранного диапазона времени. Например, в случае с диаграммой, показывающей данные за последние 24 часа, запрос содержит | where timestamp > ago(24 h).
Выбранная степень детализации времени помещается в итоговое предложение summarize ... by bin(timestamp, [time grain]).
Все выбранные измерения Фильтр преобразуются в дополнительные предложения where.
Выбранное измерение Разделенная диаграмма преобразуется в дополнительное свойство суммирования. Например, если вы разбиваете диаграмму по расположению и строите график, используя степень детализации времени 5 минут, предложение summarize суммируется ... by bin(timestamp, 5 m), location.
Примечание.
Если вы не знакомы с языком запросов Kusto, начните с копирования и вставки инструкций Kusto на панель запросов Log Analytics, не внося никаких изменений. Нажмите кнопку Выполнить, чтобы получить базовую диаграмму. По мере изучения синтаксиса языка запросов можно приступить к внесению небольших изменений и изучению влияния изменений. Изучение собственных данных — отличный способ приступить к реализации всех возможностей Log Analytics и Azure Monitor.
Метрики доступности
Метрики в категории доступности позволяют проверить работоспособность веб-приложения в любой точке мира. Настройте тесты доступности, чтобы начать использовать метрики из этой категории.
Доступность (availabilityResults/availabilityPercentage)
Метрика Доступность показывает процент запусков веб-тестов, в ходе которых не было выявлено проблем. Наименьшее возможное значение равно 0, что означает ошибку при выполнении всех веб-тестов. Значение 100 показывает, что все веб-тесты успешно прошли условия проверки.
Единица измерения | Поддерживаемые агрегирования | Поддерживаемые измерения |
---|---|---|
Процентное отношение | По средней | Расположение запуска, имя теста |
availabilityResults
| summarize sum(todouble(success == 1) * 100) / count() by bin(timestamp, 5m), location
| render timechart
Продолжительность теста доступности (availabilityResults/duration)
Метрика Продолжительность теста доступности показывает, сколько времени заняло выполнение веб-теста. Для многошаговых веб-тестов метрика показывает общее время выполнения всех шагов.
Единица измерения | Поддерживаемые агрегирования | Поддерживаемые измерения |
---|---|---|
Миллисекунды | Среднее, Мин., Макс. | Расположение запуска, Имя теста, Результат теста |
availabilityResults
| where notempty(duration)
| extend availabilityResult_duration = iif(itemType == 'availabilityResult', duration, todouble(''))
| summarize sum(availabilityResult_duration)/sum(itemCount) by bin(timestamp, 5m), location
| render timechart
Тесты доступности (availabilityResults/count)
Метрика тесты доступности отражает количество веб-тестов, выполняемых Azure Monitor.
Единица измерения | Поддерживаемые агрегирования | Поддерживаемые измерения |
---|---|---|
Count | Count | Расположение запуска, Имя теста, Результат теста |
availabilityResults
| summarize sum(itemCount) by bin(timestamp, 5m)
| render timechart
Метрики браузера
Метрики браузера собираются пакетом SDK JavaScript Application Insights из реальных браузеров конечных пользователей. Они предоставляют полезные сведения о работе пользователей с веб-приложением. Метрики браузера обычно не вычисляются. Это означает, что они обеспечивают более высокую точность определения частоты использования по сравнению с метриками на стороне сервера, которые могут быть искажены в ходе выборки.
Примечание.
Для сбора метрик браузера в приложение необходимо внедрить инструменты с помощью пакета SDK JavaScript для Application Insights.
Время загрузки страницы браузера (browserTimings/totalDuration)
Время с момента отправки запроса пользователя до загрузки DOM, таблиц стилей, сценариев и изображений.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения |
---|---|---|
Миллисекунды | Среднее, Мин., Макс. | нет |
browserTimings
| where notempty(totalDuration)
| extend _sum = totalDuration
| extend _count = itemCount
| extend _sum = _sum * _count
| summarize sum(_sum) / sum(_count) by bin(timestamp, 5m)
| render timechart
Время обработки клиента (browserTiming/processingDuration)
Время с момента получения последнего байта документа до загрузки модели DOM. Обработка асинхронных запросов может продолжаться.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения |
---|---|---|
Миллисекунды | Среднее, Мин., Макс. | нет |
browserTimings
| where notempty(processingDuration)
| extend _sum = processingDuration
| extend _count = itemCount
| extend _sum = _sum * _count
| summarize sum(_sum)/sum(_count) by bin(timestamp, 5m)
| render timechart
Время подключения к сети при загрузке страницы (browserTimings/networkDuration)
Время между запросом пользователя и сетевым подключением. Включает время поиска DNS и транспортного подключения.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения |
---|---|---|
Миллисекунды | Среднее, Мин., Макс. | нет |
browserTimings
| where notempty(networkDuration)
| extend _sum = networkDuration
| extend _count = itemCount
| extend _sum = _sum * _count
| summarize sum(_sum) / sum(_count) by bin(timestamp, 5m)
| render timechart
Время получения отклика (browserTimings/receiveDuration)
Время от первого до последнего байта или до отключения.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения |
---|---|---|
Миллисекунды | Среднее, Мин., Макс. | нет |
browserTimings
| where notempty(receiveDuration)
| extend _sum = receiveDuration
| extend _count = itemCount
| extend _sum = _sum * _count
| summarize sum(_sum) / sum(_count) by bin(timestamp, 5m)
| render timechart
Время отправки запроса (browserTimings/sendDuration)
Время от установки сетевого подключения до получения первого байта.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения |
---|---|---|
Миллисекунды | Среднее, Мин., Макс. | нет |
browserTimings
| where notempty(sendDuration)
| extend _sum = sendDuration
| extend _count = itemCount
| extend _sum = _sum * _count
| summarize sum(_sum) / sum(_count) by bin(timestamp, 5m)
| render timechart
Метрики сбоев
Метрики в Сбоях показывают проблемы с обработкой запросов, вызовами зависимостей и созданными исключениями.
Исключения браузера (exceptions/browser)
Эта метрика отражает число исключений, вызванных из кода приложения, выполняемого в браузере. В метрику включаются только исключения, которые были записаны с помощью вызова trackException()
API Application Insights.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения | Примечания. |
---|---|---|---|
Count | Count | нет | В версии на основе журнала используется агрегирование Sum. |
exceptions
| where notempty(client_Browser)
| summarize sum(itemCount) by bin(timestamp, 5m)
| render barchart
Сбои вызова зависимости (dependencies/failed)
Число неудачных вызовов зависимостей.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения | Примечания. |
---|---|---|---|
Count | Count | нет | В версии на основе журнала используется агрегирование Sum. |
dependencies
| where success == 'False'
| summarize sum(itemCount) by bin(timestamp, 5m)
| render barchart
Исключения (exceptions/count)
Каждый раз, когда вы регистрируете исключение в Application Insights, вызывается метод trackException() пакета SDK. Метрика исключений показывает количество зарегистрированных исключений.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения | Примечания. |
---|---|---|---|
Count | Count | Имя роли облака, Экземпляр роли облака, Тип устройства | В версии на основе журнала используется агрегирование Sum. |
exceptions
| summarize sum(itemCount) by bin(timestamp, 5m)
| render barchart
Неудачные запросы (requests/failed)
Число отслеженных запросов к серверу, отмеченных как неудачные. По умолчанию пакет SDK Application Insights автоматически помечает каждый запрос сервера, который вернул код ответа HTTP 5xx или 4xx в качестве неудачного запроса. Эту логику можно настроить, изменив свойство success элемента телеметрии запроса в пользовательском инициализаторе телеметрии.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения | Примечания. |
---|---|---|---|
Count | Count | Экземпляр роли облака, Имя облачной роли, Реальный или искусственный трафик, Производительность запросов, Код отклика | В версии на основе журнала используется агрегирование Sum. |
requests
| where success == 'False'
| summarize sum(itemCount) by bin(timestamp, 5m)
| render barchart
Исключения сервера (exceptions/server)
Эта метрика показывает количество исключений сервера.
Единица измерения | Поддерживаемые агрегирования | Предварительно подготовленные измерения | Примечания. |
---|---|---|---|
Count | Count | Имя роли облака, Экземпляр роли облака | В версии на основе журнала используется агрегирование Sum. |
exceptions
| where isempty(client_Browser)
| summarize sum(itemCount) by bin(timestamp, 5m)
| render barchart
Счетчики производительности
Используйте метрики в категории Счетчики производительности для доступа к счетчикам производительности системы, собранным Application Insights.
Доступная память (performanceCounters/availableMemory)
performanceCounters
| where ((category == "Memory" and counter == "Available Bytes") or name == "availableMemory")
| extend performanceCounter_value = iif(itemType == "performanceCounter", value, todouble(''))
| summarize sum(performanceCounter_value) / count() by bin(timestamp, 1m)
| render timechart
Частота исключений (performanceCounters/exceptionRate)
performanceCounters
| where ((category == ".NET CLR Exceptions" and counter == "# of Exceps Thrown / sec") or name == "exceptionRate")
| extend performanceCounter_value = iif(itemType == 'performanceCounter',value,todouble(''))
| summarize sum(performanceCounter_value) / count() by bin(timestamp, 1m)
| render timechart
Время выполнения запроса НТТР (performanceCounters/requestExecutionTime)
performanceCounters
| where ((category == "ASP.NET Applications" and counter == "Request Execution Time") or name == "requestExecutionTime")
| extend performanceCounter_value = iif(itemType == "performanceCounter", value, todouble(''))
| summarize sum(performanceCounter_value) / count() by bin(timestamp, 1m)
| render timechart
Скорость HTTP-запроса (performanceCounters/requestsPerSecond)
performanceCounters
| where ((category == "ASP.NET Applications" and counter == "Requests/Sec") or name == "requestsPerSecond")
| extend performanceCounter_value = iif(itemType == "performanceCounter", value, todouble(''))
| summarize sum(performanceCounter_value) / count() by bin(timestamp, 1m)
| render timechart
НТТР-запросы в очереди приложений (performanceCounters/requestsInQueue)
performanceCounters
| where ((category == "ASP.NET Applications" and counter == "Requests In Application Queue") or name == "requestsInQueue")
| extend performanceCounter_value = iif(itemType == "performanceCounter", value, todouble(''))
| summarize sum(performanceCounter_value) / count() by bin(timestamp, 1m)
| render timechart
ЦП процесса (performanceCounters/processCpuPercentage)
Метрика показывает, какая часть общей мощности процессора потребляется процессом, на котором размещается отслеживаемое приложение.
Единица измерения | Поддерживаемые агрегирования | Поддерживаемые измерения |
---|---|---|
Процентное отношение | Среднее, Мин., Макс. | Экземпляр облачной роли |
performanceCounters
| where ((category == "Process" and counter == "% Processor Time Normalized") or name == "processCpuPercentage")
| extend performanceCounter_value = iif(itemType == "performanceCounter", value, todouble(''))
| summarize sum(performanceCounter_value) / count() by bin(timestamp, 1m)
| render timechart
Примечание.
Диапазон метрики — от 0 до 100 * n, где n — число доступных ядер ЦП. Например, значение метрики 200 % может означать полное использование двух ядер ЦП или половину использования 4 ядер ЦП и т. д. Нормализованная загрузка ЦП процесса — это альтернативная метрика, собираемая многими пакетами SDK, которая представляет одно и то же значение, но делит его на число доступных ядер ЦП. Таким образом, диапазон метрики Нормализованная загрузка ЦП процесса составляет от 0 до 100.
Скорость ввода-вывода процесса (performanceCounters/processIOBytesPerSecond)
Единица измерения | Поддерживаемые агрегирования | Поддерживаемые измерения |
---|---|---|
Байты в секунду | Среднее, Мин., Макс. | Экземпляр облачной роли |
performanceCounters
| where ((category == "Process" and counter == "IO Data Bytes/sec") or name == "processIOBytesPerSecond")
| extend performanceCounter_value = iif(itemType == "performanceCounter", value, todouble(''))
| summarize sum(performanceCounter_value) / count() by bin(timestamp, 1m)
| render timechart
Байты исключительного пользования процесса (performanceCounters/processPrivateBytes)
Объем памяти, отличной от общей, выделенный отслеживаемым процессом для данных.
Единица измерения | Поддерживаемые агрегирования | Поддерживаемые измерения |
---|---|---|
Байт | Среднее, Мин., Макс. | Экземпляр облачной роли |
performanceCounters
| where ((category == "Process" and counter == "Private Bytes") or name == "processPrivateBytes")
| extend performanceCounter_value = iif(itemType == "performanceCounter", value, todouble(''))
| summarize sum(performanceCounter_value) / count() by bin(timestamp, 1m)
| render timechart
Загруженность процессора (performanceCounters/processorCpuPercentage)
Использование ЦП всеми процессами, работающими на экземпляре контролируемого сервера.
Единица измерения | Поддерживаемые агрегирования | Поддерживаемые измерения |
---|---|---|
Процентное отношение | Среднее, Мин., Макс. | Экземпляр облачной роли |
Примечание.
Метрика загруженности процессора недоступна для приложений, размещенных в службах приложений Azure. Используйте метрику ЦП процесса для отслеживания загрузки ЦП веб-приложениями, размещенными в службах приложений.
performanceCounters
| where ((category == "Processor" and counter == "% Processor Time") or name == "processorCpuPercentage")
| extend performanceCounter_value = iif(itemType == "performanceCounter", value, todouble(''))
| summarize sum(performanceCounter_value) / count() by bin(timestamp, 1m)
| render timechart
Метрики сервера
Вызовы зависимостей (dependencies/count)
Эта метрика зависит от количества вызовов зависимостей.
dependencies
| summarize sum(itemCount) by bin(timestamp, 5m)
| render barchart
Длительность зависимости (dependencies/duration)
Эта метрика относится к длительности вызовов зависимостей.
dependencies
| where notempty(duration)
| extend dependency_duration = iif(itemType == 'dependency',duration,todouble(''))
| extend _sum = dependency_duration
| extend _count = itemCount
| extend _sum = _sum*_count
| summarize sum(_sum)/sum(_count) by bin(timestamp, 1m)
| render timechart
Запросы сервера (requests/count)
Эта метрика отражает количество входящих запросов сервера, полученных веб-приложением.
requests
| summarize sum(itemCount) by bin(timestamp, 5m)
| render barchart
Время ответа сервера (requests/duration)
Эта метрика отражает время, затраченное на обработку входящих запросов серверами.
requests
| where notempty(duration)
| extend request_duration = iif(itemType == 'request', duration, todouble(''))
| extend _sum = request_duration
| extend _count = itemCount
| extend _sum = _sum*_count
| summarize sum(_sum) / sum(_count) by bin(timestamp, 1m)
| render timechart
Метрики использования
Время загрузки страницы (pageViews/duration)
Эта метрика относится к количеству времени, затраченного на загрузку событий PageView.
pageViews
| where notempty(duration)
| extend pageView_duration = iif(itemType == 'pageView', duration, todouble(''))
| extend _sum = pageView_duration
| extend _count = itemCount
| extend _sum = _sum * _count
| summarize sum(_sum) / sum(_count) by bin(timestamp, 5m)
| render barchart
Просмотры страниц (pageViews/Count)
Число событий PageView, регистрируемых с помощью метода TrackPageView() API Application Insights.
pageViews
| summarize sum(itemCount) by bin(timestamp, 1h)
| render barchart
Сеансы (sessions/count)
Эта метрика относится к числу уникальных идентификаторов сеансов.
union traces, requests, pageViews, dependencies, customEvents, availabilityResults, exceptions, customMetrics, browserTimings
| where notempty(session_Id)
| summarize dcount(session_Id) by bin(timestamp, 1h)
| render barchart
Трассировки (traces/count)
Число трассировочных инструкций, регистрируемых с помощью вызова метода TrackTrace() Application Insights API.
traces
| summarize sum(itemCount) by bin(timestamp, 1h)
| render barchart
Пользователи (users/count)
Число уникальных пользователей, которые обращаются к приложению. Точность этой метрики может в значительной степени зависеть от использования телеметрических методов отбора проб и фильтрации.
union traces, requests, pageViews, dependencies, customEvents, availabilityResults, exceptions, customMetrics, browserTimings
| where notempty(user_Id)
| summarize dcount(user_Id) by bin(timestamp, 1h)
| render barchart
Пользователи, Прошедшие проверку подлинности (пользователи/прошедшие проверку подлинности)
Количество уникальных пользователей, которые прошли проверку подлинности в приложении.
union traces, requests, pageViews, dependencies, customEvents, availabilityResults, exceptions, customMetrics, browserTimings
| where notempty(user_AuthenticatedId)
| summarize dcount(user_AuthenticatedId) by bin(timestamp, 1h)
| render barchart
Доступ ко всем данным напрямую с помощью REST API Application Insights
REST API Application Insights позволяет программным способом получить метрики на основе журналов. Он также содержит необязательный параметр ai.include-query-payload, который при добавлении в строку запроса предлагает API возвращать не только данные таймерии, но и оператор язык запросов Kusto (KQL), используемый для получения. Этот параметр может быть особенно полезным для пользователей, стремясь понять связь между необработанными событиями в Log Analytics и результирующей метрикой на основе журналов.
Чтобы получить доступ к данным напрямую, передайте параметр ai.include-query-payload в API Application Insights в запросе с помощью KQL.
api.applicationinsights.io/v1/apps/DEMO_APP/metrics/users/authenticated?api_key=DEMO_KEY&prefer=ai.include-query-payload
Ниже приведен пример возвращаемой инструкции KQL для метрики "Прошедшие проверку подлинности пользователей". (В этом примере "пользователи/прошедшие проверку подлинности" — это идентификатор метрики.)
output
{
"value": {
"start": "2024-06-21T09:14:25.450Z",
"end": "2024-06-21T21:14:25.450Z",
"users/authenticated": {
"unique": 0
}
},
"@ai.query": "union (traces | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (requests | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (pageViews | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (dependencies | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (customEvents | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (availabilityResults | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (exceptions | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (customMetrics | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (browserTimings | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)) | where notempty(user_AuthenticatedId) | summarize ['users/authenticated_unique'] = dcount(user_AuthenticatedId)"
}