エージェント(Python)のインストール及び構成

この章ではエージェント(Python)のインストール方法について説明します。

エージェント(Python)の対応環境

対応OS

エージェント(PHP)をインストールできるOSは次の通りです。

x86、x64のCPUアーキテクチャのみサポートします。

対応Pythonバージョン

対応フレームワーク

対応データベースドライバ

データベース名

対応ドライバ

対応バージョン

MySQL / MariaDB

mysqlclient

2.0.3以上

pymysql

1.0.2以上

sqlite3

sqlite3

-

PostgreSQL

psycopg2

2.8以上

psycopg2-binary

2.8以上

Oracle

cx-Oracle

8.0.0以上

mongoDB

pymongo

3.10.1以上

redis

redis

4.0.2以上

pyodbc

pyodbc

4.0.39以上

エージェントのインストール

pipを利用してインストールする方法

1

pipを利用してjennifer-pythonをインストールします。

$ pip install jennifer-python

インターネットの接続制限などがあって上記のコマンドでインストールができない場合は、次のようにPythonパッケージとしてインストールすることができます。

# v2.x
$ python -m pip install <download_path>/jennifer_python-5.6.x.x-py2-none-any.whl
# v3.x
$ python -m pip install <download_path>/jennifer_python-5.6.x.x-py3-none-any.whl

Python用エージェントパッケージは次のURLからダウンロード可能です。

https://pypi.org/project/jennifer-python/#files

2

confファイルを設定します。

①のコマンドを実行すると「jennifer-admin」ツールもインストールされます。これを実行してjennifer-pythonが使用する設定ファイルを生成します。

$ jennifer-admin generate-config

上記のコマンドを実行するとjennifer.iniファイルが生成されます。このファイルを開いて設定を行います。

項目

説明

デフォルト値

server_address

データサーバのIPアドレス

127.0.0.1

server_port

データサーバのリスニングポート番号

5000

domain_id

ドメインID

1000

inst_id

インスタンスID

-1

log_dir

ログファイルを保存するディレクトリのパス

/tmp

インスタンスIDはデータサーバがエージェントを識別するためのuint16範囲の数字です。この値を-1に設定するとデータサーバが自動生成したIDを割り当てします。

ログファイル名は、agent_yyyyMMdd_<domain_id>_<inst_id>.logのフォーマットで生成されます。

ドメインIDやインスタンスIDの確定ができる前に出力されるログは、agent_yyyyMMdd.logファイルに吐き出します。

3

実行

生成した設定ファイルでJENNIFERを実行します。

$ JENNIFER_CONFIG_FILE=<設定ファイルパス> jennifer-admin run <python実行コマンド>
$ JENNIFER_CONFIG_FILE=<設定ファイルパス> jennifer-admin runasync <python実行コマンド>

<python実行コマンド>は、既存pythonウェブアプリケーションサーバを実行するコマンド(例、python manage.py runserver, uwsgi -i uwsgi.iniなど)を意味します。

例えば、jennifer.iniファイルが/home/user/jenniferディレクトリに存在して、既存pythonの実行コマンドが“uwsgi -i uwsgi.ini”でしたら、次のように実行します。

$ JENNIFER_CONFIG_FILE=/home/user/jennifer/jennifer.ini jennifer-admin run uwsgi -i uwsgi.ini

もし、uvicornのような非同期のサービスである場合は"runasync"オプションを使用して、次のように実行します。

$ JENNIFER_CONFIG_FILE=/home/user/jennifer/jennifer.ini jennifer-admin runasync uvicorn --loop asyncio main:app

4

再起動後、<log_path>にログファイルjennifer-python-agent.logが生成されます。エージェントがデータサーバと接続できると、次のようなメッセージが出力されます。

2022/08/05 10:11:09 start agent > pid: 40289, ppid: 40288

2022/08/05 10:11:09 Agent Config: /Users/novalove/Works/pyapps/venv1/agent.python/jennifer.ini
----------------------
Data server host: 192.168.1.12
Data server port: 5000
Domain id: 1000
Instance id: 10000
2022/08/05 10:11:09 startUnixSocket: /var/folders/y6/_wy7csnx7wd1s3663y4s5fw00000gn/T/jennifer-1659661869.sock
2022/08/05 10:11:09 [Diag] startUnixSocket: listening...
2022/08/05 10:11:09 [Diag] [SessionRequest] ver = 5.6.0.15, server = 192.168.1.12, domain_id = 1000, inst_id = 10000, local_address = 192.168.1.11
2022/08/05 10:11:09 processing server message

pipを利用しないでインストールする方法

5.6.3.0以降からpipを利用せずにエージェントをインストールする方法を提供します。

この場合は、jennifer-adminコマンドの使用はできません。

1

pypiからWHLファイルをダウンロードし、圧縮を解凍します。

$ pwd
/tmp
$ unzip jennifer_python-5.6.3.0-py3-none-any.whl

圧縮を解凍すると/tmp/jenniferディレクトリが生成されます。

2

confファイルを設定します。

「jennifer-admin」ツールの使用ができないため、jennifer-pythonが使用する設定ファイルを手動で生成します。

$ pwd
/home/user/jennifer$ vi jennifer.ini
  [JENNIFER]

  server_address = 127.0.0.1
  server_port = 5000
  domain_id = 1000
  inst_id = -1

  # log_dir = /tmp
  # service_dump_dir = /tmp

次のオプションの設定を適切に行います。

項目

説明

デフォルト値

server_address

データサーバのIPアドレス

127.0.0.1

server_port

データサーバのリスニングポート番号

5000

domain_id

ドメインID

1000

inst_id

インスタンスID

-1

log_dir

ログファイルを保存するディレクトリのパス

/tmp

インスタンスIDはデータサーバがエージェントを識別するためのuint16範囲の数字です。この値を-1に設定するとデータサーバが自動生成したIDを割り当てします。

ログファイル名は、agent_yyyyMMdd_<domain_id>_<inst_id>.logのフォーマットで生成されます。

ドメインIDやインスタンスIDの確定ができる前に出力されるログは、agent_yyyyMMdd.logファイルに吐き出します。

3

環境変数を追加します。

圧縮を解凍したパスをPYTHONPATH環境変数に、jennifer.iniファイルをJENNIFER_CONFIG_FILE環境変数に追加します。

$ export PYTHONPATH=/tmp/jennifer/admin
$ export JENNIFER_CONFIG_FILE=/home/user/jennifer/jennifer.ini

4

実行

次のようにwsgi/asgi アプリケーションを実行するとJENNIFERエージェントが適用されます。

$ uwsgi -i uwsgi.ini
$ export JENNIFER_IS_ASYNC=true
$ uvicorn --loop asyncio main:app

Azure Web Appにインストールする方法

1

pipを利用してjennifer-pythonをインストールします。

Azure ポータルにアクセスして [開発ツール] > [SSH] で SSH セッション画面にて、pip installコマンドでインストールします。

Web Appの場合、オートスケールや再起動時に、「/home」ディレクトリを除いて初期化されるので、必ず「/home」ディレクトリにJENNIFERエージェントをインストールする必要があります。

$ pip install jennifer-python -t /home/jennifer

既存バージョンをアップグレードする場合は、ディレクトリを変更してインストールします。既存ディレクトリはWeb Appの再起動後に削除できます。

$ pip install jennifer-python -t /home/jennifer2

2

confファイルを設定します。

Web App環境の場合、必ず、「/home」ディレクトリのサブディレクトリINIファイル作成する必要があります。

$ pwd
/home/jennifer$ vi jennifer.ini
  [JENNIFER]

  server_address = 127.0.0.1
  server_port = 5000
  domain_id = 1000
  inst_id = -1

  # log_dir = /tmp
  # service_dump_dir = /tmp

3

環境変数を追加します。

「Settings(設定) > Environment variables(環境変数)」画面にてINIファイルのパスを追加します。

[App settings]

NAME: JENNIFER_CONFIG_FILE
VALUE: /home/jennifer_conf.ini

次に、「Settings(設定) > Configuration(構成)」のスタートアップ コマンドに設定されている既存のコマンドに加え、jenniferの起動コマンドを追加します。

例えば、現在のスタートアップ コマンド値が「python -m uvicorn main:app --host 0.0.0.0.0」と設定されている場合、次のように追加します。

[General settings]

Startup Command: python /home/jennifer/jennifer/admin/__init__.py run python -m uvicorn main:app --host 0.0.0.0

注意事項

一部Webアプリケーションサーバの場合、jennifer-pythonの適切なデータ収集のために次のオプションの追加が必要です。

アプリケーションサーバ

オプション

uwsgi

–enable-threads

エージェントのアンインストール

1

pipでインストールする環境

次のコマンドを実行してJENNIFERパッケージを削除し、Pythonウェブサーバを再起動します。

$ pip uninstall jennifer-python

2

Azure Web App環境のアンインストール

スタートアップ コマンドを元のコマンドに変更します。その後、Web Appを再起動すると既存のpip installの -t オプションで指定したディレクトリが削除されます。