メインコンテンツまでスキップ

イメージ再ビルドを通じて適用する方法

注記

▣ 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 を利用して顧客の python アプリケーションを適用します。
  • 上記 ❹ 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"]
  • 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_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 : *