Application Insights для Java 2.x

Внимание!

Эта статья относится к Application Insights Java 2.x, которая больше не рекомендуется.

Документацию по последней версии можно найти в статье, посвященной Java 3.x для Application Insights.

Из этой статьи вы узнаете, как использовать Application Insights Java 2.x. В этой статье показано, как выполнить следующие действия:

  • Начните работу и узнайте, как инструментировать запросы, отслеживать зависимости, собирать счетчики производительности, диагностировать проблемы с производительностью и исключения, а также писать код для отслеживания действий пользователей с вашим приложением.
  • Отправляйте журналы трассировки в Application Insights и просматривайте их с помощью портала Application Insights.
  • Отслеживайте зависимости, перехватываемых исключений и время выполнения методов в веб-приложениях Java.
  • Фильтрация данных телеметрии в веб-приложении Java.
  • Изучите метрики производительности системы Linux в Application Insights с помощью collectd.
  • Измерение метрик для кода приложения на основе виртуальной машины Java (JVM). Экспортируйте данные в избранные системы мониторинга с помощью мониторинга приложений Micrometer.

Примечание

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

Приступая к работе с Application Insights в веб-проекте Java

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

Application Insights —это расширяемая служба аналитики для разработчиков веб-ресурсов, позволяющая оценивать производительность и использование работающего приложения. Надстройка Application Insights поддерживает приложения Java, работающие под управлением Linux, Unix или Windows.

Предварительные требования

Вам необходимы:

Получение ключа инструментирования Application Insights

  1. Войдите на портал Azure.

  2. На портале Azureсоздайте ресурс Application Insights. Задайте тип приложения: веб-приложение Java.

  3. Найдите ключ инструментирования нового ресурса. Далее будет необходимо вставить его в проект кода.

    Снимок экрана: панель

Добавление в проект пакета SDK Application Insights для Java

Выбор типа проекта.

Если проект уже настроен для сборки с использованием Maven, добавьте следующий код в свой файл pom.xml. Затем обновите зависимости проекта, чтобы скачать двоичные файлы.

    <dependencies>
      <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-web-auto</artifactId>
        <!-- or applicationinsights-web for manual web filter registration -->
        <!-- or applicationinsights-core for bare API -->
        <version>2.6.4</version>
      </dependency>
    </dependencies>

Часто задаваемые вопросы

  • Какова связь между компонентами -web-auto, -webи -core ?

    • applicationinsights-web-auto предоставляет метрики, которые отслеживают количество запросов сервлетов HTTP и время отклика, автоматически регистрируя фильтр сервлетов Application Insights во время выполнения.
    • applicationinsights-web также предоставляет метрики, которые отслеживают количество запросов сервлета HTTP и время отклика. Но требуется ручная регистрация фильтра сервлета Application Insights в приложении.
    • applicationinsights-core предоставляет базовый API, например, если приложение не основано на сервлете.
  • Как обновить пакет SDK до последней версии?

    • По состоянию на ноябрь 2020 г. для мониторинга приложений Java рекомендуется использовать Application Insights Java 3.x. Дополнительные сведения о начале работы см. в статье Application Insights Java 3.x.

Добавление файла ApplicationInsights.xml

Добавьте ApplicationInsights.xml в папку ресурсов своего проекта или убедитесь, что этот файл добавлен в путь класса развертывания проекта. Скопируйте в него следующий код XML.

Замените ключ инструментирования на ключ, полученный на портале Azure.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">

   <!-- The key from the portal: -->
   <InstrumentationKey>** Your instrumentation key **</InstrumentationKey>

   <!-- HTTP request component (not required for bare API) -->
   <TelemetryModules>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebRequestTrackingTelemetryModule"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebSessionTrackingTelemetryModule"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebUserTrackingTelemetryModule"/>
   </TelemetryModules>

   <!-- Events correlation (not required for bare API) -->
   <!-- These initializers add context data to each event -->
   <TelemetryInitializers>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationIdTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationNameTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebSessionTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserAgentTelemetryInitializer"/>
   </TelemetryInitializers>

</ApplicationInsights>

При необходимости файл конфигурации может находиться в любом расположении, доступном для приложения. Свойство системы -Dapplicationinsights.configurationDirectory определяет каталог, содержащий файл ApplicationInsights.xml. Например, файл конфигурации, расположенный вE:\myconfigs\appinsights\ApplicationInsights.xml , будет настроен со свойством -Dapplicationinsights.configurationDirectory="E:\myconfigs\appinsights".

  • Ключ инструментирования пересылается вместе с каждым элементом телеметрии; служба Application Insights отобразит его в ресурсе.
  • Компонент HTTP-запросов является необязательным. Он автоматически передает на портал телеметрию о запросах и значения времени ответа.
  • Корреляция события является дополнением к компоненту HTTP-запросов. Он назначает идентификатор каждому запросу, полученному сервером. Затем он добавляет этот идентификатор в качестве свойства к каждому элементу телеметрии в качестве свойства Operation.Id. Она позволяет сопоставлять данные телеметрии, связанные с каждым запросом, задавая фильтр в диагностическом поиске.

Другие способы задать ключ инструментирования

Пакет SDK Application Insights ищет ключ в следующем порядке:

  • Системное свойство: -DAPPINSIGHTS_INSTRUMENTATIONKEY=your_ikey
  • Переменная среды: APPINSIGHTS_INSTRUMENTATIONKEY
  • Файл конфигурации: ApplicationInsights.xml

Вы также можете задать его в коде:

    String instrumentationKey = "00000000-0000-0000-0000-000000000000";

    if (instrumentationKey != null)
    {
        TelemetryConfiguration.getActive().setInstrumentationKey(instrumentationKey);
    }

Добавление агента

Установите агент Java для записи исходящих HTTP-вызовов, запросов JDBC, ведения журнала приложений и улучшения именования операций.

Запуск приложения

Запустите его в режиме отладки на компьютере разработки или опубликуйте на сервере.

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

Вернитесь к ресурсу Application Insights в портал Azure.

Данные HTTP-запросов отображаются на панели обзора. Если его нет, подождите несколько секунд и выберите Обновить.

Снимок экрана: общие примеры данных.

Дополнительные сведения о метриках.

Щелкните любую диаграмму, чтобы увидеть более подробные агрегированные метрики.

Снимок экрана: панель сбоев Application Insights с диаграммами.

Данные экземпляров

Щелкните тип запроса, чтобы просмотреть отдельные экземпляры.

Снимок экрана: детализация определенного примера представления.

Log Analytics: эффективный язык запросов

По мере накопления дополнительных данных можно выполнять запросы для агрегирования данных и поиска отдельных экземпляров. Log Analytics — это мощный инструмент для понимания производительности и использования, а также для целей диагностики.

Снимок экрана: пример Log Analytics в портал Azure.

Установка приложения на сервере

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

  • Убедитесь, что брандмауэр позволяет приложению отправлять телеметрию на следующие порты:

    • dc.services.visualstudio.com:443
    • f5.services.visualstudio.com:443
  • Если исходящий трафик должен направляться через брандмауэр, определите системные свойства http.proxyHost и http.proxyPort.

  • На серверах Windows необходимо установить следующее:

Служба приложений Azure, Служба Azure Kubernetes, конфигурация виртуальных машин

Лучший и самый простой подход к мониторингу приложений, работающих в любых поставщиках ресурсов Azure, — использовать Application Insights Java 3.x.

Исключения и ошибки запросов

Необработанные исключения и ошибки запросов автоматически собираются веб-фильтром Application Insights.

Чтобы получить данные о других исключениях, можно вставить в код вызовы trackException ().

Мониторинг вызовов методов и внешних зависимостей.

Установите агент Java для указанных в журнале внутренних методов и вызовов, выполненных через JDBC, с данными о времени и для автоматического именования операций.

Распределенная трассировка W3C

Пакет средств разработки для Java Application Insights теперь поддерживает распределенную трассировку W3C.

Конфигурация входящего пакета SDK описана далее в статье Корреляция телеметрии в Application Insights.

Конфигурация входящих параметров пакета средств разработки задана в файле AI-Agent.xml.

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

Выберите Исследовать>метрики , чтобы просмотреть диапазон счетчиков производительности.

Снимок экрана: панель

Настройка сбора данных счетчиками производительности

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

    <PerformanceCounters>
       <UseBuiltIn>False</UseBuiltIn>
    </PerformanceCounters>

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

Можно указать дополнительные счетчики производительности для сбора.

Счетчики JMX (предоставляемые виртуальной машиной Java)
    <PerformanceCounters>
      <Jmx>
        <Add objectName="java.lang:type=ClassLoading" attribute="TotalLoadedClassCount" displayName="Loaded Class Count"/>
        <Add objectName="java.lang:type=Memory" attribute="HeapMemoryUsage.used" displayName="Heap Memory Usage-used" type="composite"/>
      </Jmx>
    </PerformanceCounters>
  • displayName: имя, отображаемое на портале Application Insights.
  • objectName: имя объекта JMX.
  • attribute: атрибут имени объекта JMX для получения.
  • type (необязательно): тип атрибута объекта JMX:
    • По умолчанию: простой тип, например int или long.
    • composite: данные счетчика производительности Attribute.Dataприведены в формате .
    • tabular: данные счетчика производительности приведены в формате строки таблицы.
Счетчики производительности Windows

Каждый счетчик производительности Windows входит в состав категории (аналогично поле является членом класса). Категории могут быть глобальными или иметь нумерованные или именованные экземпляры.

    <PerformanceCounters>
      <Windows>
        <Add displayName="Process User Time" categoryName="Process" counterName="%User Time" instanceName="__SELF__" />
        <Add displayName="Bytes Printed per Second" categoryName="Print Queue" counterName="Bytes Printed/sec" instanceName="Fax" />
      </Windows>
    </PerformanceCounters>
  • displayName: имя, отображаемое на портале Application Insights.
  • categoryName: категория счетчика производительности (объект производительности), с которой связан этот счетчик производительности.
  • counterName: имя счетчика производительности.
  • instanceName: имя экземпляра категории счетчика производительности или пустая строка (""), если категория содержит один экземпляр. Если categoryName значение равно Process , а счетчик производительности, который вы хотите получить, является текущим процессом виртуальной машины Java, в котором выполняется приложение, укажите "__SELF__".

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

Установите с помощью подключаемого модуля Application Insights , чтобы получить разнообразные системные и сетевые данные.

Получение данных о пользователях и сеансах

Теперь вы отправляете данные телеметрии с веб-сервера. Чтобы получить полное 360-градусное представление приложения, можно добавить дополнительный мониторинг:

Отправка собственных данных телеметрии

Теперь, когда вы установили пакет SDK, вы можете использовать API для отправки собственных данных телеметрии:

Доступность веб-тестов

Application Insights может тестировать ваш веб-сайт через равные промежутки времени для проверки, работает ли он и правильно ли отвечает на запросы.

Узнайте больше о настройке веб-тестов доступности.

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

См. специальные инструкции по устранению неполадок.

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

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

Просмотр журналов трассировки Java в Application Insights

Если вы используете Logback или Log4J (версия 1.2 или 2.0) для трассировки, можно настроить автоматическую пересылку журналов в Application Insights, где вы сможете их изучить.

Совет

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

Использование агента Java Application Insights

По умолчанию агент Java Application Insights автоматически записывает журналы, выполненные WARN на уровне и выше.

Пороговое значение ведения журнала можно изменить с помощью файлаAI-Agent.xml :

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging threshold="info"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

Вы можете отключить запись журнала агента Java с помощью файлаAI-Agent.xml :

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging enabled="false"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

Альтернативные варианты

Вместо использования агента Java можно выполнить следующие инструкции.

Установка пакета SDK для Java

Следуйте инструкциям по установке пакета SDK Application Insights для Java, если вы еще этого не сделали.

Добавление в проект библиотеки ведения журналов

Выберите подходящий метод для проекта.

Maven

Если в проекте уже настроено использование Maven для сборки, объедините один из следующих фрагментов кода в файлpom.xml . Затем обновите зависимости проекта, чтобы скачать двоичные файлы.

Logback


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-logback</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>

Log4J версии 2.0


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-log4j2</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>

Log4J версии 1.2


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-log4j1_2</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>
Gradle

Если в проекте уже настроено использование Gradle для сборки, добавьте одну из следующих строк в группу dependencies в файле build.gradle . Затем обновите зависимости проекта, чтобы скачать двоичные файлы.

Logback


    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-logback', version: '2.0.+'

Log4J версии 2.0

    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j2', version: '2.0.+'

Log4J версии 1.2

    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j1_2', version: '2.0.+'

Следуйте рекомендациям, чтобы вручную установить пакет SDK Для Java для Application Insights и скачать JAR-файл. На странице Maven Central щелкните ссылку jar в разделе скачивания для соответствующего аппендера. Добавьте в проект скачанный jar-файл аппендера.

Средство ведения журнала Скачивание Библиотека
Logback JAR-файл аппендера Logback applicationinsights-logging-logback
Log4J версии 2.0 JAR-файл аппендера Log4J версии 2 applicationinsights-logging-log4j2
Log4J версии 1.2 JAR-файл аппендера Log4J версии 1.2 applicationinsights-logging-log4j1_2

Добавление аппендера в платформу ведения журнала

Чтобы начать получать трассировки, объедините соответствующий фрагмент кода в файл конфигурации Logback или Log4J.

Logback


    <appender name="aiAppender" 
      class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender">
        <instrumentationKey>[APPLICATION_INSIGHTS_KEY]</instrumentationKey>
    </appender>
    <root level="trace">
      <appender-ref ref="aiAppender" />
    </root>

Log4J версии 2.0


    <Configuration packages="com.microsoft.applicationinsights.log4j.v2">
      <Appenders>
        <ApplicationInsightsAppender name="aiAppender" instrumentationKey="[APPLICATION_INSIGHTS_KEY]" />
      </Appenders>
      <Loggers>
        <Root level="trace">
          <AppenderRef ref="aiAppender"/>
        </Root>
      </Loggers>
    </Configuration>

Log4J версии 1.2


    <appender name="aiAppender" 
         class="com.microsoft.applicationinsights.log4j.v1_2.ApplicationInsightsAppender">
        <param name="instrumentationKey" value="[APPLICATION_INSIGHTS_KEY]" />
    </appender>
    <root>
      <priority value ="trace" />
      <appender-ref ref="aiAppender" />
    </root>

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

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

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

Исключения, отправленные средствами ведения журнала, будут отображаться на портале как телеметрия исключений .

Снимок экрана: область поиска ресурса Application Insights в портал Azure.

Мониторинг зависимостей, перехваченных исключений и времени выполнения методов в веб-приложениях Java

Если вы инструментировали веб-приложение Java с помощью пакета SDK Для Application Insights, вы можете использовать агент Java для получения более глубокой аналитики без каких-либо изменений в коде:

  • Зависимости. Данные о вызовах, которые приложение выполняет к другим компонентам, в том числе:

    • Исходящие HTTP-вызовы: перехватываются вызовы, выполненные через Apache HttpClient, OkHttpи java.net.HttpURLConnection .
    • Звонки Redis: звонки, выполненные через клиент Jedis, фиксируются.
    • Запросы JDBC: для MySQL и PostgreSQL, если вызов занимает больше 10 секунд, агент сообщает план запроса.
  • Ведение журнала приложений. Сбор и сопоставление журналов приложений с HTTP-запросами и другими данными телеметрии:

    • Log4j 1.2
    • Log4j2
    • Logback
  • Улучшенное именование операций. Используется для агрегирования запросов на портале.

    • Spring: на @RequestMappingоснове .
    • JAX-RS: на @Pathоснове .

Чтобы использовать агент для Java, его необходимо установить на сервере. Веб-приложения необходимо инструментировать пакетом SDK для Java Application Insights.

Установка агента Application Insights для Java

  1. Скачайте агент 2.x на компьютер с сервером Java. Убедитесь, что версия используемого агента Java версии 2.x совпадает с версией используемого пакета SDK для Java для Application Insights для 2.x.

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

    -javaagent:<full path to the agent JAR file>

    Например, в Tomcat на компьютере Linux:

    export JAVA_OPTS="$JAVA_OPTS -javaagent:<full path to agent JAR file>"

  3. Перезапустите сервер приложений.

Настройка агента

Создайте файл с именемAI-Agent.xml и поместите его в ту же папку, что и JAR-файл агента.

Задайте содержимое XML-файла. Измените приведенный ниже пример, включив необходимые функции или убрав ненужные.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn enabled="true">

         <!-- capture logging via Log4j 1.2, Log4j2, and Logback, default is true -->
         <Logging enabled="true" />

         <!-- capture outgoing HTTP calls performed through Apache HttpClient, OkHttp,
              and java.net.HttpURLConnection, default is true -->
         <HTTP enabled="true" />

         <!-- capture JDBC queries, default is true -->
         <JDBC enabled="true" />

         <!-- capture Redis calls, default is true -->
         <Jedis enabled="true" />

         <!-- capture query plans for JDBC queries that exceed this value (MySQL, PostgreSQL),
              default is 10000 milliseconds -->
         <MaxStatementQueryLimitInMS>1000</MaxStatementQueryLimitInMS>

      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

Дополнительная конфигурация (Spring Boot)

java -javaagent:/path/to/agent.jar -jar path/to/TestApp.jar

Для Служба приложений Azure выполните следующие действия.

  1. Выберите Параметры>Приложения Параметры.

  2. В разделе Параметры приложения добавьте новую пару "ключ-значение":

    • Ключ:JAVA_OPTS
    • Значение: -javaagent:D:/home/site/wwwroot/applicationinsights-agent-2.6.4.jar

    Агент должен быть упакованы в качестве ресурса в проекте, чтобы он отображался в каталоге D:/home/site/wwwroot/ . Чтобы убедиться, что агент находится в правильном каталоге Служба приложений, перейдите в раздел Средства >разработкиКонсоль отладкиРасширенные средства> разработки и проверьте содержимое каталога сайта.

  3. Сохраните параметры и перезапустите приложение. Эти действия применяются только к службам приложений, работающим в Windows.

Примечание

AI-Agent.xml и JAR-файл агента должны находиться в одной папке. Они часто помещаются вместе в папку /resources проекта.

Активация распределенной трассировки W3C

Добавьте следующий фрагмент кода в AI-Agent.xml:

<Instrumentation>
   <BuiltIn enabled="true">
      <HTTP enabled="true" W3C="true" enableW3CBackCompat="true"/>
   </BuiltIn>
</Instrumentation>

Примечание

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

В идеале это было бы так, если все службы были обновлены до более новых версий пакетов SDK, поддерживающих протокол W3C. Рекомендуется как можно скорее перейти на более новые версии пакетов SDK с поддержкой W3C.

Убедитесь, что как входящие , так и исходящие конфигурации (агент) одинаковы.

Просмотр данных

В ресурсе Application Insights сводные данные по удаленным зависимостям и времени выполнения методов отображаются на плитке "Производительность".

Для поиска отдельных экземпляров отчетов по зависимостям, исключениям и методам откройте Поиск.

Узнайте больше о диагностике проблем с зависимостями.

Вопросы или проблемы?

Воспользуйтесь следующими ресурсами:

Фильтрация данных телеметрии в веб-приложении Java

Фильтры позволяют выбрать данные телеметрии, которые веб-приложение Java отправляет в Application Insights. Есть несколько готовых фильтров, которые можно использовать. Вы также можете написать собственные настраиваемые фильтры.

В готовых фильтры используется следующее:

  • Уровень серьезности трассировки.
  • Конкретные URL-адреса, ключевые слова или коды ответов.
  • Быстрые ответы. Другими словами, запросы, на которые ваше приложение ответило быстро.
  • Имена конкретных событий.

Примечание

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

Если это представляет собой проблему, то используйте выборки.

Настройка фильтров

В ApplicationInsights.xmlдобавьте раздел, подобный следующему TelemetryProcessors :


    <ApplicationInsights>
      <TelemetryProcessors>

        <BuiltInProcessors>
           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>

           <Processor type="RequestTelemetryFilter">
                  <Add name="MinimumDurationInMS" value="100"/>
                  <Add name="NotNeededResponseCodes" value="200-400"/>
           </Processor>

           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="100"/>
                  <Add name="NotNeededNames" value="home,index"/>
                  <Add name="NotNeededUrls" value=".jpg,.css"/>
           </Processor>

           <Processor type="TelemetryEventFilter">
                  <!-- Names of events we don't want to see -->
                  <Add name="NotNeededNames" value="Start,Stop,Pause"/>
           </Processor>

           <!-- Exclude telemetry from availability tests and bots -->
           <Processor type="SyntheticSourceFilter">
                <!-- Optional: specify which synthetic sources,
                     comma-separated
                     - default is all synthetics -->
                <Add name="NotNeededSources" value="Application Insights Availability Monitoring,BingPreview"
           </Processor>

        </BuiltInProcessors>

        <CustomProcessors>
          <Processor type="com.fabrikam.MyFilter">
            <Add name="Successful" value="false"/>
          </Processor>
        </CustomProcessors>

      </TelemetryProcessors>
    </ApplicationInsights>

Проверьте полный набор встроенных процессоров.

Встроенные фильтры

В этом разделе рассматриваются доступные встроенные фильтры.

Фильтр телеметрии метрик


           <Processor type="MetricTelemetryFilter">
                  <Add name="NotNeeded" value="metric1,metric2"/>
           </Processor>
  • NotNeeded: разделенный запятыми список имен пользовательских метрик

Фильтр телеметрии просмотров страницы


           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="500"/>
                  <Add name="NotNeededNames" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>
  • DurationThresholdInMS: длительность — это время, затраченное на загрузку страницы. Если этот параметр задан, страницы, которые загружались быстрее, чем это время, не сообщаются.
  • NotNeededNames: разделенный запятыми список имен страниц.
  • NotNeededUrls: разделенный запятыми список фрагментов URL-адресов. Например, "home" отфильтровывает все страницы, которые содержат в URL-адресе слово "home".

Фильтр телеметрии запроса


           <Processor type="RequestTelemetryFilter">
                  <Add name="MinimumDurationInMS" value="500"/>
                  <Add name="NotNeededResponseCodes" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>

Фильтр искусственных источников

Фильтрует все данные телеметрии, имеющие значения в свойстве SyntheticSource . Включаются запросы от ботов, пауков и тестов доступности.

Фильтрует данные телеметрии для всех искусственных запросов:


           <Processor type="SyntheticSourceFilter" />

Отфильтровывает данные телеметрии для определенных искусственных источников:


           <Processor type="SyntheticSourceFilter" >
                  <Add name="NotNeeded" value="source1,source2"/>
           </Processor>
  • NotNeeded: разделенный запятыми список имен искусственных источников

Фильтр телеметрии событий

Фильтрует пользовательские события, зарегистрированные с помощью TrackEvent():


           <Processor type="TelemetryEventFilter" >
                  <Add name="NotNeededNames" value="event1, event2"/>
           </Processor>
  • NotNeededNames: разделенный запятыми список имен событий

Фильтр телеметрии трассировок

Фильтрует трассировки журналов, зарегистрированные с помощью TrackTrace() или сборщика платформы ведения журнала:


           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>
  • Допустимые FromSeverityLevel значения:

    • OFF: фильтрует все трассировки.
    • TRACE: фильтрация отсутствует. Соответствует уровню TRACE.
    • INFO: отфильтровывает уровень ТРАССИРОВКИ.
    • WARN: отфильтровывает TRACE и INFO.
    • ОШИБКА: отфильтровывает предупреждения, сведения и трассировки.
    • КРИТИЧЕСКОЕ. Фильтрует все, кроме CRITICAL.

Настраиваемые фильтры

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

Программирование фильтра

В коде создайте класс, реализующий TelemetryProcessor.


    package com.fabrikam.MyFilter;
    import com.microsoft.applicationinsights.extensibility.TelemetryProcessor;
    import com.microsoft.applicationinsights.telemetry.Telemetry;

    public class SuccessFilter implements TelemetryProcessor {

        /* Any parameters that are required to support the filter.*/
        private final String successful;

        /* Initializers for the parameters, named "setParameterName" */
        public void setNotNeeded(String successful)
        {
            this.successful = successful;
        }

        /* This method is called for each item of telemetry to be sent.
           Return false to discard it.
           Return true to allow other processors to inspect it. */
        @Override
        public boolean process(Telemetry telemetry) {
            if (telemetry == null) { return true; }
            if (telemetry instanceof RequestTelemetry)
            {
                RequestTelemetry requestTelemetry = (RequestTelemetry)    telemetry;
                return request.getSuccess() == successful;
            }
            return true;
        }
    }

Вызов фильтра в файле конфигурации

Теперь в ApplicationInsights.xml:



    <ApplicationInsights>
      <TelemetryProcessors>
        <CustomProcessors>
          <Processor type="com.fabrikam.SuccessFilter">
            <Add name="Successful" value="false"/>
          </Processor>
        </CustomProcessors>
      </TelemetryProcessors>
    </ApplicationInsights>

Вызов фильтра (Java Spring)

Для приложений, использующих платформу Java Spring, пользовательские обработчики данных телеметрии должны быть зарегистрированы в основном классе приложения в качестве bean-компонентов. Затем они будут автоматически встроены при запуске приложения.

@Bean
public TelemetryProcessor successFilter() {
      return new SuccessFilter();
}

Вы создаете собственные параметры фильтра в application.properties. Затем используйте платформу внешней конфигурации Spring Boot для передачи этих параметров в пользовательский фильтр.

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

В этом разделе приведен совет по устранению неполадок.

Мой фильтр не работает

Убедитесь, что вы указали допустимые значения параметров. Например, значения длительности должны быть целыми числами. Недопустимые значения приведут к тому, что фильтр будет проигнорирован. Если пользовательский фильтр породит исключение из конструктора или метода set, он будет проигнорирован.

collectd: метрики производительности Linux в Application Insights (не рекомендуется)

Чтобы изучить метрики производительности системы Linux в Application Insights, установите вместе с подключаемым модулем Application Insights. Это решение с открытым исходным кодом собирает разнообразные данные системной и сетевой статистики.

Как правило, вы используете collectd , если вы уже инструментировали веб-службу Java с помощью Application Insights. Он предоставляет больше данных, которые помогут повысить производительность приложения или диагностировать проблемы.

Получение ключа инструментирования

В портал Azure откройте ресурс Application Insights, в котором должны отображаться данные. Кроме того, можно создать новый ресурс.

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

Снимок экрана: панель обзора для ресурса Application Insights в портал Azure с выделенным ключом инструментирования.

Установка collectd и подключаемого модуля

На компьютерах с сервером Unix выполните следующие действия.

  1. Установите collectd 5.4.0 или более поздней версии.
  2. Скачайте подключаемый модуль записи сбора данных Application Insights. Запишите номер версии.
  3. Скопируйте jar-файл подключаемого модуля в /usr/share/collectd/java.
  4. Отредактируйте файл /etc/collectd/collectd.conf:
    • Убедитесь, что подключаемый модуль Java включен.

    • Обновите JVMArg для , java.class.path чтобы включить следующий JAR-файл. Номер версии должен совпадать с номером версии, которую вы загрузили:

      • /usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar
    • Добавьте этот фрагмент с помощью ключа инструментирования из ресурса:

      
           LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter"
           <Plugin ApplicationInsightsWriter>
              InstrumentationKey "Your key"
           </Plugin>
      

      Пример файла конфигурации (фрагмент):

      
          ...
          # collectd plugins
          LoadPlugin cpu
          LoadPlugin disk
          LoadPlugin load
          ...
      
          # Enable Java Plugin
          LoadPlugin "java"
      
          # Configure Java Plugin
          <Plugin "java">
            JVMArg "-verbose:jni"
            JVMArg "-Djava.class.path=/usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar:/usr/share/collectd/java/collectd-api.jar"
      
            # Enabling Application Insights plugin
            LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter"
      
            # Configuring Application Insights plugin
            <Plugin ApplicationInsightsWriter>
              InstrumentationKey "12345678-1234-1234-1234-123456781234"
            </Plugin>
      
            # Other plugin configurations ...
            ...
          </Plugin>
          ...
      

Настройте другие собираемые подключаемые модули, которые могут собирать различные данные из разных источников.

Перезапустите collectd в соответствии с инструкцией.

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

В ресурсе Application Insights откройте Метрики и добавьте диаграммы. Выберите метрики, которые вы хотите просмотреть, в категории Настраиваемые .

По умолчанию метрики со всех хост-компьютеров, которые их поставляют, объединяются. Чтобы просмотреть метрики для каждого узла, в области Сведения о диаграмме включите группирование и выберите группирование по CollectD-Host.

Исключить отправку определенной статистики

По умолчанию подключаемый модуль Application Insights отправляет все данные, собранные всеми включенными collectd read подключаемыми модулями.

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

  • Измените файл конфигурации.

  • В <Plugin ApplicationInsightsWriter>добавьте строки директив, подобные приведенным в следующей таблице:

    Директива Действие
    Exclude disk Исключите все данные, собранные подключаемым модулем disk .
    Exclude disk:read,write Исключите источники с именами read и write из подключаемого disk модуля.

Каждая директива должна начинаться с новой строки.

Проблемы?

В этом разделе приведены советы по устранению неполадок.

Данные не отображаются в портале

Попробуйте выполнить следующие действия:

  • Откройте Поиск и проверьте поступление необработанных событий. Иногда они появляются в обозревателе метрик не сразу.
  • Может потребоваться задать исключения брандмауэра для исходящих данных.
  • Включите трассировку в подключаемом модуле Application Insights. Добавьте в <Plugin ApplicationInsightsWriter>следующую строку:
    • SDKLogger true
  • Откройте терминал и запустите collectd в подробном режиме, чтобы увидеть все проблемы, о которые он сообщает:
    • sudo collectd -f

Известная проблема

Подключаемый модуль записи Application Insights несовместим с определенными подключаемыми модулями чтения. Некоторые подключаемые модули иногда отправляют NaN, но подключаемый модуль Application Insights ожидает число с плавающей запятой.

  • Симптом. В журнале collectd отображаются ошибки, в том числе "AI: ... SyntaxError: непредвиденный маркер N.
  • Обходной путь. Исключите данные, собранные подключаемыми модулями записи проблем.

Мониторинг приложений Micrometer измеряет метрики для кода приложения на основе виртуальной машины Java и позволяет экспортировать данные в предпочитаемые системы мониторинга. В этом разделе описывается, как использовать Micrometer с Application Insights как для приложений Spring Boot, так и для приложений, отличных от Spring Boot.

Использование Spring Boot 1.5x

Добавьте следующие зависимости в файл pom.xml или build.gradle :

  • Application Insights spring-boot-starter 2.5.0 или более поздней версии.
  • Micrometer Azure Registry 1.1.0 или более поздней версии.
  • Micrometer Spring Legacy 1.1.0 или более поздней версии. Он поддерживает код автонастройки в платформе Spring.
  • Ресурс ApplicationInsights.

Выполните следующие действия.

  1. Обновите файлpom.xml приложения Spring Boot и добавьте в него следующие зависимости:

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-spring-boot-starter</artifactId>
        <version>2.5.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-spring-legacy</artifactId>
        <version>1.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-azure-monitor</artifactId>
        <version>1.1.0</version>
    </dependency>
    
    
  2. Обновите файл application.properties или YML с помощью ключа инструментирования Application Insights, используя следующее свойство:

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. Создайте приложение и запустите его.

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

Использование Spring 2.x

Добавьте следующие зависимости в файл pom.xml или build.gradle :

  • spring-boot-starter для Application Insights версии 2.1.2 или более поздней.
  • Azure-spring-boot-metrics-starters версии 2.0.7 или более поздней
  • Ресурс Application Insights.

Выполните следующие действия.

  1. Обновите файлpom.xml приложения Spring Boot и добавьте в него следующую зависимость:

    <dependency> 
          <groupId>com.microsoft.azure</groupId>
          <artifactId>azure-spring-boot-metrics-starter</artifactId>
          <version>2.0.7</version>
    </dependency>
    
  2. Обновите файл application.properties или YML с помощью ключа инструментирования Application Insights, используя следующее свойство:

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. Создайте приложение и запустите его.

Описанные выше действия повысят работу с предварительно агрегированными метриками, автоматически собранными в Azure Monitor. Дополнительные сведения о точной настройке начального приложения Application Insights Spring Boot см. в файле сведений на GitHub.

Метрики по умолчанию:

  • Автоматически настроенные метрики для Tomcat, Виртуальной машины Java, Метрики обратного восстановления журнала, Метрики Log4J, Метрики времени доступности, Метрики обработчика и FileDescriptorMetrics.
  • Например, если Netflix Hystrix присутствует в пути к классу, мы также получим эти метрики.
  • Добавив соответствующие метрики, можно получить следующие метрики:
    • CacheMetrics(CaffeineCache, , EhCache2, HazelcastCacheGuavaCacheи JCache)
    • DataBaseTableMetrics
    • HibernateMetrics
    • JettyMetrics
    • Метрики OkHttp3
    • Метрики Kafka

Отключите автоматический сбор метрик:

  • Метрики виртуальной машины Java:
    • management.metrics.binders.jvm.enabled=false
  • Метрики Logback:
    • management.metrics.binders.logback.enabled=false
  • Метрики времени работы:
    • management.metrics.binders.uptime.enabled=false
  • Метрики процессора:
    • management.metrics.binders.processor.enabled=false
  • FileDescriptorMetrics:
    • management.metrics.binders.files.enabled=false
  • Метрики Hystrix, если библиотека в classpath:
    • management.metrics.binders.hystrix.enabled=false
  • Метрики AspectJ, если библиотека в classpath:
    • spring.aop.enabled=false

Примечание

Укажите предыдущие свойства в файле application.properties или application.yml приложения Spring Boot.

Использование Micrometer со сторонними веб-приложениями

Добавьте следующие зависимости в файл pom.xml или build.gradle :

  • Web Auto 2.5.0 или более поздней версии для Application Insights
  • Реестр Azure Micrometer 1.1.0 или более поздней версии.
  • Ресурс Application Insights.

Выполните следующие действия.

  1. Добавьте следующие зависимости в файл pom.xml или build.gradle :

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-azure-monitor</artifactId>
            <version>1.1.0</version>
        </dependency>
    
        <dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>applicationinsights-web-auto</artifactId>
            <version>2.5.0</version>
        </dependency>
    
  2. Если вы еще этого не сделали, добавьте файлApplicationInsights.xml в папку resources. Дополнительные сведения см. в статье Добавление файла ApplicationInsights.xml.

  3. Пример класса Servlet (выводит метрику таймера):

        @WebServlet("/hello")
        public class TimedDemo extends HttpServlet {
    
          private static final long serialVersionUID = -4751096228274971485L;
    
          @Override
          @Timed(value = "hello.world")
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
    
            response.getWriter().println("Hello World!");
            MeterRegistry registry = (MeterRegistry) getServletContext().getAttribute("AzureMonitorMeterRegistry");
    
        //create new Timer metric
            Timer sampleTimer = registry.timer("timer");
            Stream<Integer> infiniteStream = Stream.iterate(0, i -> i+1);
            infiniteStream.limit(10).forEach(integer -> {
              try {
                Thread.sleep(1000);
                sampleTimer.record(integer, TimeUnit.MILLISECONDS);
              } catch (Exception e) {}
               });
          }
          @Override
          public void init() throws ServletException {
            System.out.println("Servlet " + this.getServletName() + " has started");
          }
          @Override
          public void destroy() {
            System.out.println("Servlet " + this.getServletName() + " has stopped");
          }
    
        }
    
    
  4. Пример класса конфигурации:

         @WebListener
         public class MeterRegistryConfiguration implements ServletContextListener {
    
           @Override
           public void contextInitialized(ServletContextEvent servletContextEvent) {
    
         // Create AzureMonitorMeterRegistry
           private final AzureMonitorConfig config = new AzureMonitorConfig() {
             @Override
             public String get(String key) {
                 return null;
             }
            @Override
               public Duration step() {
                 return Duration.ofSeconds(60);}
    
             @Override
             public boolean enabled() {
                 return false;
             }
         };
    
      MeterRegistry azureMeterRegistry = AzureMonitorMeterRegistry.builder(config);
    
             //set the config to be used elsewhere
             servletContextEvent.getServletContext().setAttribute("AzureMonitorMeterRegistry", azureMeterRegistry);
    
           }
    
           @Override
           public void contextDestroyed(ServletContextEvent servletContextEvent) {
    
           }
         }
    

Дополнительные сведения о метриках см. в документации по Micrometer.

Другой пример кода по созданию различных метрик можно найти в официальном репозитории Micrometer на GitHub.

Привязка дополнительных коллекций метрик

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

SpringBoot/Spring

Создайте компонент соответствующей категории метрик. Например, предположим, что вам нужны метрики кэша Гуава:

    @Bean
    GuavaCacheMetrics guavaCacheMetrics() {
        Return new GuavaCacheMetrics();
    }

Несколько метрик не включены по умолчанию, но могут быть привязаны предыдущим способом. Полный список см. в репозитории Micrometer GitHub.

Стороннее приложение

Добавьте следующий код привязки в файл конфигурации:

    New GuavaCacheMetrics().bind(registry);

Дальнейшие шаги