Крестовое оборудование JVM
Я провожу некоторое время с DynaTrace. Я впечатлен его особенностью, связанной с кросс-инструментарием JVM. Проще говоря, DynaTrace может использовать Java-код для создания трассировки с некоторой статистической информацией. В этом нет ничего нового. Есть интересная особенность: когда выполняется вызов внешней JVM, DynaTrace может связать эту новую трассировку с вызывающей (например, сессионный компонент сеанса, веб-службы, удаленный RMI и т. Д.). Как это могло быть возможно? Я не могу представить, как реализовать эту функцию? Есть идеи?
Спасибо
2 ответа
Dynatrace фактически не полагается на информацию от бобов. Как вы правильно сказали в своих вопросах - мы используем инструментарий байт-кода, например, другие инструменты на рынке. Мы применяем ключевые методы определенных сред, например: Servlet, Axis, JMS, JDBC, ... В сценарии, когда вы совершаете вызов от одной JVM к другой, используя, например, связь на основе HTTP, мы обрабатываем обе стороны отправки HTTP Запрос, а также принимающая сторона на другой JVM. На отправляющей стороне мы прикрепляем дополнительный заголовок HTTP с идентификатором текущего PurePath. PurePath - это наша запатентованная технология. Итак, каждый PurePath (= каждая отдельная транзакция) получает уникальный идентификатор. Этот идентификатор "путешествует" вместе с запросом, например: мы помещаем его в запрос HTTP как заголовок HTTP. На принимающей стороне - вашей второй JVM - мы проверяем этот HTTP HEader и поэтому знаем, что все данные, которые мы собираем, принадлежат этому PurePath. Это позволяет нам выполнять настоящую сквозную трассировку, не полагаясь на такие вещи, как Beans, или не сопоставляя эти данные, например, на основе временных меток
Имеет смысл? Если у вас есть еще вопросы, дайте мне знать. Я также записал несколько видео и разместил на YouTube, чтобы объяснить технологию и сам продукт: http://bit.ly/dttutorials
Эта информация обычно извлекается с использованием MXBeans. Такие бины предоставляют стандартный API для доступа к стандартной информации времени выполнения. Аналогичным образом, такие приложения часто сканируют загрузчики классов на предмет определенных классов и извлекают соответствующую информацию с помощью жестко закодированного доступа. Вот почему менее популярные решения часто не поддерживаются инструментами мониторинга.