Мониторинг Функции Azure с помощью Аналитика приложений Azure Monitor

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

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

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

Примечание.

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

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

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

Примечание.

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

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

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

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

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

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

Снимок экрана: включение агента 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 для приложения Аналитика Java недоступна в Функции Azure, отправьте его вручную, выполнив следующие инструкции.

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

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

Повторяющиеся журналы

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

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, httpx, PsycoPG2 и т. д., используйте дистрибутив 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),
   ):
      ...

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