Java Auto-instrumentation
Java auto-instrumentation обеспечивает комплексный сбор telemetry для Java-приложений с использованием OpenTelemetry Java agent. Эта instrumentation автоматически собирает traces, metrics и logs из Java-приложений и популярных frameworks без необходимости изменения кода.
Содержание
Как работает Java Auto-instrumentationВключение Java InstrumentationПеременные среды Java AgentУправление instrumentationУправление конкретными instrumentationКонфигурация расширенийРасширенная конфигурацияПользовательский образ AgentМонтирование томовВнедрение для отдельных контейнеровПоддерживаемые версии JavaУстранение неполадокПроверка внедрения AgentВключение отладочного loggingЧастые проблемыПример конфигурацииСправочник по конфигурацииКак работает Java Auto-instrumentation
Operator внедряет OpenTelemetry Java agent в контейнеры Java-приложений в виде JAR-файла Java agent. Agent использует bytecode instrumentation для автоматической instrumentation Java-классов во время выполнения, собирая telemetry-данные из:
- HTTP servers и clients (Servlet, Spring MVC, JAX-RS и т. д.)
- Database clients (JDBC, Hibernate и т. д.)
- Messaging systems (JMS, Kafka, RabbitMQ и т. д.)
- RPC frameworks (gRPC и т. д.)
- Caching libraries (Redis, Memcached и т. д.)
- И многих других популярных Java libraries и frameworks
Включение Java Instrumentation
Чтобы включить auto-instrumentation для Java-приложений, добавьте annotation в pod или namespace:
Operator автоматически внедряет Java agent и настраивает JVM на его загрузку при запуске, устанавливая переменную среды JAVA_TOOL_OPTIONS с флагом -javaagent.
Переменные среды Java Agent
Следующие переменные среды управляют поведением Java agent:
Управление instrumentation
OTEL_JAVAAGENT_ENABLED- Включает или отключает Java agent (по умолчанию:true)OTEL_JAVAAGENT_DEBUG- Включает отладочное logging для agent (по умолчанию:false)OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED- По умолчанию включает все instrumentations (по умолчанию:true)
Управление конкретными instrumentation
Вы можете включать или отключать отдельные instrumentations:
OTEL_INSTRUMENTATION_JDBC_ENABLED- JDBC instrumentationOTEL_INSTRUMENTATION_SPRING_WEB_ENABLED- Spring Web instrumentationOTEL_INSTRUMENTATION_KAFKA_ENABLED- Kafka instrumentationOTEL_INSTRUMENTATION_REDIS_ENABLED- Redis instrumentation
Пример конфигурации:
Конфигурация расширений
Настройте дополнительные agent extensions:
OTEL_JAVAAGENT_EXTENSIONS- Путь к дополнительным agent extensionsOTEL_JAVAAGENT_CONFIGURATION_FILE- Путь к файлу конфигурации agent
Расширенная конфигурация
Пользовательский образ Agent
Вы можете указать пользовательский образ Java agent:
Монтирование томов
Agent монтируется в контейнер приложения по пути /otel-auto-instrumentation-java-<container-name>/.
Внедрение для отдельных контейнеров
Для pod с несколькими контейнерами укажите, какие контейнеры следует instrumentировать:
Поддерживаемые версии Java
OpenTelemetry Java agent поддерживает:
- Java 8 и новее
Устранение неполадок
Проверка внедрения Agent
Проверьте, что agent был успешно внедрен:
Обратите внимание на аргумент -javaagent в команде контейнера.
Включение отладочного logging
Включите отладочное logging для диагностики проблем:
Частые проблемы
Agent не загружается: Убедитесь, что init container завершился успешно и JAR-файл agent присутствует в общем томе.
Отсутствуют traces: Проверьте, что endpoint exporter указан верно и доступен из pod приложения.
Высокое потребление памяти: Уменьшите количество включенных instrumentations или настройте параметры heap JVM.
Пример конфигурации
Полный пример instrumentation Java-приложения:
Справочник по конфигурации
Подробные параметры конфигурации, поддерживаемые libraries и сценарии расширенного использования см. в официальной документации OpenTelemetry Operator: