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Распространенные проблемыПример конфигурацииСвязывание логов приложения с tracesСправочник по конфигурацииКак работает Java Auto-instrumentation
Оператор внедряет OpenTelemetry Java agent в контейнеры Java-приложений в виде JAR-файла Java agent. Agent использует инструментирование bytecode, чтобы автоматически instrument Java-классы во время выполнения, собирая telemetry data из:
- 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-библиотек и frameworks
Включение Java Instrumentation
Чтобы включить auto-instrumentation для Java-приложений, аннотируйте ваш pod или namespace:
Оператор автоматически внедряет 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:
OTEL_JAVAAGENT_EXTENSIONS- Путь к дополнительным расширениям agentOTEL_JAVAAGENT_CONFIGURATION_FILE- Путь к файлу конфигурации agent
Дополнительная конфигурация
Пользовательский образ Agent
Вы можете указать пользовательский образ Java agent:
Монтирование томов
Agent монтируется в контейнер приложения по пути /otel-auto-instrumentation-java-<container-name>/.
Внедрение для конкретных контейнеров
Для pod с несколькими контейнерами укажите, какие контейнеры должны быть instrumented:
Поддерживаемые версии Java
OpenTelemetry Java agent поддерживает:
- Java 8 и более поздние версии
Устранение неполадок
Проверка внедрения Agent
Проверьте, что agent был успешно внедрен:
Ищите аргумент -javaagent в команде контейнера.
Включение отладочного logging
Включите отладочное logging для устранения неполадок:
Распространенные проблемы
Agent не загружается: Убедитесь, что init container завершил работу успешно и JAR-файл agent присутствует в общем томе.
Отсутствуют traces: Проверьте, что endpoint экспортера указан правильно и доступен из pod приложения.
Высокое потребление памяти: Уменьшите количество включенных instrumentations или настройте параметры heap JVM.
Пример конфигурации
Полный пример instrumenting для Java-приложения:
- Образ Java auto-instrumentation, который использует Оператор для внедрения agent. Оператор v2 не поставляется с образом Java agent, поэтому вам нужно собрать его или предоставить самостоятельно. См. предупреждение в Параметры Instrumentation.
- Endpoint экспортера OTLP. Замените этот URL адресом вашего фактического OpenTelemetry Collector.
- Включает внедрение Java auto-instrumentation для этого pod. См. Поддерживаемые значения для аннотаций внедрения для допустимых значений.
Связывание логов приложения с traces
После внедрения Java agent он также может добавлять активные trace_id и span_id в логи вашего приложения, позволяя переходить от строки лога к соответствующему trace. Примеры для Spring Boot, Logback и Log4j 2 см. в разделе Связывание логов приложения с traces.
Справочник по конфигурации
Подробные параметры конфигурации, поддерживаемые библиотеки и сценарии расширенного использования см. в официальной документации OpenTelemetry Operator: