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


Анализ телеметрии Функций Azure в Application Insights

Функции Azure интегрируются с Application Insights, что позволяет вам лучше отслеживать свои приложения-функции. Application Insights собирает данные телеметрии, создаваемые вашим функциональным приложением, включая информацию, которую ваше приложение записывает в журналы. Интеграция с Application Insights обычно настраивается при создании приложения-функции. Если в приложении-функции не задан ключ инструментирования, необходимо сначала включить интеграцию с Application Insights.

По умолчанию данные, собранные из приложения-функции, хранятся в Application Insights. На портале Azure доступен широкий набор визуализаций данных телеметрии из Application Insights. Вы можете детально исследовать журналы ошибок, а также запрашивать события и метрики. В этой статье есть несколько простых примеров, демонстрирующих просмотр собранных данных и выполнение запросов по ним. Дополнительные сведения об изучении данных приложения-функции в Application Insights см. в статье "Что такое Application Insights?

Чтобы иметь возможность просматривать данные Application Insights из приложения-функции, у вас должны быть по меньшей мере разрешения для роли участника в приложении-функции. Кроме того, необходимо иметь разрешение Monitoring Reader на экземпляр Application Insights. По умолчанию у вас есть такие разрешения для любого создаваемого функционального приложения и экземпляра Application Insights.

Дополнительные сведения о хранении данных и потенциальных затратах на хранение см. в статье Сбор и хранение данных в Application Insights.

Просмотр телеметрии на вкладке "Монитор"

При включенной интеграции с Application Insights данные телеметрии можно просматривать на вкладке Монитор.

  1. На странице приложения-функции выберите функцию, которая выполнялась по крайней мере один раз после настройки Application Insights. Затем в области слева выберите Монитор. Периодически выбирайте Обновить, пока не появится список вызовов функций.

    Список вызовов

    Примечание.

    Для отображения списка может потребоваться до пяти минут. Это время необходимо клиенту, чтобы подготовить пакеты данных телеметрии для передачи на сервер. Такая задержка отсутствует в случае Live Metrics Stream. Эта служба подключается к узлу хоста "Функции" при загрузке страницы, поэтому журналы транслируются непосредственно на страницу.

  2. Чтобы просмотреть журналы для вызова определенной функции, выберите ссылку на столбец Дата (UTC) для этого вызова. Выходные данные ведения журнала для этого вызова отображаются на новой странице.

    Сведения о вызове

  3. Выберите Запустить в Application Insights, чтобы увидеть источник запроса, извлекающего данные журнала Azure Monitor в Azure Log. Если вы впервые используете функцию Azure Log Analytics в подписке, вам будет предложено ее включить.

  4. После включения Log Analytics отображается следующий запрос. Как вы видите, результаты запроса возвращаются только за последние 30 дней (where timestamp > ago(30d)) и не могут содержать более 20 строк (take 20). В отличие от этого, список сведений о вызовах для функции содержит информацию за последние 30 дней без ограничений.

    Список вызовов аналитики Application Insights

Дополнительные сведения см. в разделе Запросы к данным телеметрии далее в этой статье.

Просмотр данных телеметрии в Application Insights

Чтобы открыть Application Insights из приложения-функции на портале Azure, сделайте следующее:

  1. Перейдите к вашему приложению-функции в портале.

  2. Выберите Application Insights в разделе Параметры на странице слева.

  3. Если вы впервые используете Application Insights в этой подписке, вам будет предложено включить эту службу. Для этого щелкните Включить Application Insights, а затем Применить на следующей странице.

Откройте Application Insights на странице обзора функционального приложения

Дополнительные сведения об использовании Application Insights см. в документации по Application Insights. В этом разделе представлено несколько примеров просмотра данных в Application Insights. Если вы уже знакомы с Application Insights, можете сразу переходить к разделам, посвященным конфигурации и настройке данных телеметрии.

Вкладка «Обзор» в Application Insights

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

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

Запросы к данным телеметрии

Аналитика в Application Insights предоставляет доступ ко всем данным телеметрии в формате таблиц в базе данных. Функция аналитики поддерживает язык запросов для извлечения, обработки и визуализации данных.

Выберите Журналы для просмотра или запроса событий в журналах.

Пример данных аналитики

В этом примере запроса показано распределение запросов на каждого работника за последние 30 минут.

requests
| where timestamp > ago(30m) 
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

Доступные таблицы представлены на вкладке Схема в области слева. Данные, создаваемые при вызовах функций, вы найдете в следующих таблицах:

Таблица Описание
трассировки Журналы, созданные средой выполнения, контроллером масштабирования и трассировками в коде функции. Для хостинга в рамках плана потребления Flex, traces также включены журналы, созданные во время развертывания кода.
запросы По одному запросу для каждого вызова функции.
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

Следующий запрос можно использовать для поиска всех журналов развертывания кода для текущего приложения-функции в течение указанного периода времени:

traces
| extend deploymentId = customDimensions.deploymentId
| where deploymentId != ''
| project timestamp, deploymentId, message, severityLevel, customDimensions, appName

Метрики, зависящие от плана потребления

Если функция выполняется в плане потребления, ее стоимость оценивается в ГБ/с за одно выполнение. Затраты на выполнение рассчитываются путем объединения используемой памяти с временем выполнения. Подробные сведения см. в статье Оценка затрат на план потребления.

Следующие запросы телеметрии получают данные о метриках, которые влияют на стоимость выполнения функций в плане потребления.

Определение используемого объема памяти

В разделе Мониторингвыберите Журналы (Аналитика), затем скопируйте следующий запрос телеметрии и вставьте его в окно запроса, после чего нажмите Выполнить. Этот запрос возвращает общий объем использованной памяти для выбранного времени.

performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value

Результаты должны выглядеть, как показано ниже:

Метка времени [UTC] имя значение
12.09.2019, 01:05:14.947 частные байты 209 932 288
12.09.2019, 01:06:14.994 Приватные байты 212 189 184
12.09.2019, 1:06:30.010 дп частные байты 231 714 816
12.09.2019, 1:07:15.040 AM Приватные байты 210 591 744
12.09.2019, 01: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
имя средняяДлительностьВМиллисекундах
ТриггерОчереди СредняяДлительностьМс 16.087
ТриггерОчереди МаксимальнаяДлительностьМс 90.249
ТриггерОчереди МинПродолжительностьМс 8.522

Следующие шаги

Узнайте больше о мониторинге функций Azure.