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


Мониторинг выполнения в Функции Azure

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

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

Так как инструментирование Application Insights встроено в Функции Azure, требуется действительная строка подключения или ключ инструментирования при подключении функционального приложения к ресурсу Application Insights. Это подключение настраивается как параметр приложения при создании ресурса приложения-функции в Azure. Если у приложения-функции еще нет этого параметра, его можно настроить вручную.

Вы также можете отслеживать само функциональное приложение с помощью Azure Monitor. Дополнительные сведения см. в разделе Monitor Функции Azure.

Параметры экспорта телеметрии

Функции Azure генерирует данные телеметрии как из процесса хоста Functions, так и из языкового рабочего процесса, в котором выполняется ваш код функции. Вы можете выбрать, как экспортируются эти данные телеметрии:

Метод экспорта Описание Recommendation
OpenTelemetry с Экспортером Azure Monitor Экспортирует данные телеметрии в формате OpenTelemetry в Application Insights и при необходимости в любую конечную точку, совместимую с OTLP. Рекомендуется для новых и существующих приложений.
Встроенная интеграция Application Insights Интеграция по умолчанию, которая отправляет данные телеметрии в Application Insights без дополнительного кода. Хорошо подходит для базовых потребностей мониторинга.
SDK классического типа для Application Insights Пакеты SDK для конкретного языка, обеспечивающие детальное управление пользовательской телеметрией. Наследие. Планирование миграции в OpenTelemetry.

Внимание

Для новых и существующих приложений рекомендуется использовать Экспортер OpenTelemetry для Azure Monitor для отправки телеметрии в Application Insights. Если вы используете классический пакет SDK Application Insights для настройки экспортируемой телеметрии, планируйте переход на OpenTelemetry для долгосрочной поддержки и доступа к последним возможностям наблюдаемости. Классические пакеты SDK Application Insights не будут получать новые обновления компонентов. OpenTelemetry не поддерживается для приложений в процессе C#.

Экспортер Azure Monitor OpenTelemetry требует строку подключения Application Insights (APPLICATIONINSIGHTS_CONNECTION_STRING) и не поддерживает использование ключа инструментирования.

Чтобы узнать, как настроить OpenTelemetry в функциональном приложении, см. статью Использование OpenTelemetry с Функции Azure.

Стоимость и ограничения Application Insights

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

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

Внимание

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

Интеграция с Application Insights

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

Внимание

Для суверенных облаков, таких как Azure для государственных организаций, требуется использовать строку подключения Application Insights (APPLICATIONINSIGHTS_CONNECTION_STRING) вместо ключа инструментирования. Чтобы узнать больше, см. справочник по APPLICATIONINSIGHTS_CONNECTION_STRING.

В следующей таблице приведены поддерживаемые функции Application Insights, доступные для мониторинга приложений-функций.

версия среды выполнения Функции Azure 1.x 4.x+
Автоматический сбор
• Запросы
• Исключения
• Счетчики производительности
• Зависимости
   — HTTP
   — служебная шина
   — Центры событий
   — SQL*
Поддерживаемые функции
• QuickPulse/LiveMetrics Да Да
   — Безопасный канал управления Да
• Выборка Да Да
• Пульсы Да
Корреляция
• служебная шина Да
• Центры событий Да
Можно настроить
Полностью настраиваемая Да

* Чтобы включить коллекцию текста строки запроса SQL, см. раздел "Включить коллекцию запросов SQL".

Сбор данных телеметрии

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

Примечание.

Помимо данных из функций и узла Функций Azure, можно также собирать данные из контроллера масштабирования Функций Azure.

Уровни логирования и категории логирования

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

Каждому журналу присваивается уровень логирования. Значение представляет собой целое число, указывающее на относительную важность:

LogLevel Код Описание
Трассировка 0 Журналы, содержащие наиболее подробные сообщения. Эти сообщения могут содержать конфиденциальные данные приложения. Эти сообщения по умолчанию отключены, и их никогда не следует включать в рабочей среде.
Отладка 1 Журналы, используемые для интерактивного анализа во время разработки. Эти журналы в основном содержат сведения, полезные при отладки и не представляющие ценности в долгосрочной перспективе.
Информация 2 Журналы, отслеживающие общий поток работы приложения. Эти журналы должны быть полезны в долгосрочной перспективе.
Предупреждение 3 Журналы, которые подчеркивают аномальное или непредвиденное событие в процессе работы приложения, но в противном случае не вызывают остановки его выполнения.
Ошибка 4 Журналы, отмечающие, что текущий процесс выполнения остановлен из-за сбоя. Эти ошибки должны указывать на сбой в текущем действии, а не на сбой всего приложения.
Критически важно 5 Журналы, описывающие неустранимый сбой приложения или системы либо катастрофическую неисправность, которая требует немедленного внимания.
нет 6 Отключает ведение журнала для указанной категории.

Конфигурация host.json файла определяет, сколько журналов приложение функций отправляет в Application Insights.

Дополнительные сведения об уровнях ведения журнала см. в разделе "Настройка уровней ведения журнала".

Относя регистрируемые в журнале элементы к той или иной категории, вы получаете больший контроль над данными телеметрии, созданными из конкретных источников в вашем приложении-функции. Категории упрощают аналитику собранных данных. Трассировки, записанные из кода функции, распределяются по отдельным категориям на основании имени функции. Дополнительные сведения о категориях см. в разделе Настройка категорий.

Настраиваемые данные телеметрии

Для записи пользовательских данных телеметрии из функций рекомендуется использовать экспортер OpenTelemetry, который предоставляет данные телеметрии на основе стандартов, которые можно отправить в Application Insights и любую конечную точку, совместимую с OTLP.

Вы также можете использовать язычные версии классических SDK Application Insights для написания пользовательской телеметрии в C#, JavaScript и Python. Однако эти классические пакеты SDK являются устаревшими и не получат новые обновления компонентов. Планируйте миграцию на OpenTelemetry для долгосрочной поддержки.

Зависимости

Начиная с версии 2.x Azure Functions, Application Insights автоматически собирает данные о зависимостях для привязок, использующих определённые клиентские SDK. Application Insights собирает данные о следующих зависимостях:

  • Azure Cosmos DB
  • Центры событий Azure
  • Служебная шина Azure
  • службы служба хранилища Azure (блобы, очереди и таблицы)

Регистрируются также HTTP-запросы и вызовы к базам данных с помощью SqlClient. Полный список зависимостей, поддерживаемых Application Insights, см. в разделе "Автоматически отслеживаемые зависимости" статьи "Отслеживание зависимостей в Azure Application Insights".

Application Insights создает схему приложения из собранных данных о зависимостях. Ниже приведен пример карты приложения функции с триггером HTTP и выходной привязкой к Хранилищу очередей.

Screenshot отображает карту приложения с зависимостью на портале Azure.

Зависимости записываются на уровне Information. Если вы фильтруете по Warning адресу или выше, данные зависимостей не отображаются. Кроме того, автоматический сбор зависимостей происходит за пределами пользовательской области. Для получения данных о зависимостях убедитесь, что уровень установлен не менее Information вне пользовательской области (Function.<YOUR_FUNCTION_NAME>.User) в вашей среде выполнения.

Помимо автоматической сбора данных зависимостей, в журналы можно записывать пользовательские сведения о зависимостях. Рекомендуемый подход — использовать экспортер OpenTelemetry для отслеживания зависимостей на основе стандартов.

Вы также можете использовать классические пакеты SDK Application Insights для конкретного языка, но они являются устаревшими и не будут получать новые обновления компонентов:

Счетчики производительности

Автоматическая коллекция счетчиков производительности не поддерживается при запуске в Linux.

Запись в журналы

Способ записи в журналы и используемые для этого API зависят от языка проекта приложения-функции. Дополнительные сведения о записи журналов из функций см. в руководстве разработчика для вашего языка.

Анализ данных

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

Журналы потоковой передачи

При разработке приложения часто требуется увидеть, что записывается в журналы практически в режиме реального времени при выполнении в Azure.

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

  • Встроенная потоковая передача журналов. Платформа Службы приложений позволяет просматривать поток файлов журналов приложений. Этот поток эквивалентен выходным данным, которые отображаются при отладке функций во время локальной разработки и при использовании вкладки Тест на портале. При этом отображаются все данные в журнале. Дополнительные сведения см. в разделе Журналы потоков данных. Этот потоковый метод поддерживает только один экземпляр и не может использоваться с приложением, которое выполняется в Linux в тарифном плане с оплатой по потреблению.

  • Live Metrics Stream: когда приложение-функция подключено к Application Insights, вы можете просматривать данные журнала и другие метрики практически в реальном времени на портале Azure с помощью Live Metrics Stream. Используйте этот метод при мониторинге функций, выполняемых в нескольких экземплярах или в Linux в плане потребления. Этот метод использует данные выборки.

Потоки журнала можно просматривать как на портале, так и в большинстве локальных сред разработки. Сведения о том, как включить журналы потоковой передачи, см. в разделе Включение потоковых журналов выполнения в Функции Azure.

Журналы диагностики

Application Insights позволяет экспортировать данные телеметрии для долгосрочного хранения или в другие службы аналитики.

Так как Функции также интегрируются с Azure Monitor, можно также использовать параметры диагностики для отправки данных телеметрии в различные назначения, включая журналы Azure Monitor. Дополнительные сведения см. в разделе Monitor Функции Azure.

Журналы контроллера масштабирования

Контроллер масштабирования Функции Azure отслеживает экземпляры узла Функции Azure, на котором выполняется приложение. Этот контроллер принимает решения о том, когда следует добавлять или удалять экземпляры, исходя из текущей производительности. Вы можете настроить контроллер масштабирования для передачи журналов в Application Insights, чтобы лучше понять, какие решения он принимает в отношении вашего приложения-функции. Вы также можете сохранять созданные журналы в хранилище BLOB для последующего анализа другой службой.

Чтобы включить эту функцию, добавьте параметр приложения с именем SCALE_CONTROLLER_LOGGING_ENABLED в параметры приложения-функции. Для получения дополнительных сведений см. Настройка журналов контроллера масштабирования.

Метрики Azure Monitor

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

Сообщить о проблеме

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

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

Дополнительные сведения см. на следующих ресурсах: