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


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

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

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

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

Примечание.

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

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

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

Примечание.

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

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

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

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

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

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

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

Настройка

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

Для Функции Azure в плане потребления доступные параметры конфигурации ограничены 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
    

Примечание.

Если последняя версия агента Java Application Insights недоступна в Функции Azure, отправьте его вручную, выполнив следующие инструкции.

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

Пакеты 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

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

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

Чтобы собирать данные телеметрии из таких служб, как запросы, urllib3, httpxPsycoPG2 и т. д., используйте дистрибутив OpenTelemetry в Azure Monitor. Отслеживаемые входящие запросы, поступающие в приложение Python, размещенное в Функции Azure, не сопоставляются автоматически с отслеживанием телеметрии в нем. Вы можете вручную достичь корреляции трассировки, извлекив 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),
   ):
      ...

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