Показатели на основе журнала Application Insights

Метрики Application Insights на основе журналов позволяют анализировать работоспособность контролируемых приложений, создавать мощные панели мониторинга и настраивать оповещения. Метрики относятся к двум следующим типам.

Так как стандартные метрики предварительно агрегируются во время сбора, они имеют более высокую производительность во время запроса. Поэтому они являются лучшим выбором для панелей мониторинга и оповещений в режиме реального времени. Метрики на основе журнала имеют больше измерений, что делает их главным вариантом для анализа данных и автоматизированной диагностики. С помощью селектора пространства имен можно переключаться между метриками на основе журнала и стандартными метриками в обозревателе метрик.

Интерпретация и использование запросов из этой статьи

В этой статье перечислены метрики с поддерживаемыми агрегатами и измерениями. Сведения о метриках на основе журнала включают в себя базовые инструкции запроса 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)"
}