Анализ телеметрии Функций 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 данные телеметрии можно просматривать на вкладке Монитор.

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

    Invocations list

    Примечание.

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

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

    Invocation details

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

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

    Application Insights Analytics invocation list

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

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

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

  1. Откройте приложение-функцию на портале.

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

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

Open Application Insights from the function app Overview page

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

Application Insights Overview tab

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

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

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

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

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

Analytics example

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

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

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

Таблицу Description
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

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

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

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

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

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

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

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

Метка времени [UTC] имя значение
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
имя averageDurationMilliseconds
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger MinDurationMs 8.522

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

Дополнительные сведения о мониторинге в Функциях Azure: