본문으로 건너뛰기

Docker Java 설치

관리 > 에이전트 설치 > 하단의 애플리케이션 설치 클릭 > 설치 안내 중 Docker Java 탭 선택

Docker 컨테이너 기반으로 실행하는 Java 애플리케이션의 JVM Option에 에이전트 적용을 위한 설정을 추가하고 컨테이너 이미지를 패키징하는 과정을 다음과 같이 안내합니다.

노트
  • EKS Fargate는 지원 예정입니다.

  • Java 애플리케이션 연동 과정에 대한 이해를 돕고자 Git 예시 코드를 제공합니다. 다음 문서를 참조하세요.

에이전트 다운로드

와탭 애플리케이션 에이전트 설치를 위해 whatap.conf 파일을 생성하세요. {YOUR_PROJECT_ROOT}는 에이전트를 설치하려는 프로젝트의 최상위 경로로 변경하세요.

cat >{YOUR_PROJECT_ROOT}/whatap.conf <<EOL
whatap.server.host={proxyServer}
EOL

쿠버네티스 내부 애플리케이션 에이전트 옵션 설정

쿠버네티스 내부 애플리케이션 에이전트에 필요한 설정을 whatap.conf 파일에 작성하거나 또는 에이전트 배포 시 컨테이너 env 필드를 통해 설정할 수 있습니다.

  • whatap.conf 파일 내 옵션이 컨테이너 env 필드에 설정된 옵션보다 높은 우선순위를 가집니다.

  • whatap.conf 또는 컨테이너 env에 설정된 값이 없는 경우 기본값이 사용됩니다.

  • licensewhatap.server.host 옵션의 경우 컨테이너 환경변수 설정을 활용하세요.

설정 파일의 내용이 변경되거나 중요한 설정 항목이 소실될 경우 정상적으로 동작하지 않을 가능성이 있기에 쿠버네티스 환경 내 컨테이너 환경변수 설정을 권장합니다. 그외 에이전트 기능 제어 옵션에 대한 자세한 내용은 다음 문서를 참조하세요.

노트

쿠버네티스 환경 내 사용 불가 옵션

  • whatap.name: 수집 서버가 에이전트를 식별하는 고유한 이름입니다. 해당 이름은 에이전트가 실행 중인 오브젝트 정보를 기반으로 생성됩니다. 사용자 임의 지정 시 에이전트 식별에 문제가 생길 수 있습니다.

  • whatap.onode: 기본값으로 쿠버네티스 클러스터 노드 이름이 설정됩니다. 에이전트가 속한 노드 정보를 제공받기 위해 사용됩니다. 사용자 임의 지정 시 정확한 노드 식별이 어려워질 수 있습니다.

최신 버전 에이전트를 애플리케이션 이미지에 포함시킬 수 있도록 안내합니다.

  1. 애플리케이션 이미지에 와탭 에이전트를 포함시키려면 먼저 Dockrfile 최종 이미지 빌드 단계에서 다음 내용을 추가하세요. {YOUR_PROJECT_ROOT}를 에이전트를 설치하려는 프로젝트의 최상위 경로로 변경하세요.

    # 와탭 에이전트용 디렉터리를 사용자 컨테이너에 생성
    RUN mkdir -p /whatap

    # 와탭 Java 에이전트를 사용자 컨테이너에 복사
    COPY --from=whatap/kube_mon /data/agent/micro/whatap.agent.kube.jar /whatap

    # 생성한 whatap.conf 설정 파일을 사용자 컨테이너에 복사
    COPY {YOUR_PROJECT_ROOT}/whatap.conf /whatap/
  2. Dockerfile의 시작 명령어에 다음 내용을 추가하세요.

    -javaagent:/whatap/whatap.agent.kube.jar -Dwhatap.micro.enabled=true

    다음 Dockerfile의 정의 예시를 참고하세요.

    Dockerfile
    FROM openjdk:8-jdk-slim
    RUN mkdir -p /app && mkdir /whatap
    WORKDIR /app
    COPY --from=whatap/kube_mon /data/agent/micro/whatap.agent.kube.jar /whatap
    COPY ./whatap.conf /whatap
    COPY ./target/myApp.jar /app/
    CMD ["java","-javaagent:/whatap/whatap.agent.kube.jar","-Dwhatap.micro.enabled=true","-jar","/app/myApp.jar"]
    EXPOSE 8080
  3. Docker를 빌드하세요. {YOUR_DOCKERFILE_DIR}를 Dockerfile이 위치한 경로로 변경하세요.

    cd {YOUR_DOCKERFILE_DIR}
    docker build -t {IMAGE_NAME} .

Java 17 버전 이상의 경우 reflection 관련 --add-opens=java.base/java.lang=ALL-UNNAMED 옵션을 추가하세요.

보안키 설정하기

SQL 변수, HTTP 쿼리를 조회하거나 Thread 중지 기능 이용하려면 보안키를 설정하세요.

  • Java 에이전트 2.2.2 버전 이상

    $WHATAP_HOME 경로에 security.conf 파일을 생성한 후 다음과 같이 6자리 영어, 숫자로 구성된 암호를 입력하세요.

    security.conf
    paramkey=ABCDEF # SQL 변수 및 HTTP 쿼리 조회
    threadkill=ABCDEF # Thread 중지 기능
  • Java 에이전트 2.2.2 버전 미만

    $WHATAP_HOME 경로에 paramkey.txt 파일을 생성한 후 다음과 같이 6자리 영어, 숫자로 구성된 암호를 입력하세요.

    paramkey.txt
    ABCDEF # SQL 변수 및 HTTP 쿼리 조회, Thread 중지 기능

Java 에이전트 2.2.2 버전 미만에서 2.2.2 버전으로 업데이트하는 경우 기존 paramkey.txt 파일의 키값은 seuciry.conf 파일의 키값으로 자동 적용됩니다. 예를 들어, paramkey.txtFEDCBA를 사용한 상태에서 2.2.2 버전으로 업데이트했다면, security.conf 파일에는 다음과 같이 적용됩니다.

paramkey=FEDCBA
threadkill=FEDCBA

paramkey.txt 파일이 존재하지 않을 경우 security.conf 파일의 키값은 WHATAP이라는 키값으로 자동 생성됩니다.

노트
  • SQL 파라미터 정보 기록과 관련한 에이전트 설정은 다음 문서를 참조하세요.

  • HTTP 파라미터 정보 기록과 관련한 에이전트 설정은 다음 문서를 참조하세요.

컨테이너 환경변수 설정

Docker 빌드 후 쿠버네티스 환경 내 컨테이너 환경변수를 설정하세요. 애플리케이션 배포 yaml 파일에 다음 내용을 추가하세요.

env:
- name: NODE_IP
valueFrom: {fieldRef: {fieldPath: status.hostIP}}
- name: NODE_NAME
valueFrom: {fieldRef: {fieldPath: spec.nodeName}}
- name: POD_NAME
valueFrom: {fieldRef: {fieldPath: metadata.name}}
- name: OKIND
value: {YOUR_OKIND_NAME}
- name: license
value: {licenseKey}
- name: whatap.server.host
value: {proxyServer}
- name: whatap.micro.enabled
value: "true"

다음 예시를 참조하세요.

apiVersion: apps/v1
kind: Deployment
metadata:
name: #DeploymentName
labels:
app: #AppLabel
spec:
replicas: 3
selector:
matchLabels:
app: #AppLabel
template:
metadata:
labels:
app: #AppLabel
spec:
containers:
- name: #ContainerName
image: nginx
ports:
- containerPort: 80
env:
- name: NODE_IP
valueFrom: {fieldRef: {fieldPath: "status.hostIP"}}
- name: NODE_NAME
valueFrom: {fieldRef: {fieldPath: "spec.nodeName"}}
- name: POD_NAME
valueFrom: {fieldRef: {fieldPath: "metadata.name "}}
- name: OKIND
value: #DeploymentName
- name: license
value: #licenseKey
- name: whatap.server.host
value: #proxyServer
- name: whatap.micro.enabled
value: "true"
노트

환경변수 역할

  • NODE_IP: 현재 Pod가 호스팅된 노드(Node)의 IP 주소를 수집합니다.

  • NODE_NAME: 현재 Pod가 실행 중인 노드의 이름을 수집합니다.

  • POD_NAME: 현재 Pod의 이름을 수집합니다.

  • OKIND(선택사항): Pod에 해당하는 애플리케이션들을 그룹화합니다. 디플로이먼트(Deployment) 이름으로 설정하면 해당하는 Pod들을 하나로 그룹화합니다.

  • license: 에이전트 인증 확인을 위한 키입니다.

  • whatap.server.host: 와탭 수집 서버 호스트 IP입니다.

  • whatap.micro.enabled: 컨테이너와의 연동을 활성화합니다.

에이전트 설치 확인

  • 에이전트를 제대로 설치했는지 확인하려면 대시보드 > 애플리케이션 서비스 대시보드 메뉴로 이동하세요.

  • 다운로드한 파일을 직접 설치한 다음 대시보드 메뉴에서 에이전트를 확인할 수 없다면 다음 사항을 확인하세요.

    • 컨테이너에서 ps -ef | grep whatap 명령어를 실행해 에이전트 옵션을 적용했는지 확인하세요.

    • 컨테이너의 /whatap/logs 경로의 내용을 확인하세요. 에이전트 로그는 logs/{whatap 설정파일명}-yyyymmdd.log 형식의 파일명으로 출력됩니다.