Руководство по устранению неполадок: 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.
Используйте Java Application Insights версии 3.4.6 или более поздней версии, чтобы убедиться, что хранилище ключей Java содержит обязательный сертификат. Для этого включите функцию самостоятельного диагностика на
TRACE
уровне. В журналах Application Insights отображается следующая запись?TRACE c.m.applicationinsights.agent — корневой сертификат Application Insights в хранилище ключей Java: false
Если вы видите эту запись, перейдите к импорту SSL-сертификатов для импорта корневого сертификата в хранилище ключей Java.
Если вы используете
-Djsse.enableSNIExtension=false
этот параметр, попробуйте запустить агент без этого параметра. При указании-Djsse.enableSNIExtension=false
в Приложении Insights Java версии 3.4.5 в журналах отображается следующая запись об ошибке:WARN c.m.applicationinsights.agent — системное свойство -Djsse.enableSNIExtension=false обнаружено. Если у вас возникли проблемы с подключением к Application Insights, удалите это.
Если ни один из предыдущих вариантов не является полезным, можно использовать средства устранения неполадок.
Не удается запустить виртуальную машину Java (JVM)
Если виртуальная машина Java (JVM) не запускается, это может вернуть сообщение об ошибке открытия ZIP-файла или манифеста JAR. Сведения об устранении этой проблемы см. в следующей таблице.
Проблема | Действие |
---|---|
Файл архива Java (JAR) для агента не найден. | Убедитесь, что в аргументе -javaagent JVM указан допустимый путь JAR агента. |
JAR-файл агента может быть поврежден во время передачи файлов. | Повторите попытку скачать JAR-файл агента. |
Запуск приложений Tomcat Java занимает несколько минут.
Если вы включили Application Insights для мониторинга приложения Tomcat, может потребоваться несколько минут задержки во время запуска приложения. Эта задержка вызвана тем, что Tomcat пытается проверить JAR-файлы Application Insights во время запуска приложения. Чтобы ускорить время начала приложения, можно исключить JAR-файлы Application Insights из списка сканированных файлов. Сканирование этих JAR-файлов не требуется.
Обновите приложение Application Insights Java 2.X SDK
Если вы уже используете Java 2 Application Insights.X SDK в приложении можно продолжать использовать. Java 3 Application Insights.Агент x обнаруживает, фиксирует и сопоставляет все пользовательские данные телеметрии, которые вы отправляете через 2.X SDK. Кроме того, она предотвращает дублирование данных телеметрии путем подавления любой автоматической коллекции, которая имеет значение 2.X SDK выполняется. Дополнительные сведения см. в статье об обновлении java 2.X SDK.
Обновление с помощью предварительной версии Application Insights Java 3.0
Если вы обновляете агент Предварительной версии Java 3.0, внимательно просмотрите все параметры конфигурации . Структура JSON изменяется в выпуске общедоступной версии 3.0.
К этим изменениям относятся следующие.
Имя файла конфигурации изменилось с ApplicationInsights.json на applicationinsights.json.
Узел
instrumentationSettings
больше не существует. Все содержимое вinstrumentationSettings
перемещается на корневой уровень.Узлы конфигурации, такие как
sampling
,instrumentation
jmxMetrics
и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(Secure Sockets Layer) при использовании агента Java.
Существует два разных пути для устранения этой проблемы:
- Если вы используете хранилище ключей Java по умолчанию
- Если вы используете пользовательское хранилище ключей Java
Если вы не уверены, какой путь следует выполнить, проверьте, есть ли у вас аргумент -Djavax.net.ssl.trustStore=...
JVM.
Если у вас нет этого аргумента JVM, вероятно, используется хранилище ключей Java по умолчанию.
Если у вас есть этот аргумент JVM, вероятно, используется пользовательское хранилище ключей, а аргумент JVM указывает на пользовательское хранилище ключей.
Если вы используете хранилище ключей Java по умолчанию
Хранилище ключей Java по умолчанию обычно уже имеет все корневые сертификаты ЦС. Однако может быть несколько исключений. Например, другой корневой сертификат может подписать сертификат конечной точки приема. Мы рекомендуем выполнить следующие действия, чтобы устранить эту проблему:
Проверьте, присутствует ли 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
После получения списка сертификатов выполните действия, чтобы скачать SSL-сертификат , который использовался для подписи конечной точки Application Insights.
После скачивания сертификата создайте хэш SHA-1 в сертификате с помощью следующей команды:
keytool -printcert -v -file "<downloaded-ssl-certificate>.cer"
Скопируйте значение SHA-1 и проверьте, присутствует ли это значение в файле temp.txt , сохраненном ранее. Если вы не можете найти значение SHA-1 во временном файле, скачанный SSL-сертификат отсутствует в хранилище ключей Java по умолчанию.
Импортируйте 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 в это хранилище ключей. Для устранения этой проблемы рекомендуется выполнить следующие два действия.
Выполните следующие действия, чтобы скачать SSL-сертификат из конечной точки Application Insights.
Выполните следующую команду, чтобы импортировать 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
https://westeurope-5.in.applicationinsights.azure.com/api/ping Откройте URL-адрес в веб-браузере.
В адресной строке браузера выберите значок сведений о сайте представления (символ блокировки рядом с адресом).
Выберите "Подключение безопасно".
Щелкните значок "Показать сертификат".
В диалоговом окне "Средство просмотра сертификатов" выберите вкладку "Сведения".
В списке иерархии сертификатов выберите сертификат, который требуется скачать. (Отображается корневой сертификат ЦС, промежуточный сертификат и конечный SSL-сертификат.)
Нажмите кнопку "Экспорт ".
В диалоговом окне "Сохранить как" перейдите в каталог, в который требуется сохранить файл сертификата (CRT), а затем нажмите кнопку "Сохранить".
Чтобы выйти из диалогового окна "Средство просмотра сертификатов", нажмите кнопку Закрыть (X).
Предупреждение
Эти действия необходимо повторить, чтобы получить новый сертификат до истечения срока действия текущего сертификата. Сведения об истечении срока действия можно найти на вкладке "Сведения " диалогового окна "Средство просмотра сертификатов".
Выбрав сертификат в списке иерархии сертификатов, найдите узел "Допустимость" в списке полей сертификатов. Выберите "Не раньше " в этом узле, а затем проверьте дату и время, которое отображается в поле "Значение поля". Эта метка времени указывает, когда новый сертификат становится допустимым. Аналогичным образом выберите "Не после" в узле "Срок действия" , чтобы узнать, когда срок действия нового сертификата истекает.
Основные сведения о UnknownHostException
Если вы видите это исключение после обновления до версии агента Java, которая позже 3.2.0, вы можете исправить исключение, обновив сеть, чтобы устранить новую конечную точку, показанную в исключении. Причина разницы между версиями Application Insights заключается в том, что версии, которые позже 3.2.0 указывают на новую конечную точку v2.1/track
приема, по сравнению с более старой v2/track
. Новая конечная точка приема автоматически перенаправляет вас в конечную точку приема (новая конечная точка, отображаемая в исключении), которая ближе всего к хранилищу для ресурса Application Insights.
Отсутствующие комплекты шифров
Если агент Java Application Insights обнаруживает, что у вас нет наборов шифров, поддерживаемых конечными точками, к которым он подключается, агент оповещает вас и предоставляет ссылку на отсутствующие наборы шифров.
Фон для наборов шифров
Наборы шифров вступают в игру перед клиентским приложением и сервером обмена информацией по протоколу SSL или tls-подключению. Клиентское приложение инициирует подтверждение SSL. Часть этого процесса включает уведомление сервера о поддерживаемых наборах шифров. Сервер получает эти сведения и сравнивает наборы шифров, поддерживаемые клиентским приложением, с поддерживаемыми алгоритмами. Если сервер находит совпадение, он уведомляет клиентское приложение и устанавливается безопасное подключение. Если он не находит совпадения, сервер отказывается от подключения.
Определение наборов шифров на стороне клиента
В этом случае клиент — это виртуальная машины Java, на котором выполняется инструментированное приложение. Начиная с версии 3.2.5, Application Insights Java регистрирует предупреждающее сообщение, если отсутствующие наборы шифров могут привести к сбоям подключения к одной из конечных точек службы.
Если вы используете более раннюю версию 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. Чтобы устранить эту проблему, можно применить один из следующих вариантов:
Если приложение основано на Spring Boot, программно подключите агент Java Application Insights к JVM.
Используйте Java версии 11 или более позднюю версию.
Java выше версии 8
Чтобы устранить эту проблему с агентом Java Application Insights, попробуйте один из следующих методов:
- Используйте конфигурацию Azure с большей мощностью ЦП.
- Отключите некоторые инструментирования, описанные в разделе "Подавление определенной автоколлектной телеметрии".
- Попробуйте использовать эту экспериментальную функцию: улучшение времени запуска для ограниченного количества ядер ЦП. Если при использовании этой функции возникают какие-либо проблемы, отправьте нам отзыв.
Кроме того, вы можете попробовать решения мониторинга для java native , применимые к приложению на основе JVM:
- С помощью Spring Boot распространение начального средства OpenTelemetry майкрософт.
- С quarkus, кваркус Opentelemetry Exporter для Microsoft Azure.
Общие сведения об идентификаторах повторяющихся операций
Логика приложения может привести к повторному использовании идентификатора операции несколькими элементами телеметрии, как показано в этом примере. Дублирование может также поступать из входящих запросов. Чтобы определить это, выполните следующие операции:
Включите запись заголовка
traceparent
в файле applicationinsigths.json следующим образом:{ "preview": { "captureHttpServerHeaders": { "requestHeaders": [ "traceparent" ] } } }
Включите самостоятельное диагностика на уровне ОТЛАДКи и перезапустите приложение.
В следующем примере журнала идентификатор операции поступает из входящего запроса, а не Application Insights:
{"ver":1,"name":"Request",...,"ai.operation.id":"4e757357805f4eb18705abd24326b550)","ai.operation.parentId":"973487efc3db7d03"},"data":{"baseType":"RequestData","baseData":{...,"properties":{"http.request.header.traceparent":"00-4e757357805f4eb18705abd24326b550-973487efc3db7d03-01", ...}}}}
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Microsoft не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.