Анализ телеметрии Функций Azure в Application Insights
Функции Azure интегрируются с Application Insights, что позволяет вам лучше отслеживать свои приложения-функции. Application Insights собирает данные телеметрии, создаваемые приложением-функцией, в том числе записываемые этим приложением в журналы. Интеграция с Application Insights обычно настраивается при создании приложения-функции. Если в приложении-функции не задан ключ инструментирования, необходимо сначала включить интеграцию с Application Insights.
По умолчанию данные, собранные из приложения-функции, хранятся в Application Insights. На портале Azure доступен широкий набор визуализаций данных телеметрии из Application Insights. Вы можете детально исследовать журналы ошибок, а также запрашивать события и метрики. В этой статье есть несколько простых примеров, демонстрирующих просмотр собранных данных и выполнение запросов по ним. Дополнительные сведения о просмотре данных приложения-функции в Application Insights см. в статье Что такое Application Insights?
Чтобы иметь возможность просматривать данные Application Insights из приложения-функции, у вас должны быть по меньшей мере разрешения для роли участника в приложении-функции. Кроме того, необходимо иметь разрешение средства чтения мониторинга для экземпляра Application Insights. По умолчанию вам предоставляются такие разрешения для любого создаваемого приложения-функции и экземпляра Application Insights.
Дополнительные сведения о хранении данных и потенциальных затратах на хранение см. в статье Сбор и хранение данных в Application Insights.
Просмотр телеметрии на вкладке "Монитор"
При включенной интеграции с Application Insights данные телеметрии можно просматривать на вкладке Монитор.
На странице приложения-функции выберите функцию, которая выполнялась по крайней мере один раз после настройки Application Insights. Затем в области слева выберите Монитор. Периодически выбирайте Обновить, пока не появится список вызовов функций.
Примечание.
Для отображения списка может потребоваться до пяти минут. Это время необходимо клиенту, чтобы подготовить пакеты данных телеметрии для передачи на сервер. Такая задержка отсутствует в случае Live Metrics Stream. Эта служба подключается к узлу решения "Функции" при загрузке страницы, поэтому журналы передаются на нее напрямую.
Чтобы просмотреть журналы для вызова определенной функции, выберите ссылку на столбец Дата (UTC) для этого вызова. Выходные данные ведения журнала для этого вызова отображаются на новой странице.
Выберите Запустить в Application Insights, чтобы просмотреть источник запроса, который извлекает данные журнала Azure Monitor в журнале Azure. Если вы впервые используете функцию Azure Log Analytics в подписке, вам будет предложено ее включить.
После включения Log Analytics отображается следующий запрос. Как вы видите, результаты запроса возвращаются только за последние 30 дней (
where timestamp > ago(30d)
) и не могут содержать более 20 строк (take 20
). В отличие от них, список сведений о вызовах для функции содержит информацию за последние 30 дней без ограничений.
Дополнительные сведения см. в разделе Запросы к данным телеметрии далее в этой статье.
Просмотр данных телеметрии в Application Insights
Чтобы открыть Application Insights из приложения-функции на портале Azure, сделайте следующее:
Откройте приложение-функцию на портале.
Выберите Application Insights в разделе Параметры на странице слева.
Если вы впервые используете Application Insights в этой подписке, вам будет предложено включить эту службу. Для этого щелкните Включить Application Insights, а затем Применить на следующей странице.
Дополнительные сведения об использовании Application Insights см. в документации по Application Insights. В этом разделе представлено несколько примеров просмотра данных в Application Insights. Если вы уже знакомы с Application Insights, можете сразу переходить к разделам, посвященным конфигурации и настройке данных телеметрии.
При оценке поведения, производительности и ошибок в функциях могут быть полезны следующие области Application Insights.
Анализ | Description |
---|---|
Сбои | Создание диаграмм и оповещений на основе сбоев функции и исключений сервера. Имя операции обозначает имя функции. Сбои в зависимостях здесь не отображаются, если вы не настроили для них пользовательскую телеметрию. |
Производительность | Анализ проблем с производительностью путем просмотра использования ресурсов и пропускной способности для экземпляров облачных ролей. Эти данные производительности будут полезны для отладки в тех случаях, когда функции создают чрезмерную нагрузку на базовые ресурсы. |
Метрики | Создание диаграмм и оповещений на основе метрик. Используются такие метрики: число вызовов функций, время выполнения и частота успешных попыток. |
Интерактивные метрики | Просмотр данных метрик по мере их создания почти в реальном времени. |
Запросы к данным телеметрии
Аналитика в Application Insights предоставляет доступ ко всем данным телеметрии в формате таблиц в базе данных. Функция аналитики поддерживает язык запросов для извлечения, обработки и визуализации данных.
Выберите Журналы для просмотра или запроса событий в журналах.
В этом примере показано распределение запросов по рабочим ролям за последние 30 минут.
requests
| where timestamp > ago(30m)
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart
Доступные таблицы представлены на вкладке Схема в области слева. Данные, создаваемые при вызовах функций, вы найдете в следующих таблицах:
Таблицу | Description |
---|---|
traces | Журналы, созданные средой выполнения, контроллером масштабирования и трассировками в коде функции. Для размещения плана потребления Flex также содержатся журналы, traces созданные во время развертывания кода. |
requests | По одному запросу для каждого вызова функции. |
exceptions | Любые исключения в среде выполнения. |
customMetrics | Число успешных и неудачных вызовов, доля успешных попыток, продолжительность. |
customEvents | События, отслеживаемые средой выполнения, например HTTP-запросы, запускающие функцию. |
performanceCounters | Сведения о производительности серверов, на которых выполняются функции. |
Остальные таблицы предназначены для проверок доступности, а также телеметрии клиента и браузера. Вы можете реализовать пользовательскую телеметрию, чтобы добавлять в них данные.
В каждой таблице есть поле customDimensions
, где хранится часть данных о конкретной функции. Например, следующий запрос получает все трассировки с уровнем журнала Error
.
traces
| where customDimensions.LogLevel == "Error"
Среда выполнения предоставляет поля customDimensions.LogLevel
и customDimensions.Category
. Вы можете указать дополнительные поля в журналах, которые указываются в коде функции. Пример для языка C# см. в разделе Структурированное ведение журнала руководства для разработчиков библиотек классов .NET.
Вызовы функции запроса
Каждому вызову функции присваивается уникальный идентификатор. InvocationId
включается в настраиваемое измерение и может использоваться для сопоставления всех журналов из определенного выполнения функции.
traces
| project customDimensions["InvocationId"], message
Корреляция данных телеметрии
Журналы из разных функций можно сопоставить с помощью operation_Id
. Используйте следующий запрос, чтобы вернуть все журналы для определенной логической операции.
traces
| where operation_Id == '45fa5c4f8097239efe14a2388f8b4e29'
| project timestamp, customDimensions["InvocationId"], message
| order by timestamp
Процент выборки
Конфигурацию выборки можно использовать для уменьшения объема данных телеметрии. Используйте следующий запрос, чтобы определить, работает ли выборка или нет. Если вы видите, что RetainedPercentage
для любого типа меньше 100, для этого типа телеметрии применяется выборка.
union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType
Запросы по журналам контроллера масштабирования
Эта функция предоставляется в предварительной версии.
Настроив ведение журнала контроллера масштабирования и интеграцию с Application Insights, вы сможете выполнять поиск по журналам в Application Insights для запросов по созданным контроллером масштабирования журналам. Журналы контроллера масштабирования сохраняются в коллекции traces
в категории ScaleControllerLogs.
Следующий запрос выполняет поиск по всем журналам контроллера масштабирования для текущего приложения-функции за указанный промежуток времени:
traces
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"
Следующий запрос расширяет предыдущий и извлекает только те записи журнала, которые указывают на изменение масштаба:
traces
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"
| where message == "Instance count changed"
| extend Reason = CustomDimensions.Reason
| extend PreviousInstanceCount = CustomDimensions.PreviousInstanceCount
| extend NewInstanceCount = CustomDimensions.CurrentInstanceCount
Запрос журналов развертывания кода потребления Flex
Внимание
План потребления Flex в настоящее время находится в предварительной версии.
Следующий запрос можно использовать для поиска всех журналов развертывания кода для текущего приложения-функции в течение указанного периода времени:
traces
| extend deploymentId = customDimensions.deploymentId
| where deploymentId != ''
| project timestamp, deploymentId, message, severityLevel, customDimensions, appName
Метрики, зависящие от плана потребления
Если функция выполняется в плане потребления, ее стоимость оценивается в ГБ/с за одно выполнение. Затраты на выполнение рассчитываются путем объединения используемой памяти с временем выполнения. Подробные сведения см. в статье Оценка затрат на план потребления.
Следующие запросы телеметрии получают данные о метриках, которые влияют на стоимость выполнения функций в плане потребления.
Определение используемого объема памяти
В разделе Мониторингвыберите Журналы (Аналитика), затем скопируйте следующий запрос телеметрии и вставьте его в окно запроса, после чего нажмите Выполнить. Этот запрос возвращает общий объем использованной памяти для выбранного времени.
performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value
Результаты должны выглядеть, как показано ниже:
Метка времени [UTC] | name | значение |
---|---|---|
12.09.2019, 1:05:14.947 | байт исключительного пользования | 209 932 288 |
12.09.2019, 1:06:14.994 | байт исключительного пользования | 212 189 184 |
12.09.2019, 1:06:30.010 | байт исключительного пользования | 231 714 816 |
12.09.2019, 1:07:15.040 | байт исключительного пользования | 210 591 744 |
12.09.2019, 1:12:16.285 | байт исключительного пользования | 216 285 184 |
12.09.2019, 1:12:31.376 | байт исключительного пользования | 235 806 720 |
Определение длительности
Azure Monitor отслеживает метрики на уровне ресурсов, что для функций соответствует уровню приложений-функций. Интеграция Application Insights обеспечивает предоставление метрик для каждой функции. Ниже приведен пример запроса аналитики для получения средней длительности выполнения функции:
customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name | averageDurationMilliseconds |
---|---|
QueueTrigger AvgDurationMs | 16.087 |
QueueTrigger MaxDurationMs | 90.249 |
QueueTrigger MinDurationMs | 8.522 |
Следующие шаги
Дополнительные сведения о мониторинге в Функциях Azure: