이미지재빌드를통해적용하는방법
노트
▣ Docker Container로 서비스되는 Applicaiton인 경우 다음의 설치 과정을 수행합니다.
▣ EXEM-PYTHON-AGENT-1.1.2.tar.gz 패키지부터 패키지 내의 exem/python/cfg/tmp 폴더 아래에 예시 docker file, deploy yaml 파일을 제공합니다.
▣ exem-python-agent v3.0.18.1 ~ 부터 적용 가능합니다. (이전 버전의 경우 (~v3.0.18) 이미지 재빌드를 통해 적용하는 방법 문서 참고)
▶ Dockerfile 설정
- ◈ exem-python-agent를 설치하기 위해서는 기존에 사용하고 있는 dockerfile에 다음의 내용 추가가 필요합니다.
Dockerfile 파일 전체 예시
- 기존 고객의 Dockerfile에 하이라이트된 부분을 추가하면 됩니다.
| #FROM python:3.10 ... (기존 고객사의 파이썬 dockerfile 내용 생략) ... #exem-python-agent를 고객이 설치할 경로의 폴더가 없다면 mkdir로 생성 필요 RUN mkdir -p [고객이 설치할 절대경로]COPY EXEM-PYTHON-AGENT-3.0.1.tar.gz [고객이 설치할 절대경로]RUN tar -zxvf [고객이 설치할 절대경로]/EXEM-PYTHON-AGENT-3.0.1.tar.gz -C [고객이 설치할 절대경로]RUN pip install [고객이 설치할 절대경로]/exem/python/lib/exem-python-agent-3.0.1.tar.gz# ENTRYPOINT 설정하는 자세한 방법은 아래 ❻ entrypoint 추가를 참고 ENTRYPOINT [" start_agent",“[고객의 기존 python 어플리케이션 실행 명령어]”] |
|---|
[고객이 설치할 절대경로]를/home/exemone으로 설정한 예시입니다.
| #FROM python:3.10 ... (기존 고객사의 파이썬 dockerfile 내용 생략) ... #exem-python-agent를 고객이 설치할 경로의 폴더가 없다면 mkdir로 생성 필요 RUN mkdir -p /home/exemoneCOPY EXEM-PYTHON-AGENT-3.0.1.tar.gz /home/exemoneRUN tar -zxvf /home/exemone/EXEM-PYTHON-AGENT-3.0.1.tar.gz -C /home/exemoneRUN pip install /home/exemone/exem/python/lib/exem-python-agent-3.0.1.tar.gzENTRYPOINT [" start_agent",“[고객의 기존 python 어플리케이션 실행 명령어]”] |
|---|
❶ exem-python-agent를 설치할 폴더 생성
- 아래 예시는
/home/exemone폴더를 만드는 예시입니다. 고객이 설치하고 싶은 경로에 폴더가 있다면 하지 않아도 됩니다.
예시) RUN mkdir -p /home/exemone
❷ 설치할 EXEM-PYTHON-AGENT-X.X.X.tar.gz 패키지 복사
- 아래 형식으로 작성합니다.
- COPY [EXEM-PYTHON-AGENT-X.X.X.tar.gz 패키지]
[고객이 설치할 절대경로] [고객이 설치할 절대경로]에 EXEM-PYTHON-AGENT-X.X.X.tar.gz 패키지가 복사됩니다.
예시) EXEM-PYTHON-AGENT-3.0.1.tar.gz를 /home/exemone에 복사하는 예시
COPY EXEM-PYTHON-AGENT-3.0.1.tar.gz /home/exemone
❸ 설치할 EXEM-PYTHON-AGENT-X.X.X.tar.gz 패키지 압축 해제
- 패키지 폴더 및 파일 구조는 1. 소개 문서를 참고합니다.
- tar -zxvf
[고객이 설치할 절대경로]/EXEM-PYTHON-AGENT-3.0.1.tar.gz -C[고객이 설치할 절대경로] - tar의 -C 옵션을 사용하여 원하는 경로에 EXEM-PYTHON-AGENT-X.X.X.tar.gz 패키지 압축해제 합니다.
예시) RUN tar -zxvf /home/exemone/EXEM-PYTHON-AGENT-3.0.1.tar.gz -C /home/exemone
❹ pip install로 exem-python-agent 모듈 설치
- 모듈은
exem/python/lib디렉토리에 위치해있습니다.
- 모듈 파일명은
exem-python-agent-x.x.x.tar.gz입니다. - pip install을 이용하여 모듈을 설치 합니다.
예시) RUN pip install /home/exemone/exem/python/lib/exem-python-agent-3.0.1.tar.gz
❺ [필요시에만 추가] 콜트리 추가가 필요한 경우 local.advice.ini 파일 설정 필요
- 동적 적용 불가 설정
- Dockefile이 아닌 yaml의 ConfigMap을 수정하는 방식도 가능하며,
하단의 ❷
[필요시에만 추가]콜트리 추가가 필요한 경우 exem-python-agent-config ConfigMap 설정 수정 필요 를 참고하면 됩니다.
예시) RUN printf '[redis]\nStrictRedis:*\n' > /home/exemone/exem/python/cfg/agent/local.advice.ini
❻ entrypoint 추가
- 모듈 설치시
start_agent라는 실행 커맨드가 Python 의 경로에 추가됩니다.
start_agent를 이용하여 고객의 파이썬 어플리케이션을 적용합니다.- 위 ❹ pip install로 exem-python-agent 모듈 설치하면 start_agent 커맨드를 사용할 수 있습니다. (start_agent 커맨드는 fastapi 기동에 필요한 uvicorn이나 .py를 실행하기위한 python 커맨드와 같은 기능을 합니다.)
- ENTRYPOINT ["
start_agent", "[기존 고객의 python application 실행 명령어]"]
- ENTRYPOINT ["
예시) ENTRYPOINT ["start_agent","uvicorn", "--app-dir", "/sample/xmit-python/xmit_fastapi", "app:app", "--host", "0.0.0.0"]
- ENTRYPOINT로
start_agent를 설정하면 exem-python-agent가 적용되어 고객사의 기존 python application이 실행됩니다. 즉, 고객사의 python application 모니터링이 가능해진다.
◈ 설정 참고사항
- 기존 고객의 python 어플리케이션 실행 명령어는 다음과 같은 유형 모두 가능합니다.
예시 1) [프레임워크 명령어 사용 방식] uvicorn --app-dir /sample/xmit-python/xmit_fastapi app:app
예시 2) [python 실행 명령어로 Python 스크립트 실행하는 방식] python /sample/kafka_confluent/consumer_confluent.py
예시 3) [고객의 파이썬 실행 스크립트 사용하는 방식] /sample/start_fastapi.sh"
예시 4) [고객의 파이썬 실행 스크립트 사용하는 방식(스크립트의 파라미터로 전달하는 경우)]/sample/start_fastapi.sh arg1 arg2
▶ yaml 설정
위험
- ◈ deploy yaml에 exem-python-agent를 설치하기 위한 설정 값 추가가 필요합니다.
◈ CURR_TRACE_TXN 옵션 기본 값이 *:3000 로 설정되어 있어 3초 미만 트랜잭션은 수집되지 않습니다.
모든 트랜잭션을 확인하고 싶은 경우 CURR_TRACE_TXN 옵션을 *:0 으로 설정해야 합니다.
yaml 파일 전체 예시
- 기존 고객의 yaml에 하이라이트된 부분을 추가하면 됩니다.
- 초록색 굵은 글씨는 주석입니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: exem-python-agent-config
namespace: exemone-python
data:
local.advice: |
### 작성 형식
# [패키지명]
# 클래스명:메소드명
### 작성 방법
# 추가로 위빙할 메소드를 설정
# 클래스 메소드가 아닌 단순 함수 설정시 클래스명 대신 NONE 으로 작성
# * 을 통해 해당 클래스 또는 모듈의 모든 메소드 위빙 가능
### 작성 예시
# [redis]
# * : *
# [mysql]
# PyMySQL : *
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: python-k8s-fastapi
labels:
app: python-k8s-fastapi
namespace: exemone-python
spec:
replicas: 1
selector:
matchLabels:
app: python-k8s-fastapi
template:
metadata:
labels:
app: python-k8s-fastapi
spec:
volumes:
- name: exem-python-agent-config
configMap:
name: exem-python-agent-config
containers:
- name: python-k8s-fastapi
image: exem/exem-python-agent:fastapi_3.10 // exem-python-agent를 설치 추가 후 재빌드한 이미지
imagePullPolicy: Always
volumeMounts:
- name: exem-python-agent-config
mountPath: [고객이 설치할 절대경로]/exem/python/cfg/agent/local.advice
subPath: local.advice
readOnly: true
env:
- name: EXEM_PYTHON_HOME
value: "[고객이 설치할 절대경로]/exem/python"
- name: EXEM_PYTHON_HOME
value: "/exem/python"
- name: EXEM_GROUP_ID
value: "python"
- name: EXEM_RUN_ON_CONTAINER
value: "true"
- name: EXEMWID
valueFrom:
fieldRef:
fieldPath: metadata.uid
- name: EXEM_PYTHON_AGENT_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: EXEM_RECEIVER_ADDR
value: "10.20.30.40:9010"
ports:
- containerPort: 8000
❶ [exem-python-agent] 적용에 필요한 env(환경 변수) 추가
- exem-python-agent 기동에 반드시 필요한 7개의 환경 변수를
env(환경 변수)로 deploy yaml에 추가해야 합니다.- 환경 변수 설정
| 환경변수명 | 설명 | 예시 |
|---|---|---|
| EXEM_PYTHON_HOME | exem-python-agent 의 HOME 경로 | /EXEM-PYTHON-AGENT-X.X.X.tar.gz 패키지 압축해제 경로/exem/python |
| EXEM_PYTHON_AGENT_NAME | WAS Name | python-k8s-fastapi 또는 metadata.name으로 pod 이름을 사용 |
| EXEM_GROUP_ID | WAS Group ID | python_fastapi |
| EXEM_RECEIVER_ADDR | exem-python-agent와 연결할 receiver의 ip:portip:port 형식으로 입력 | 10.20.30.40:9009 |
| EXEM_RUN_ON_CONTAINER | 컨테이너 환경에서 동작하는지 여부 설정 해당 옵션을 true로 설정해야만 아래 컨테이너 연계를 위한 env 설정이 적용되어 컨테이너와 연결 가능 | true |
| EXEMWID | 컨테이너 연계를 위한 KEY EXEM_RUN_ON_CONTAINER=true 로 설정해야만 | |
| v3.0.19+ Deprecated | LOG_PATH=console로 대체 POD 화면출력 = 1로 설정 로그 파일로 생성 = 2로 설정 |
- env(환경변수) 예시
env:
- name: EXEM_PYTHON_HOME
value: "[고객이 설치할 절대경로]/exem/python"
- name: EXEM_PYTHON_AGENT_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: EXEM_GROUP_ID
value: "python_fastapi"
- name: EXEM_RECEIVER_ADDR
value: "10.20.30.40:9009"
- name: EXEM_RUN_ON_CONTAINER
value: "true"
- name: EXEMWID
valueFrom:
fieldRef:
fieldPath: metadata.uid
❷ [필요시에만 수정] 콜트리 추가가 필요한 경우 exem-python-agent-config ConfigMap 설정 수정 필요
- 동적 적용 불가 설정
- ConfigMap이 아닌 Dockerfile을 수정하는 방식도 가능하며,
상단의 ❺
[필요시에만 추가]콜트리 추가가 필요한 경우 local.advice 파일 설정 필요 를 참고하면 됩니다. - yaml 파일 전체 예시의 초록색 굵은 글씨 local.advice 부분의 주석을 참고하여 수정하면 됩니다.
- exem-python-agent-config ConfigMap 예시
apiVersion: v1
kind: ConfigMap
metadata:
name: exem-python-agent-config
namespace: exemone-python
data:
local.advice: |
### 작성 형식
# [패키지명]
# 클래스명:메소드명
### 작성 방법
# 추가로 위빙할 메소드를 설정
# 클래스 메소드가 아닌 단순 함수 설정시 클래스명 대신 NONE 으로 작성
# * 을 통해 해당 클래스 또는 모듈의 모든 메소드 위빙 가능
### 작성 예시
# [redis]
# * : *
# [mysql]
# PyMySQL : *