Java
Cocktail APM은 OpenTelemetry Java Instrumentation 1.33.5 버전의 에이전트를 기준으로 동작합니다.
에이전트 준비
OpenTelemetry Java Agent는 코드를 변경하지 않고도 추적 및 메트릭과 같은 원격 측정 데이터를 수집하기 위해 Java 애플리케이션을 자동으로 계측하는 도구입니다.
칵테일에서는 에이전트 이미지가 Harbor 에 제공됩니다. 로컬 Harbor 주소가 local.harbor.io의 경우 다음과 같은 이미지가 제공됩니다.
local.harbor.io/ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.33.5
Cocktail APM은 1.33.5 버전을 기준으로 동작합니다. 다른 버전의 에이전트를 직접 사용하는 경우 특정 메트릭이 수집되지 않을 수 있습니다.
이미지 빌드
다음과 같은 스크립트를 추가하여 애플리케이션 이미지에 에이전트를 삽입할 수 있습니다.
Executable Java
# 에이전트 이미지를 복사할 이미지
FROM local.harbor.io/ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.33.5 AS agent
# 빌드 작업을 위한 이미지 (예시)
FROM maven:3.8.6-openjdk-8 AS build
# TODO Build script RUN
# Build to app.jar
# 애플리케이션 기본 이미지 (예시)
FROM openjdk:8-jre-slim
COPY --from=build /build/target/*.jar /app.jar
# -- 에이전트 이미지에서 에이전트 파일을 복사합니다.
COPY --from=agent /javaagent.jar /opentelemetry-javaagent.jar
# 기본 환경 변수 설정 (고정값)
ENV OTEL_EXPORTER_OTLP_ENDPOINT=http://cocktail-telemetry-collector.cocktail-addon:4318 \
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
OTEL_METRICS_EXPORTER=otlp \
OTEL_TRACES_EXPORTER=otlp \
OTEL_LOGS_EXPORTER=none \
JAVA_TOOL_OPTIONS=-javaagent:/opentelemetry-javaagent.jar
# 일반 Java 실행 파일의 경우 예시
ENTRYPOINT ["java", "-jar", "/app.jar"]
War + Tomcat
# 에이전트 이미지를 복사할 이미지
FROM local.harbor.io/ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.33.5 AS agent
# Tomcat 이미지 (예시에서는 9.0 버전 사용)
FROM tomcat:9.0.20-jre8-alpine
RUN rm -rf $CATALINA_BASE/webapps/ROOT
COPY --from=download /home/curl_user/sample.war $CATALINA_BASE/webapps/ROOT.war
COPY --from=agent /javaagent.jar /opentelemetry-javaagent.jar
RUN ls -al $CATALINA_BASE/webapps/
# 기본 환경 변수 설정 (고정값)
ENV OTEL_EXPORTER_OTLP_ENDPOINT=http://cocktail-telemetry-collector.cocktail-addon:4318 \
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
OTEL_METRICS_EXPORTER=otlp \
OTEL_TRACES_EXPORTER=otlp \
OTEL_LOGS_EXPORTER=none \
JAVA_TOOL_OPTIONS=-javaagent:/opentelemetry-javaagent.jar
EXPOSE 8080
CMD ["catalina.sh", "run"]
기본 설정 가능한 환경 변수는 다음과 같은 의미를 가집니다.
OTEL_LOGS_EXPORTER
: 로그를 수집하는 collector에 전달하는 프로토콜을 정의합니다.otlp : OpenTelemetry Protocol을 사용하여 Collector에 정보를 전달합니다.
none: 사용하지 않습니다.
OTEL_METRICS_EXPORTER
: 메트릭을 수집하는 collector에 전달하는 프로토콜을 정의합니다.otlp : OpenTelemetry Protocol을 사용하여 Collector에 정보를 전달합니다.
none: 사용하지 않습니다.
OTEL_TRACES_EXPORTER
: 트레이스(추적)를 수집하는 collector에 전달하는 프로토콜을 정의합니다.otlp : OpenTelemetry Protocol을 사용하여 Collector에 정보를 전달합니다.
none: 사용하지 않습니다.
OTEL_EXPORTER_OTLP_ENDPOINT
: 수집 Collector 접속 주소를 입력 합니다. 칵테일에서는 고정값입니다.OTEL_EXPORTER_OTLP_PROTOCOL
: OpenTelemetry Collector에서 전달 받을 프토토콜 종류 선택http/protobuf : 기본값으로 칵테일에서는 이 값을 사용합니다.
JAVA_TOOL_OPTIONS
: 에이전트를 동작 시키기 위한 설정입니다.
워크로드 환경 변수 설정
이미지를 쿠버네티스에서 동작 시킬때 환경 변수를 추가하여, 수집 정보에 필요한 정보를 추가해 주어야 합니다. 필수로 애플리케이션 이름이 필요합니다.
OTEL_SERVICE_NAME
어플리케이션 고유 이름
필수값 (고유 ID)
OTEL_METRICS_EXPORTER
메트릭 전송 프로토콜 선택
수집 하지 않을 경우 none 입력
OTEL_TRACES_EXPORTER
추적 전송 프로토콜 선택
수집 하지 않을 경우 none 입력
워크로드 시작시 에이전트 동작 확인
로그에 다음과 같은 시작 로그가 기록 되는지 확인합니다.
[otel.javaagent 2024-10-21 02:10:15:820 +0000] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 1.33.5
Last updated