본문으로 건너뛰기

이미지재빌드를통해적용하는방법

노트

▣ 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/exemone
COPY EXEM-PYTHON-AGENT-3.0.1.tar.gz /home/exemone
RUN tar -zxvf /home/exemone/EXEM-PYTHON-AGENT-3.0.1.tar.gz -C /home/exemone

RUN pip install /home/exemone/exem/python/lib/exem-python-agent-3.0.1.tar.gz

ENTRYPOINT ["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 ["start_agent","uvicorn", "--app-dir", "/sample/xmit-python/xmit_fastapi", "app:app", "--host", "0.0.0.0"]
  • ENTRYPOINTstart_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_HOMEexem-python-agent 의 HOME 경로/EXEM-PYTHON-AGENT-X.X.X.tar.gz 패키지 압축해제 경로/exem/python
EXEM_PYTHON_AGENT_NAMEWAS Namepython-k8s-fastapi 또는 metadata.name으로 pod 이름을 사용
EXEM_GROUP_IDWAS Group IDpython_fastapi
EXEM_RECEIVER_ADDRexem-python-agent와 연결할 receiver의 ip:port
ip:port 형식으로 입력
10.20.30.40:9009
EXEM_RUN_ON_CONTAINER
컨테이너 환경에서 동작하는지 여부 설정
해당 옵션을 true로 설정해야만 아래 컨테이너 연계를 위한 env 설정이 적용되어 컨테이너와 연결 가능


true
EXEMWID컨테이너 연계를 위한 KEY
EXEM_RUN_ON_CONTAINER=true
로 설정해야만

v3.0.19+ Deprecated
EXEM_PYTHON_LOG_MODE
LOG_PATH=console로 대체
exem-python-agent 로그 생성 방법
POD 화면출력 = 1로 설정
로그 파일로 생성 = 2로 설정
1
  • 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 : *