Руководство по устранению неполадок: Azure Monitor Application Insights для Java

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

Проверка файла журнала самодиагностики

По умолчанию — Application Insights Java 3. X создает файл журнала с именем applicationinsights.log в том же каталоге, в котором хранится файл applicationinsights-agent-3.2.11.jar .

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

Если Application Insights не создает файл журнала, проверка убедиться, что приложение Java имеет разрешение на запись в каталог, в котором хранится файл applicationinsights-agent-3.2.11.jar.

Если Application Insights по-прежнему не создает файл журнала, проверка stdout журнал из приложения Java на наличие ошибок. Application Insights Java 3. X должен регистрировать все ошибки, которые препятствовали бы ведению журнала в обычное расположение в журнале stdout .

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

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

Если агент Java Application Insights вызывает проблему с подключением, рассмотрите следующие варианты:

  • Проверьте строка подключения конфигурации Application Insights.

  • Используйте Application Insights Java версии 3.4.6 или более поздней, чтобы убедиться, что хранилище ключей Java содержит необходимый сертификат. Для этого включите функцию самостоятельного диагностика на TRACE уровне. Отображается ли следующая запись в журналах Application Insights?

    TRACE c.m.applicationinsights.agent — корневой сертификат Application Insights в хранилище ключей Java: false

    Если вы видите эту запись, см. статью Импорт SSL-сертификатов , чтобы импортировать корневой сертификат в хранилище ключей Java.

  • Если вы используете -Djsse.enableSNIExtension=false параметр , попробуйте запустить агент без этого параметра. Если указать -Djsse.enableSNIExtension=falseв Application Insights java версии 3.4.5, в журналах появится следующая запись об ошибке:

    WARN c.m.applicationinsights.agent — обнаружено системное свойство -Djsse.enableSNIExtension=false. Если у вас возникли проблемы с подключением к Application Insights, удалите их.

  • Если ни один из предыдущих вариантов не полезен, можно использовать средства устранения неполадок.

Не удается запустить виртуальную машину Java (JVM)

Если виртуальная машина Java (JVM) не запускается, она может вернуть сообщение "Ошибка при открытии ZIP-файла или отсутствует JAR-манифест". Сведения об устранении этой проблемы см. в следующей таблице.

Проблема Действие
Файл архива Java (JAR) для агента не найден. Убедитесь, что в аргументе JVM указан допустимый -javaagent путь JAR агента.
JAR-файл агента мог быть поврежден во время передачи файла. Попробуйте скачать JAR-файл агента еще раз.

Запуск приложений Tomcat Java занимает несколько минут

Если вы включили Application Insights для мониторинга приложения Tomcat, время запуска приложения может занять несколько минут. Эта задержка вызвана тем, что Tomcat пытается проверить JAR-файлы Application Insights во время запуска приложения. Чтобы ускорить запуск приложения, можно исключить JAR-файлы Application Insights из списка отсканированных файлов. Сканирование этих JAR-файлов не требуется.

Обновление с Java 2 в Application Insights. пакет SDK для x

Если вы уже используете Application Insights Java 2. Пакет SDK x в приложении можно продолжать использовать. Application Insights Java 3. Агент x обнаруживает, захватывает и сопоставляет все пользовательские данные телеметрии, отправляемые через 2. пакет SDK для x . Он также предотвращает дублирование телеметрии, подавляя любую автоматическую коллекцию, которая является 2. X SDK делает. Дополнительные сведения см. в разделе Обновление с Java 2.пакет SDK для x.

Обновление с предварительной версии Application Insights java 3.0

Если вы выполняете обновление с предварительной версии агента Java 3.0, внимательно изучите все параметры конфигурации . Структура JSON изменена в выпуске общедоступной версии 3.0.

К этим изменениям относятся:

  • Имя файла конфигурации изменено с ApplicationInsights.json на applicationinsights.json.

  • Узел instrumentationSettings больше не присутствует. Все содержимое в instrumentationSettings перемещается на корневой уровень.

  • Узлы конфигурации, такие как sampling, jmxMetrics, instrumentationи heartbeat , перемещаются на preview корневой уровень.

Некоторые журналы не собираются автоматически

Ведение журнала регистрируется только в том случае, если оно соответствует следующим критериям:

  • Он соответствует уровню, настроенном для платформы ведения журнала.

  • Он соответствует уровню, настроенном для Application Insights.

Например, если платформа ведения журнала настроена для ведения журнала WARN (и выше) из com.example пакета, а Application Insights настроена для записи INFO (и выше), то Application Insights записывает WARN только (и выше) из com.example пакета.

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

Также обратите внимание, что если объект исключения передается в средство ведения журнала, сообщение журнала (и сведения об объекте исключения) отображается в портал Azure в exceptions таблице, а не traces в таблице. Чтобы просмотреть сообщения журнала в таблицах traces и exceptions , выполните следующий запрос Logs (Kusto):

union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType

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

Импорт SSL-сертификатов

Этот раздел поможет устранить неполадки и, возможно, исправить исключения, связанные с SSL-сертификатами при использовании агента Java.

Существует два разных способа решения этой проблемы:

  • Если вы используете хранилище ключей Java по умолчанию
  • Если вы используете пользовательское хранилище ключей Java

Если вы не знаете, какой путь следует выполнить, проверка, чтобы узнать, есть ли у вас аргумент JVM , -Djavax.net.ssl.trustStore=.... Если у вас нет этого аргумента JVM, вероятно, вы используете хранилище ключей Java по умолчанию. Если у вас есть этот аргумент JVM, вероятно, вы используете пользовательское хранилище ключей, а аргумент JVM указывает на пользовательское хранилище ключей.

Если вы используете хранилище ключей Java по умолчанию

Хранилище ключей Java по умолчанию обычно уже содержит все корневые сертификаты ЦС. Однако могут возникнуть некоторые исключения. Например, другой корневой сертификат может подписать сертификат конечной точки приема. Для устранения этой проблемы рекомендуется выполнить следующие действия:

  1. Проверьте, присутствует ли SSL-сертификат, который использовался для подписи конечной точки Application Insights, в хранилище ключей по умолчанию. По умолчанию доверенные сертификаты ЦС хранятся в $JAVA_HOME/jre/lib/security/cacerts. Чтобы получить список сертификатов в хранилище ключей Java, используйте следующую команду:

    keytool -list -v -keystore <path-to-keystore-file>

    Вы можете перенаправить выходные данные во временный файл, чтобы его можно было легко найти в дальнейшем:

    keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt

  2. Получив список сертификатов, выполните действия, чтобы скачать SSL-сертификат , который использовался для подписи конечной точки Application Insights.

    После скачивания сертификата создайте хэш SHA-1 для сертификата с помощью следующей команды:

    keytool -printcert -v -file "<downloaded-ssl-certificate>.cer"

    Скопируйте значение SHA-1 и проверка, присутствует ли это значение в файлеtemp.txt, сохраненном ранее. Если не удается найти значение SHA-1 во временном файле, скачанный SSL-сертификат отсутствует в хранилище ключей Java по умолчанию.

  3. Импортируйте SSL-сертификат в хранилище ключей Java по умолчанию с помощью следующей команды:

    keytool -import -file "<certificate-file>" -alias "<some-meaningful-name>" -keystore "<path-to-cacerts-file>"

    В этом примере команда выглядит следующим образом:

    keytool -import -file "<downloaded-ssl-certificate-file>" -alias "<some-meaningful-name>" -keystore $JAVA_HOME/jre/lib/security/cacerts

Если вы используете пользовательское хранилище ключей Java

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

  1. Выполните следующие действия, чтобы скачать SSL-сертификат из конечной точки Application Insights.

  2. Выполните следующую команду, чтобы импортировать SSL-сертификат в пользовательское хранилище ключей Java:

    keytool -importcert -alias <your-ssl-certificate> -file "<your-downloaded-ssl-certificate-name>.cer" -keystore "<your-keystore-name>" -storepass "<your-keystore-password>" -noprompt

Действия по скачиванию SSL-сертификата

Примечание.

Следующие инструкции по скачиванию SSL-сертификата были проверены в следующих браузерах:

  • Google Chrome
  • Microsoft Edge
  1. https://westeurope-5.in.applicationinsights.azure.com/api/ping Откройте URL-адрес в веб-браузере.

  2. В адресной строке браузера выберите значок Просмотр сведений о сайте (символ блокировки, который находится рядом с адресом).

  3. Выберите Подключение безопасно.

  4. Щелкните значок Показать сертификат .

  5. В диалоговом окне Средство просмотра сертификатов выберите вкладку Сведения .

  6. В списке Иерархия сертификатов выберите сертификат, который нужно скачать. (Отображаются корневой сертификат ЦС, промежуточный сертификат и конечный SSL-сертификат.)

  7. Нажмите кнопку Экспорт .

  8. В диалоговом окне Сохранить как перейдите в каталог, в который требуется сохранить файл сертификата (CRT), и нажмите кнопку Сохранить.

  9. Чтобы выйти из диалогового окна Средство просмотра сертификатов , нажмите кнопку Закрыть (X).

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

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

Выбрав сертификат в списке Иерархия сертификатов , найдите узел Допустимость в списке Поля сертификата . Выберите Not Before в этом узле, а затем проверьте дату и время, показанные в поле Значение поля . Эта метка времени указывает, когда новый сертификат станет действительным. Аналогичным образом выберите Не после в узле Допустимость , чтобы узнать, когда истечет срок действия нового сертификата.

Общие сведения о UnknownHostException

Если вы видите это исключение после обновления до версии агента Java, которая позже 3.2.0, вы можете исправить это исключение, обновив сеть, чтобы разрешить новую конечную точку, показанную в исключении. Разница между версиями Application Insights заключается в том, что версии, которые более поздние, чем 3.2.0, указывают на новую конечную точку v2.1/trackприема , по сравнению с более старой v2/trackверсией . Новая конечная точка приема автоматически перенаправляет вас на конечную точку приема (новую конечную точку, которая отображается в исключении), которая находится ближе всего к хранилищу для ресурса Application Insights.

Отсутствующие наборы шифров

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

Фон в наборах шифров

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

Определение наборов шифров на стороне клиента

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

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

import javax.net.ssl.SSLServerSocketFactory;

public class Ciphers {
    public static void main(String[] args) {
        SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
        String[] defaultCiphers = ssf.getDefaultCipherSuites();
        System.out.println("Default\tCipher");
        for (int i = 0; i < defaultCiphers.length; ++i) {
            System.out.print('*');
            System.out.print('\t');
            System.out.println(defaultCiphers[i]);
        }
    }
}

Конечные точки Application Insights поддерживают следующие наборы шифров:

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Определение наборов шифров на стороне сервера

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

Добавление отсутствующих наборов шифров

Если вы используете Java 9 или более позднюю версию, проверка убедиться, что виртуальная машина JVM включает jdk.crypto.cryptoki модуль в папку jmods. Кроме того, если вы создаете настраиваемую среду выполнения Java с помощью jlink, убедитесь, что вы включаете тот же модуль.

В противном случае эти наборы шифров уже должны быть частью современных дистрибутивов Java 8+. Мы рекомендуем проверка источник установленного дистрибутива Java, чтобы выяснить, почему поставщики безопасности в файле конфигурации java.security этого дистрибутива Java отличаются от стандартных дистрибутивов Java.

Медленное время запуска в Application Insights и Java 8

Java 8 имеет известную проблему, связанную с проверкой подписи JAR-файла агентов Java. Эта проблема может увеличить время запуска в Application Insights. Чтобы устранить эту проблему, можно применить один из следующих параметров:

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

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

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

Свяжитесь с нами для получения помощи

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