본문으로 건너뛰기

컨테이너 이미지 빌드 방법

다음에서 OPENMARU APM을 컨테이너 환경에 설치하는 절차를 설명한다.

4.2 APM 에이전트 OpenShift 이미지 빌드

APM에서 OpenShift에서 Container로 운영되는 WAS 인스턴스를 모니터링하기 위해서는 Docker Image를 빌드하여 OpenShift의 Docker Registry에 등록하는 작업이 필요하다. 다음에서 빌드하고 레지스트리에 배포하는 절차를 설명한다.

OpenShift 에이전트 파일구성

OpenShift의 Registry에 접속할 수 있고, Podman 데몬이 설치된 리눅스 머신에 아래와 같은 파일 압축을 해제한다.

$ wget https://cloud.openmaru.io/api/v1/projects/{SAAS_PROJECT_ID}/download/was-agent.zip
$ unzip khan-agent-5.1.0.zip

Dockerfile 구성

OpenShift용 이미지 생성 시 khan-agent-5.1.0.jar, khan-agent.conf, user-interceptor.conf 을 추가한다.

FROM registry.redhat.io/jboss-eap-7/eap74-openjdk8-openshift-rhel7

USER root

ENV JAVA_OPTS="-javaagent:/opt/eap/khan-apm/khan-agent-5.1.0.jar"
ENV JAVA_OPTS="-Dkhan.config.file=/opt/eap/khan-apm/khan-agent.conf"

ADD ./khan-agent-5.1.0.zip /opt/eap/
RUN unzip -q /opt/eap/khan-agent-5.1.0.zip -d /opt/eap/khan-apm && \
chmod -R 777 /opt/eap/khan-apm

ADD khan-agent.conf /opt/eap/khan-apm
ADD user-interceptor.conf /opt/eap/khan-apm

USER jboss

khan-agent.conf 파일에 대한 추가설명은 켄터이너 에이전트 설치 가이드 목록 중 Pod에서 사용가능한 환경변수를 참고한다.

build.sh 구성

이미지를 빌드하여 OpenShift의 Private Registry에 Push하기 위한 스크립트가 build.sh 파일이다. 고객사마다, OpenShift Private Registry를 외부 서버에 사용하거나 Container로 사용하는 등 다양하게 사용할 수 있기 때문에 , build.sh 파일에서 REGISTRY_URL의 이름을 변경한다.

$ vi build.sh
#/bin/bash
# -------------------------------------------------------------
# OPENMARU APM http://www.opennaru.com/
# for OpenShift Container JBoss EAP 7.0 Image Monitoring
#
# contact : service@opennaru.com
# Copyright(C) 2015, Opennaru,Inc. All Rights Reserved.
# -------------------------------------------------------------

#/bin/bash
export REGISTRY_URL=default-route-openshift-image-registry.apps.ocp.opennaru.com

TAG_NAME=eap74-test
VERSION=5.1.0-7.1.1
#
# registry login examples
#

#oc login
#docker login -u devadmin -p $(oc whoami -t) $REGISTRY_URL
#podman login -u $(oc whoami) -p $(oc whoami -t) $REGISTRY_URL

#sudo docker login -p <TOKEN_IN_OPENSHIFT_REGISTRY> -e unused -u unused $REGISTRY_URL
#oc login --token <TOKEN_IN_OPENSHIFT_REGISTRY> ocp-master1.ocp-dev.opennaru.com

podman build --rm --tag=$TAG_NAME .

podman tag $TAG_NAME $REGISTRY_URL/openshift/$TAG_NAME:$VERSION
#$podman push $REGISTRY_URL/openshift/$TAG_NAME:$VERSION
podman push --tls-verify=false $REGISTRY_URL/openshift/$TAG_NAME:$VERSION

Docker Image의 NameSpace와 Image Stream이름을 OpenShift/$TAG_NAME:$VERSION으로 지정되어 있으니, 이를 원하는 이름으로 변경하면 된다.

빌드하여 Registry에 Push하기 위해서는 Registry에 로그인 해야 하기 때문에, 빌드하기 전에 oc login이나 podman login 명령으로 미리 로그인한다.

$ export REGISTRY_URL=**default-route-openshift-image-registry.apps.ocp.opennaru.com**

$ oc login
혹은 $ podman login -u devadmin -p $(oc whoami -t) $REGISTRY_URL

Docker Image 빌드 및 Registry Push

./build.sh 명령을 실행하여 이미지를 빌드하고 Push한다.

[root@bastion test1]# **./build.sh**
STEP 1: FROM registry.redhat.io/jboss-eap-7/eap74-openjdk8-openshift-rhel7
STEP 2: USER root
*/} Using cache a50cb975c41deb224f7b80554b803052c296d299613e28a1f03dad092c59d643
STEP 3: ENV JAVA_OPTS="-javaagent:/opt/eap/khan-apm/khan-agent-5.1.0.jar"
*/} Using cache bc0de1b934a9cced9158f822bdc523e7357e146855f1e931cf0a3107e5809d6a
STEP 4: ENV JAVA_OPTS="-Dkhan.config.file=/opt/eap/khan-apm/khan-agent.conf"
*/} Using cache 049c9899bd8bf0c58d62e6e0ae8e937e9d7dd389e0fdf1186297c71c1318f763
STEP 5: ADD ./khan-agent-5.1.0.zip /opt/eap/
*/} Using cache ae0554d55338651a58e127f4b2c1a404f1fae7969f2d4f85853380d1417f6176
STEP 6: RUN unzip -q /opt/eap/khan-agent-5.1.0.zip -d /opt/eap/khan-apm && chmod -R 777 /opt/eap/khan-apm
*/} Using cache 422ec3534a9c06c4c04d6dca46a18cbaebceb72f6c0f4b0a3c7ae358f420212f
STEP 7: ADD khan-agent-5.1.0.jar /opt/eap/khan-apm
*/} Using cache dad9501724490dafe4c8daadef0bed99060b34f69f7ab2199dc3e5f37c603c60
STEP 8: ADD khan-agent.conf /opt/eap/khan-apm
*/} Using cache b9378c22e39f55c60c1c9f59a475ca6a9e5ddba577eec85a1b84d4a9563e90c1
STEP 9: ADD user-interceptor.conf /opt/eap/khan-apm
*/} Using cache ec08353950d87273d0ac05fabff9aa9063b67ed1e64cd615f9d76f05cec0f224
STEP 10: USER jboss
*/} Using cache ad2953319f2eb69f5f0e072f1514dd72d83f667bd4807168adf26c1ba9961900
STEP 11: COMMIT eap74-test
ad2953319f2eb69f5f0e072f1514dd72d83f667bd4807168adf26c1ba9961900
ad2953319f2eb69f5f0e072f1514dd72d83f667bd4807168adf26c1ba9961900
Getting image source signatures
Copying blob 28a63be9d2b0 done
Copying blob d782d20c8ee3 done
Copying blob c8f02e541067 done
Copying blob 132ca6509b35 skipped: already exists
Copying blob 85b07cb63121 skipped: already exists
Copying blob 1eaba82ed886 skipped: already exists
Copying blob b88369a48dc4 done
Copying blob 6d7fcfc12225 done
Copying config ad2953319f done
Writing manifest to image destination
Writing manifest to image destination
Storing signatures

APM Base Image 검증

OpenShift 에 Deploy 후 APM에서 접속되어 동작하는지 검증한다.

  1. Agent 접속 확인
  2. JVM 모니터링 확인
  3. /session/index.jsp 호출 시 T-Map 확인

이슈 발생 시 확인 사항

프로세스 조회 시 JAVA_OPTS 가 아래와 같은 순서로 되어야 한다. OpenShift Terminal

ps -ef | grep jboss
...중략...
-javaagent:/opt/eap/khan-apm/khan-agent/khan-agent-5.1.0.jar
...중략...
-Xbootclasspath/p:...중략...
...중략...
-Djava.util.logging.manager=org.jboss.logmanager.LogManager