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


Мониторинг функций Azure с помощью Azure Monitor Application Insights

Функция Azure предлагает встроенную интеграцию с Application Insights для мониторинга функций. Для языков, отличных от .NET и .NET Core, необходимы специализированные для языка компоненты и расширения, чтобы получить все преимущества распределенной трассировки.

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

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

Примечание.

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

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

Распределенная трассировка для приложений Java

Примечание.

Эта функция раньше имела 8–9-секундное время холодного запуска, которое было сокращено до менее чем 1 секунды. Если вы были одним из первых пользователей этой функции (например, до февраля 2023 г.), ознакомьтесь с разделом "Устранение неполадок", чтобы обновить на текущую версию и воспользоваться новым, более быстрым запуском.

Чтобы просмотреть больше данных из приложений Azure Functions на Java, чем собирается по умолчанию, включите агент Application Insights Java 3.x. Этот агент позволяет Application Insights автоматически собирать и сопоставлять зависимости, журналы и метрики из популярных библиотек и пакетов SDK для разработки программного обеспечения Azure. Эта телеметрия является дополнением к телеметрии запросов, уже захваченную функциями.

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

Для более сложных вариантов использования можно изменить данные телеметрии, добавив диапазоны, обновив состояние диапазона и добавив атрибуты диапазона. Вы также можете отправлять пользовательские данные телеметрии с помощью стандартных API.

Включение распределенной трассировки для приложений-функций Java

На панели приложения-функции Обзор перейдите в Application Insights. В разделе "Уровень коллекции" выберите "Рекомендуемый".

Снимок экрана: включение агента Java AppInsights.

Настройка

Чтобы настроить эту функцию для приложения Azure Functions, работающего не на плане потребления, добавьте переменные среды в настройки приложения. Сведения о доступных конфигурациях см. в разделе "Параметры конфигурации": Azure Monitor Application Insights для Java.

Для Azure Functions в плане с оплатой за потребление доступные параметры конфигурации ограничены APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL и APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL. Чтобы настроить дополнительные параметры функции в плане потребления, разверните собственный агент, см. Настраиваемый агент распределенной трассировки для Java-функций.

Развертывание собственного агента приведет к более длительным последствиям холодного запуска для функций в рамках плана потребления.

Устранение неполадок

Если вы приняли эту функцию до февраля 2023 года, функции Java могут иметь медленное время запуска. В области Обзор приложения-функции перейдите к Конфигурация в меню навигации слева. Затем выберите параметры приложения и выполните следующие действия, чтобы устранить проблему.

Windows

  1. Проверьте, существуют ли следующие параметры и удалите их:

    XDT_MicrosoftApplicationInsights_Java -> 1
    ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
    
  2. Включите последнюю версию, добавив этот параметр:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Тариф "Выделенный"/"Премиум" для Linux

  1. Проверьте, существуют ли следующие параметры и удалите их:

    ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
    
  2. Включите последнюю версию, добавив этот параметр:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Тестирование подключения между узлом приложения и службой приема

Пакеты SDK и агенты Application Insights отправляют данные телеметрии для приема в виде вызовов REST к точкам приема. Вы можете протестировать подключение с вашего веб-сервера или хост-компьютера приложения к точкам подключения службы приёма данных, используя низкоуровневые REST-клиенты из команд PowerShell или curl. См. Устранение неполадок с отсутствующими данными телеметрии приложений в Azure Monitor Application Insights.

Дублирующиеся логи

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

Log4j

Добавьте следующий фильтр в log4j.xml:

<Filters>
  <ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>

Пример:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
      <Filters>
        <ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
      </Filters>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>
Logback

Добавьте следующий фильтр в logback.xml:

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  <level>OFF</level>
</filter>  

Пример:

<configuration debug="true">
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are  by default assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>OFF</level>
      </filter>  
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Распределенная трассировка для приложений-функций Node.js

Чтобы просмотреть больше данных из приложения Node.js, работающего в Функциях Azure, чем собирается по умолчанию с помощью автоинструментации, инструментируйте приложение вручную с помощью дистрибутива OpenTelemetry в Azure Monitor.

Распределенная трассировка для приложений-функций Python

Чтобы собирать данные телеметрии из таких служб, как Requests, urllib3, httpxPsycopg2 и т. д., используйте Azure Monitor OpenTelemetry Distro. Запросы, поступающие в ваше приложение Python, размещенное в Azure Functions, которые были отслежены, не автоматически сопоставляются с телеметрией, собираемой внутри него. Вы можете вручную достичь корреляции трассировки, извлекив TraceContext непосредственно следующим образом:

import azure.functions as func

from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.propagate import extract

# Configure Azure monitor collection telemetry pipeline
configure_azure_monitor()

def main(req: func.HttpRequest, context) -> func.HttpResponse:
   ...
   # Store current TraceContext in dictionary format
   carrier = {
      "traceparent": context.trace_context.Traceparent,
      "tracestate": context.trace_context.Tracestate,
   }
   tracer = trace.get_tracer(__name__)
   # Start a span using the current context
   with tracer.start_as_current_span(
      "http_trigger_span",
      context=extract(carrier),
   ):
      ...

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