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


Application Insights для Java 2.x

Caution

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

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

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

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

Замечание

Поддержка ввода ключей инструментирования будет завершена 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

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

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

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

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

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

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

Настройка коллекции счетчиков производительности

Чтобы отключить коллекцию стандартных счетчиков производительности, добавьте следующий код в корневой узел файла 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: данные счетчика perf указаны в формате строки таблицы.
Счетчики производительности 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 и счетчик производительности, который требуется собрать, находится из текущего процесса JVM, в котором выполняется приложение, укажите "__SELF__".

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

Установите collectd с подключаемым модулем 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 или v2.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>

Alternatives

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

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

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

Добавьте библиотеки логирования в ваш проект

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

Мейвен

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

Обратный вход


    <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 . Затем обновите зависимости проекта, чтобы бинарные файлы загрузились.

Обратный вход


    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-файл надстройки.

Logger Загрузка Библиотека
Обратный вход Jar-файл добавщика обратного входа applicationinsights-logback
Log4J версии 2.0 Jar-файл добавления Log4J версии 2 приложениеинсайты-log4j2
Log4j версии 1.2 Appender Log4J версии 1.2 applicationinsights-логирование-log4j1_2

Добавьте аппендер в вашу систему ведения логов

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

Обратный вход


    <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
    • Обратный вход
  • Лучшее именование операций: используется для агрегирования запросов на портале.

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

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

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

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

  2. Измените скрипт запуска сервера приложений и добавьте следующий аргумент JVM:

    -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" фильтрует все страницы с "home" в URL-адресе.

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


           <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: отфильтровывает уровень TRACE.
    • WARN: отфильтровывает трассировку и информацию.
    • ОШИБКА: отфильтровывает ПРЕДУПРЕЖДЕНИЯ, СВЕДЕНИЯ и ТРАССИРОВКУ.
    • КРИТИЧЕСКОЕ: отфильтровывает все, кроме КРИТИЧЕСКИХ.

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

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

Код фильтра

В коде создайте класс, реализующий 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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Установите collectd и плагин

На серверах Linux:

  1. Установите collectd версии 5.4.0 или более поздней.
  2. Скачайте плагин collectd writer для 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-плагины, которые могут собирать различные данные из разных источников.

Перезапустите collectd в соответствии с руководством.

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

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

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

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

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

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

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

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

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

Разделяйте директивы новой строкой.

Проблемы?

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

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

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

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

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

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

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

Мониторинг приложений Micrometer измеряет метрики для кода приложения на основе JVM и позволяет экспортировать данные в любимые системы мониторинга. В этом разделе описано, как использовать 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 :

  • Application Insights Spring-boot-starter 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, см. в файле README на GitHub.

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

  • Автоматически настроенные метрики для Tomcat, JVM, метрики Logback, метрики Log4J, метрики времени работы, метрики процессора и метрики файловых дескрипторов.
  • Например, если Netflix Hystrix присутствует на пути к классу, мы также получаем эти метрики.
  • Следующие метрики можно получить, добавив соответствующие бобы:
    • CacheMetrics(CaffeineCache, , EhCache2, GuavaCacheHazelcastCacheи JCache)
    • DataBaseTableMetrics
    • HibernateMetrics
    • JettyMetrics
    • OkHttp3 Метрика
    • Kafka Метрика

Отключить автоматическую коллекцию метрик:

  • Метрики JVM:
    • management.metrics.binders.jvm.enabled=false
  • Метрики обратного входа:
    • 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 с веб-приложениями, отличными от Spring Boot

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

  • Application Insights Web Auto 2.5.0 или более поздней версии
  • Micrometer Azure Registry 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 в папку ресурсов. Дополнительные сведения см. в разделе "Добавление файла 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

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

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

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

Приложения, отличные от Spring

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

    New GuavaCacheMetrics().bind(registry);

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

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

Сводка по API

Основной API является универсальным для всех платформ, помимо нескольких вариантов, таких как GetMetric (только .NET).

Метод Используется для
TrackPageView Страницы, экраны, панели или формы.
TrackEvent Действия пользователя и другие события. Используется для отслеживания поведения пользователя или отслеживания производительности.
TrackMetric Измерения производительности, такие как длина очереди, не связанная с конкретными событиями.
TrackException Регистрация исключений для диагностики. Отследите, где они происходят по отношению к другим событиям и исследуйте трассировки стека.
TrackRequest Ведение журнала частоты и длительности запросов сервера для анализа производительности.
TrackTrace Сообщения журнала диагностики ресурсов. Вы также можете записывать сторонние журналы.
TrackDependency Ведение журнала длительности и частоты вызовов внешних компонентов, от которые зависит ваше приложение.

Свойства и метрики можно прикрепить к большинству этих вызовов телеметрии.

Предпосылки

Если у вас еще нет ссылки на пакет SDK Application Insights:

  • Добавьте пакет SDK Application Insights в проект.

  • В коде устройства или веб-сервера включите следующее:

    import com.microsoft.applicationinsights.TelemetryClient;
    

Получить экземпляр TelemetryClient

Получите экземпляр TelemetryClient:

private TelemetryClient telemetry = new TelemetryClient();

TelemetryClient является потокобезопасным.

Замечание

Если вы используете Функции Azure версии 2+ или веб-задания Azure версии 3+, см. статью "Мониторинг функций Azure".

Возможно, потребуется создать дополнительные экземпляры TelemetryClient для других модулей приложения. Например, в классе промежуточной системы может быть один TelemetryClient экземпляр для регистрации событий бизнес-логики. Вы можете задать такие свойства, как UserId и DeviceId определить компьютер. Эта информация присоединяется ко всем событиям, которые экземпляр отправляет.

telemetry.getContext().getUser().setId("...");
telemetry.getContext().getDevice().setId("...");

TrackEvent

В Application Insights настраиваемое событие — это точка данных, которую можно отобразить в обозревателе метрик в виде агрегированного количества и в поиске диагностики в качестве отдельных вхождений. (Это не связано с MVC или другой платформой "события".)

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

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

telemetry.trackEvent("WinGame");

Пользовательские события в Log Analytics

Данные телеметрии доступны в таблице на вкладке Application Insights Logs или в опыте использования. События могут поступать из trackEvent(..) или из плагина автосбора Click Analytics.

Если выборка выполняется, свойство itemCount показывает значение больше 1. Например, itemCount==10 означает, что из 10 вызовов trackEvent(), процесс выборки передает только один из них. Чтобы получить корректное количество пользовательских событий, используйте код, например customEvents | summarize sum(itemCount).

Замечание

itemCount имеет минимальное значение равное одному; сама запись представляет собой элемент.

TrackMetric

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

Для отправки метрик в Application Insights можно использовать TrackMetric(..) API. Существует два способа отправки метрики:

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

    Например, предположим, что у вас есть метрика, описывающая количество элементов в контейнере. В течение определенного периода времени сначала вы помещаете три элемента в контейнер, а затем удаляете два элемента. Соответственно, вы вызвали бы TrackMetric дважды. Сначала необходимо передать значение 3 , а затем передать значение -2. Application Insights хранит оба значения для вас.

  • Агрегирование. При работе с метриками каждое измерение редко представляет интерес. Вместо этого важно сводные сведения о том, что произошло в течение определенного периода времени. Такая сводка называется агрегированием.

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

Примеры однозначных значений

Чтобы отправить одно значение метрики:

telemetry.trackMetric("queueLength", 42.0);

Пользовательские метрики в Log Analytics

Данные телеметрии доступны в customMetrics таблице в Application Insights Analytics. Каждая строка представляет вызов trackMetric(..) в приложении.

  • valueSum: сумма измерений. Чтобы получить среднее значение, разделите на valueCount.
  • valueCount: количество измерений, которые были агрегированы в этом trackMetric(..) вызове.

Замечание

valueCount имеет минимальное значение одного; Сама запись является элементом.

Просмотры страниц

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

Данные пользователя и сеанса отправляются в виде свойств вместе с просмотрами страниц, поэтому пользовательские и сеансовые диаграммы оживают, когда присутствует телеметрия просмотра страниц.

Пользовательские просмотры страниц

telemetry.trackPageView("GameReviewPage");

Данные телеметрии страниц в Log Analytics

В Log Analytics две таблицы отображают данные из операций браузера:

  • pageViews: содержит данные о URL-адресе и заголовке страницы.
  • browserTimings: содержит данные о производительности клиента, например времени, затраченного на обработку входящих данных.

Чтобы узнать, сколько времени занимает браузер для обработки разных страниц:

browserTimings
| summarize avg(networkDuration), avg(processingDuration), avg(totalDuration) by name

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

pageViews
| summarize count() by client_Browser

Чтобы связать представления страниц с вызовами AJAX, используйте зависимости:

pageViews
| join (dependencies) on operation_Id

TrackRequest

Серверный SDK использует TrackRequest для записи HTTP-запросов.

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

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

Контекст операции

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

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

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

Снимок экрана: список связанных элементов.

Запросы в Log Analytics

В Application Insights Analytics запросы отображаются в requests таблице.

Если выборка выполняется, свойство itemCount показывает значение больше 1. Например, itemCount==10 означает, что из 10 вызовов trackRequest(), процесс выборки передает только один из них. Чтобы получить правильное количество запросов и среднюю длительность, сегментированные по именам запросов, используйте код, например:

requests
| summarize count = sum(itemCount), avgduration = avg(duration) by name

TrackException

Отправка исключений в Application Insights:

Отчеты включают трассировки стека.

try {
    ...
} catch (Exception ex) {
    telemetry.trackException(ex);
}

Исключения перехватываются автоматически, поэтому не всегда нужно TrackException вызывать явно.

Исключения в Log Analytics

В Application Insights Analytics в таблице отображаются exceptions исключения.

Если выборка выполняется, свойство itemCount показывает значение больше 1. Например, itemCount==10 означает, что из 10 вызовов trackException(), процесс выборки передает только один из них. Чтобы получить правильное количество исключений, сегментированных по типу исключения, используйте код, например:

exceptions
| summarize sum(itemCount) by type

Большая часть важной информации стека уже извлекается в отдельные переменные, но вы можете разобрать структуру details, чтобы получить больше. Так как эта структура является динамической, следует привести результат к ожидаемому типу. Рассмотрим пример.

exceptions
| extend method2 = tostring(details[0].parsedStack[1].method)

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

exceptions
| join (requests) on operation_Id

TrackTrace

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

Замечание

В Java агент Java Application Insights автоматически завершает сбор и отправляет журналы на портал.

telemetry.trackTrace(message, SeverityLevel.Warning, properties);

Запишите событие диагностики, например, вход в метод или выход из него.

Параметр Description
message Диагностические данные. Может быть гораздо длиннее имени.
properties Сопоставление строк с строкой. Дополнительные данные используются для фильтрации исключений на портале. Значение по умолчанию устанавливается в пустое.
severityLevel Поддерживаемые значения: SeverityLevel.ts.

Вы можете искать содержимое сообщения, но в отличие от значений свойств, вы не можете отфильтровать его.

Ограничение размера на message гораздо выше, чем ограничение на свойства. Преимущество TrackTrace заключается в том, что в сообщении можно поместить относительно длинные данные. Например, можно закодировать данные POST там.

Вы также можете добавить уровень серьезности в сообщение. И, как и другие данные телеметрии, можно добавить значения свойств, чтобы помочь вам фильтровать или искать различные наборы трассировок. Рассмотрим пример.

Map<String, Integer> properties = new HashMap<>();
properties.put("Database", db.ID);
telemetry.trackTrace("Slow Database response", SeverityLevel.Warning, properties);

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

Трассировки в Log Analytics

В Application Insights Analytics вызовы TrackTrace отображаются в таблице traces.

Если выборка выполняется, свойство itemCount показывает значение больше 1. Например, itemCount==10 означает, что из 10 вызовов trackTrace(), процесс выборки передает только один из них. Чтобы получить правильное количество вызовов трассировки, используйте код, например traces | summarize sum(itemCount).

TrackDependency

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

boolean success = false;
Instant startTime = Instant.now();
try {
    success = dependency.call();
}
finally {
    Instant endTime = Instant.now();
    Duration delta = Duration.between(startTime, endTime);
    RemoteDependencyTelemetry dependencyTelemetry = new RemoteDependencyTelemetry("My Dependency", "myCall", delta, success);
    dependencyTelemetry.setTimeStamp(startTime);
    telemetry.trackDependency(dependencyTelemetry);
}

Замечание

В Java многие вызовы зависимостей можно отслеживать автоматически с помощью агента Java Application Insights.

Этот вызов используется, если вы хотите отслеживать вызовы, которые автоматическое отслеживание не перехватывает.

Зависимости в Log Analytics

В Application Insights AnalyticstrackDependency вызовы отображаются в dependenciesтаблице.

Если выборка выполняется, itemCount свойство показывает значение больше 1. Например, itemCount==10 означает, что из 10 вызовов trackDependency(), процесс выборки передает только один из них. Чтобы получить правильное количество зависимостей, сегментированных по целевому компоненту, используйте код, например:

dependencies
| summarize sum(itemCount) by target

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

dependencies
| join (requests) on operation_Id

Очистка данных

Как правило, пакет SDK отправляет данные с фиксированным интервалом, обычно 30 секунд или каждый раз, когда буфер заполнен, что обычно составляет 500 элементов. В некоторых случаях может потребоваться очистить буфер. Например, если вы используете пакет SDK в приложении, которое завершает работу.

telemetry.flush();
//Allow some time for flushing before shutting down
Thread.sleep(5000);

Замечание

Пакет SDK java автоматически очищается при завершении работы приложения.

Прошедшие проверку подлинности пользователи

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

Если пользователи входят в приложение, вы можете получить более точное количество, задав идентификатор пользователя, прошедший проверку подлинности, в коде браузера. Не обязательно использовать фактическое имя входа пользователя. Это должен быть только идентификатор, уникальный для этого пользователя. Он не должен включать пробелы или какие-либо символы ,;=|.

Идентификатор пользователя также задается в файле cookie сеанса и отправляется на сервер. Если установлен пакет SDK сервера, идентификатор пользователя, прошедший проверку подлинности, отправляется в рамках свойств контекста телеметрии клиента и сервера. Затем вы можете отфильтровать и выполнить поиск по нему.

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

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

Вы также можете искать точки данных клиентов с определенными именами пользователей и учетными записями.

Фильтрация, поиск и сегментирование данных с помощью свойств

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

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

В строковой длине имеется ограничение в 8 192. Если вы хотите отправить большие фрагменты данных, используйте параметр TrackTraceсообщения.

Метрики — это числовые значения, которые можно представить графически. Например, вы можете узнать, есть ли постепенное увеличение показателей, которые ваши игроки достигают. Графы можно сегментировать по свойствам, отправляемыми с событием, чтобы получить отдельные или стековые графы для разных игр.

Для правильного отображения значений метрик должно быть больше или равно 0.

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

Map<String, String> properties = new HashMap<String, String>();
properties.put("game", currentGame.getName());
properties.put("difficulty", currentGame.getDifficulty());

Map<String, Double> metrics = new HashMap<String, Double>();
metrics.put("Score", currentGame.getScore());
metrics.put("Opponents", currentGame.getOpponentCount());

telemetry.trackEvent("WinGame", properties, metrics);

Это важно

Убедитесь, что вы не регистрируете личную информацию в свойствах.

Предупреждение

Не используйте один и тот же экземпляр элемента телеметрии (event в этом примере) для вызова Track*() несколько раз. Эта практика может привести к отправке телеметрии с неправильной конфигурацией.

Пользовательские измерения и свойства в Log Analytics

В Log Analytics пользовательские метрики и свойства отображаются в customMeasurements и customDimensions атрибутах каждой записи телеметрии.

Например, если добавить свойство с именем "game" в телеметрию запроса, этот запрос подсчитывает количество появлений различных значений для "game" и показывает среднее значение пользовательской метрики "score".

requests
| summarize sum(itemCount), avg(todouble(customMeasurements.score)) by tostring(customDimensions.game)

Обратите внимание, что:

  • При извлечении значения из customDimensions или customMeasurements JSON он имеет динамический тип, поэтому его необходимо привести tostring или todouble.
  • Чтобы учитывать возможность выборки, используйте sum(itemCount) не count().

События синхронизации

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

long startTime = System.currentTimeMillis();

// Perform timed action

long endTime = System.currentTimeMillis();
Map<String, Double> metrics = new HashMap<>();
metrics.put("ProcessingTime", (double)endTime-startTime);

// Setup some properties
Map<String, String> properties = new HashMap<>();
properties.put("signalSource", currentSignalSource.getName());

// Send the event
telemetry.trackEvent("SignalProcessed", properties, metrics);

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

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

import com.microsoft.applicationinsights.TelemetryClient;
import com.microsoft.applicationinsights.TelemetryContext;
...

TelemetryClient gameTelemetry = new TelemetryClient();
TelemetryContext context = gameTelemetry.getContext();
context.getProperties().put("Game", currentGame.Name);

gameTelemetry.TrackEvent("WinGame");

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

Отключение телеметрии

Для динамической остановки и запуска коллекции и передачи данных телеметрии:

telemetry.getConfiguration().setTrackingDisabled(true);

Динамическая строка подключения

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

Вместо получения строки подключения из файла конфигурации его можно задать в методе инициализации кода:

// Initialize once, e.g., at startup
TelemetryClient telemetry = new TelemetryClient();

// Prefer env var; falls back to hard-coded for illustration
String cs = System.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING");
if (cs != null && !cs.isEmpty()) {
    telemetry.getContext().setConnectionString(cs);
}

TelemetryContext

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

telemetry.Context.Operation.Name = "MyOperationName";

Если вы сами задаете какие-либо из этих значений, попробуйте удалить соответствующую строку из ApplicationInsights.config , чтобы ваши значения и стандартные значения не запутались.

  • Компонент: приложение и его версия.
  • Устройство: данные об устройстве, на котором работает приложение. В веб-приложениях телеметрия отправляется с сервера или клиентского устройства.
  • Ключ инструментария: ресурс Application Insights в Azure, где отображается телеметрия.
  • Расположение: географическое расположение устройства.
  • Операция: в веб-приложениях текущий HTTP-запрос. В других типах приложений можно задать это значение для группирования событий вместе.
    • Идентификатор: это созданное значение, которое сопоставляет различные события, чтобы при проверке любого события в Диагностическом Поиске можно было найти связанные элементы.
    • Имя: идентификатор, как правило, URL-адрес HTTP-запроса.
    • SyntheticSource: если значение не равно null или пусто, строка, указывающая, что источник запроса был определен как робот или веб-тест. По умолчанию он исключен из вычислений в обозревателе метрик.
  • Сеанс: сеанс пользователя. Идентификатор имеет созданное значение, которое изменяется, когда пользователь не был активным в течение некоторого времени.
  • Пользователь: сведения о пользователе.

Limits

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

Resource Ограничение по умолчанию Максимальный лимит Примечания.
Общий объем данных в день 100 ГБ Обратитесь в службу поддержки. Вы можете установить ограничение, чтобы сократить объем данных. Если вам нужно больше данных, вы можете увеличить лимит на портале до 1 000 ГБ. Для объемов более 1 000 ГБ отправьте электронное письмо на [email protected].
Ограничение скорости 32 000 событий/секунда Обратитесь в службу поддержки. Предел измеряется в течение минуты.
журналы хранения данных от 30 до 730 дней 730 дней Этот ресурс предназначен для журналов.
Метрики хранения данных 90 дней 90 дней Этот ресурс предназначен для Metrics Explorer.
Многошаговый тест доступности сохранение подробных результатов 90 дней 90 дней Этот ресурс предоставляет подробные результаты каждого этапа.
Максимальный размер элемента телеметрии 64 КБ 64 КБ
Максимальное количество телеметрических данных в пакете 64 000 64 000
Длина названия свойства и метрики сто пятьдесят сто пятьдесят См. схемы типов.
Длина строки значения свойства 8,192 8,192 См. схемы типов.
Длина сообщения трассировки и исключения 32,768 32,768 См. схемы типов.
Тесты доступности на ресурс в службе Application Insights 100 100
Количество доступных тестов для каждой группы ресурсов 800 800 См. azure Resource Manager
Тесты доступности максимального количества перенаправлений за тест 10 10
Частота минимального тестирования для проверки доступности 300 секунд Для нестандартных частот тестирования или частот менее 5 минут требуются собственные реализации TrackAvailability.
.NET Profiler и Snapshot Debugger сохранение данных Две недели Обратитесь в службу поддержки. Максимальный срок хранения составляет шесть месяцев.
.NET Profiler данные, отправленные в день Без ограничений Без ограничений.
Snapshot Debugger данные, отправленные в день 30 снимков в день для каждого отслеживаемого приложения Без ограничений. Количество снимков, собираемых для каждого приложения, можно изменить через конфигурацию.

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

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

Сведения о том, сколько времени хранятся данные, см. в разделе "Хранение и конфиденциальность данных".

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