Kubernetes APM 자동 연결을 사용하는 경우, 특정 배터리에 대한 모니터링 기능을 향상하기 위해 확장 모듈을 추가하거나 기본 클러스터 서버 범위에서 다루지 않는 프레임을 사용할 수 있습니다.
이 가이드에서는 ☐ 확장 기능을 사용하여 사용자 정의 docker 이미지를 만들고 이를 Kubernetes APM 자동 연결과 통합하는 방법을 보여줍니다.
시작하기 전에
Java 확장 기능을 추가하기 전에 다음 사항을 확인하세요.
- Kubernetes APM 자동 연결 설치 및 구성
- 사용자 정의 이미지 빌드를 위해 docker가 설치됨
- 컨테이너 레지스트리(도커 허브, ECR, GCR 등)에 대한 액세스
- 레지스트리에 이미지를 푸시할 수 있는 권한
- 필요한 기타 확장 모듈 에 대한 지식
개요
이 과정은 세 가지 주요 단계로 구성됩니다.
- 원하는 확장자를 사용하여
newrelic/newrelic-java-init:latest을 기반으로 사용자 지정 도커 이미지를 만듭니다. - 이미지를 빌드하고 컨테이너 레지스트리에 푸시합니다.
- 새 이미지를 사용하려면 Kubernetes 측정, 로그를 업데이트하세요.
확장자를 사용하여 사용자 정의 도커 이미지 만들기
Dockerfile 만들기
원래 뉴렐릭 자바 init 이미지를 확장하고 원하는 확장 기능을 추가하는 새로운 Dockerfile 을 만듭니다. Kotlin 코루틴 확장 기능을 사용하는 예는 다음과 같습니다.
# Start from the original New Relic Java init imageFROM newrelic/newrelic-java-init:latest
# Create the extensions directory in the rootRUN mkdir -p /extensions
# Example: Add Kotlin coroutines instrumentation# Download the latest version and extract to extensions directoryRUN VERSION=$(wget -q -O - https://api.github.com/repos/newrelic/newrelic-java-kotlin-coroutines/releases/latest | \ awk '/tag_name/{gsub(/,|"/,"",$2);print$2}') && \ wget -qO /tmp/kotlin-coroutines-instrumentation.zip \ "https://github.com/newrelic/newrelic-java-kotlin-coroutines/releases/download/$VERSION/kotlin-coroutines-instrumentation-$VERSION.zip" && \ unzip -j /tmp/kotlin-coroutines-instrumentation.zip "*.jar" -d /extensions && \ rm /tmp/kotlin-coroutines-instrumentation.zip팁
Kotlin 코루틴 예제를 필요한 특정 확장 기능으로 바꾸세요. 사용 가능한 확장 기능은 ☐ 확장 모듈 설명서 에서 찾을 수 있습니다.
Docker 이미지 빌드
로컬에서 사용자 정의 이미지를 빌드하세요.
$docker build -t your-registry/{Your-Image-Name}your-registry/{Your-Image-Name} 실제 컨테이너 레지스트리 경로 및 이미지 이름으로 바꾸세요(예: mycompany/newrelic-java-init-custom).
컨테이너 레지스트리에 푸시
이미지를 컨테이너 레지스트리에 푸시합니다.
$docker push your-registry/{Your-Image-Name}Kubernetes 측정 업데이트
측정, 리소스 수정
기존 측정, 계측 사용자 정의 리소스(CR)를 업데이트하여 새 이미지를 사용합니다. 다음은 instrumentation-java.yaml 의 예입니다.
apiVersion: newrelic.com/v1beta2kind: Instrumentationmetadata: name: newrelic-instrumentation-java namespace: newrelicspec: agent: language: java image: your-registry/{Your-Image-Name}업데이트된 측정값을 적용합니다.
클러스터에 업데이트된 측정을 적용합니다.
$kubectl apply -f instrumentation-java.yaml영향을 받은 워크로드를 다시 시작하세요.
확장 기능이 포함된 새로운 init 컨테이너를 선택하려면 특수한 기능을 다시 시작하세요.
특정 구현을 다시 시작하려면 배포:
bash$# Restart a specific deployment$kubectl rollout restart deployment/my-java-deployment모든 구현을 다시 시작하려면 지우스페이스에 배포하세요.
bash$# Or restart all deployments in a namespace$kubectl rollout restart deployments -n my-namespace
문제점 해결
확장 프로그램이 로드되지 않음
확장 프로그램이 로드되지 않는 경우:
사용자 지정 이미지에 확장 디렉토리가 있는지 확인하세요.
bash$docker run --rm your-registry/{Your-Image-Name} ls -la /extensions파일 권한을 확인하여 확장 JAR 파일을 읽을 수 있는지 확인하세요.
에이전트 초기화 중에 발생한 오류 메시지를 확인하려면 init 컨테이너 로그를 검토하세요.