この章ではエージェント(PHP)のインストール方法について説明します。
エージェント(PHP)の対応環境
対応OS
エージェント(PHP)をインストールできるOSは次の通りです。
RedHat 5以上
CentOS 5以上
Ubuntu 7以上
エージェント(PHP)はLinuxカーネル v.2.6.18以上の環境で動作します。apache2モジュール、php-fpm、CLI、CGIで動作するPHPに対応しています。(CLI、CGIはバージョン5.2.2から対応)
対応PHPバージョン
ApacheモジュールまたはPHP-fpm、CLI、CGIで動作するPHP5.2.xから5.6.xとPHP7.0から7.4、PHP8.4をサポートします。
PHP7.4は、エージェントのバージョン5.5.2からサポートします。
PHP8.0.xは、エージェントのバージョン5.6.0からサポートします。
PHP8.1.xは、エージェントのバージョン5.6.0.4からサポートします。
PHP8.2.xは、エージェントのバージョン5.6.1.2からサポートします。
PHP8.3.xは、エージェントのバージョン5.6.2.3からサポートします。
PHP8.4RCは、エージェントのバージョン5.6.2.9からサポートします。
対応ライブラリバージョン
エージェント(PHP)は「libstdc++.so.6」および「libgcc_s.so.1(GCC_4.2.0以上)」ライブラリが必要です。PHPモジュール(libphp5.soまたはphp5-fpm)がlibstdc++.so.5以下のライブラリまたはGCC_4.2.0をサポートしないlibgcc_s.so.1ライブラリを使用する場合、エージェント(PHP)が正常動作しません。
対応OSにはlibstdc++.so.6とlibgcc_s.so.1(GCC_4.2.0サポート)がデフォルトでインストールされています。
libgcc_s.so.1のGCCバージョンは次のコマンドで確認が可能です。
$ strings /lib/libgcc_s.so.1 | grep GCC GCC_3.0 GCC_3.3 GCC_3.3.1 GCC_3.4 GCC_3.4.2 GCC_4.0.0 GCC_4.2.0
結果でGCC_4.2.0以上が存在すれば導入が可能です。
libgcc_s.so.1が存在するパスはOSおよびビット数によって異なります。
LAMPP(XAMPP)環境
LAMPPバージョンにはlibgcc_s.so.1とlibstdc++.soが含まれています。LAMPPに含まれているlibgcc_s.so.1とlibstdc++.soのバージョンが対応ライブラリバージョンに存在しない場合はエージェント(PHP)のインストールができません。
次のコマンドでLAMPPが使用するlibstdc++.soとlibgcc_so.so.1のバージョンを確認できます。
libstdc++.so
$ ls /opt/lampp/lib/libstdc++*
コマンドの実行結果にlibstdc++.so.6以上でないライブラリが存在するとエージェント(PHP)のインストールができません。もし、結果が何もない場合はOSが提供するライブラリを使用するので、対応OSならエージェント(PHP)のインストールができます。
libgcc_s.so.1
$ ls /opt/lampp/lib/libgcc_s.so.1
コマンドの実行結果がない場合はOSが提供するlibgcc_s.so.1を使用するので、対応OSならエージェント(PHP)のインストールができます。
結果がある場合は次のコマンドを実行してGCCのバージョンを確認します。
$ strings /opt/lampp/lib/libgcc_s.so.1 | grep GCC
コマンドの実行結果がGCC_4.2.0以上でない場合はエージェント(PHP)のインストールができません。
エージェント(PHP)のディレクトリとファイル説明
エージェント(PHP)パッケージを解凍すると、agent.phpディレクトリが生成されます。agent.phpディレクトリには以下のファイルが生成されます。
ディレクトリ/ファイル | 説明 |
---|---|
bin/ | 実行バイナリファイルが存在するディレクトリ |
install.php | エージェント(PHP)のインストール用のPHPスクリプトファイル |
jennifer.conf | エージェント(PHP)設定ファイル |
selinux_enable.sh | SELINUX使用時、SELINUXコンテキストを変更するためのshファイル |
centos_x.te | SELINUXコンテキストを変更する時に使用するOSバージョン別のteファイル |
master_agent.pid | マスターエージェントモードで実行されるエージェント(PHP)のプロキシープロセスのPIDを確認できます。エージェント(PHP)がマスターエージェントモードで実行される場合のみこのファイルが生成されます。(5.2.2以上) |
ipc_resource.{PID} | エージェント(PHP)が使用するsysvリソースを確認できるファイルです。エージェント(PHP)が実行される時に生成され、正常に終了すると、このファイルも削除されます。エージェント(PHP)が非正常終了した時はこのファイルがそのまま残るので、ファイルに記述されているsysリソースを手動で削除しなければなりません。(5.2.2以上) |
ファイル | 説明 |
---|---|
libJennifer5Common.so | 共通のエージェントライブラリファイル |
Jennifer5Agent | エージェント(PHP)情報をデータサーバへ送るプロセスファイル |
jennifer5-php-x.x.x-NTS.so | PHPバージョンごとに情報を収集するPHP拡張モジュール (プロセスで動作するモジュールに適用) |
jennifer5-php-x.x.x-ZTS.so | PHPバージョンごとに情報を収集するPHP拡張モジュール (スレッドで動作するモジュールに適用) |
エージェントインストール
エージェントのインストール (agent-installer実行方式)
PHPエージェントの5.4.1バージョンからはagent-installer バイナリーファイルがパッケージに追加されました。agent-installerは実行中のApache、PHP-fpmプロセスを確認し、PHPエージェントをインストールするプログラムです。
agent.phpディレクトリへ移動して、「agent-installer -i」コマンドで実行中のPHPプロセスを確認します。
#sudo ./agent-installer -i Inspect running PHP Application(mod-apache or fpm) Inspect file : "/usr/lib/apache2/modules/libphp7.so" Found PHP Thread Safety : NTS Found php.ini : /usr/local/etc/php/php.ini Found PHP Version : 7.2.16 Found 1 PHP Application * cmd: apache2, version: PHP 7.2.16, thread safety: NTS
#./agent-installer --help USAGE: agent-installer agent-installer [FLAGS] FLAGS: -d, --delete Uninstall PHP Agent -h, --help Prints help information -i, --inspect Inspect running PHP Application(mod-apache or fpm) -V, --version Prints version information
agent-installer
コマンドを実行しPHPエージェントをインストールします。
#sudo ./agent-installer Install Jennifer PHP Agent Inspect running PHP Application(mod-apache or fpm) Inspect file : "/usr/lib/apache2/modules/libphp7.so" Found PHP Thread Safety : NTS Found php.ini : /usr/local/etc/php/php.ini Found PHP Version : 7.2.16 1. cmd: apache2, version: PHP 7.2.16, thread safety: NTS Found 1 PHP Application. Select PHP Application [1,n] :
表示されるプロセス中、インストール対象のプロセスを選択します。(リスト中の番号を入力)
Found 1 PHP Application. Select PHP Application [1,n] :1 Find extension for php-7.2.16-NTS PHP extension path : /usr/local/jennifer/agent.php/bin/jennifer5-php-7.2.x-NTS.so Update /usr/local/etc/php/php.ini * [jennifer] * jenniferAgent.agent_file_root=/usr/local/jennifer/agent.php * extension=/usr/local/jennifer/agent.php/bin/jennifer5-php-7.2.x-NTS.so Install complete, edit /usr/local/jennifer/agent.php/jennifer.conf and restart apache or fpm.
PHPプロセスの確認内容は.inspect-info ファイルに記録されます。PHPインストール情報は .install-info ファイルに記録されます。
PHP5.2.xの場合
PHPバージョン5.2.xの場合、extensionパス認識の仕様上extension_dirがベースディレクトリになります。そのため、extenson_dirにJENNIFERモジュールのシンボリックリンクを生成する必要があります。
シンボリックリンクを生成するため、インストーラー実行時にextension_dirへの書き込み権限が必要です。
agent.php/jennifer.confの必要な設定を行います。
項目 | 初期値 | 説明 |
---|---|---|
server_address | 127.0.0.1 | データサーバのIPアドレス |
server_port | 5000 | データサーバのポート番号 |
domain_id | 1000 | ドメインIDで、有効範囲は1から32767までの整数 |
ApacheまたはPHP-fpmを再起動します。
再起動後、agent.php/logディレクトリにログファイルjennifer_YYYY-MM-DD.logが生成されます。エージェント(PHP)がデータサーバと接続できると、次のようなメッセージが出力されます。
2016-05-18/10:17:00 INFO--PHP Agent 5256:Send Agent Info ---------------- [App Initialized] ---------------------- Jennifer Server Address = 192.168.0.120 Jennifer Server Port = 5000 sid = 1000 inst id = 10000 Agent pid = 5256 Apache pid = 5254 MachineName = Ubuntu 12.04.4 LTS Is64BitProcess = 1 Processor Architecture = x86_64 ---------------------------------------------------------
エージェントのインストール (install.php実行方式)
上記のagent-installer実行方式以外にinstall.phpを利用してインストールする方法について説明します。
agent.phpディレクトリへ移動して、php.cliコマンドを使用してinstall.phpを実行します。この時、パラメータとしてphp構成ファイル(php.ini)のフルパスを指定します。
<Ubuntu Linux> $ php install.php /etc/php5/apache2/php.ini <RedHat, Cent OS Linux> $ php install.php /etc/php.ini
エージェント(PHP)がインストールされているディレクトリのフルパスを入力します。コマンドを実行した現在のディレクトリを指定する場合、'./'を入力します。
Start Jennifer PHP Agent Installer Enter Jennifer PHP Agent install path :/home/jennifer/agent.php Jennifer install path :/home/jennifer/agent.php
PHPのバージョンとエージェント(PHP)のバージョンを確認し、'yes'を入力します。
-------------------------------------------------------- Current Directory :/home/jennifer/agent.php Jennifer Agent Install Path :/home/jennifer/agent.php PHP Version :5.3.10-1ubuntu3.10 Thread Safety : disable Arch : x86_64 Jennifer PHP Agent extension file name : jennifer5-php-5.3.x-NTS.so PHP Configuration file :/etc/php5/apache2/php.ini -------------------------------------------------------- Do you want to continue?(yes or no) : yes Write php.ini for Jennifer PHP Agent extension=/home/jennifer/agent.php/bin/jennifer5-php-5.3.x-NTS.so jenniferAgent.agent_file_root=/home/jennifer/agent.php Check a Jennifer Agent executable file :/home/jennifer/agent.php/bin/Jennifer5Agent -- exists Check a Jennifer Agent shared library file :/home/jennifer/agent.php/bin/Jennifer5Common.so -- exists Check a Jennifer Agent PHP extension file :/home/jennifer/agent.php/bin/jennifer5-php-5.3.x-NTS.so -- exists Check a Jennifer Agenet configuration file :/home/jennifer/agent.php/jennifer.conf -- exists Installation successfully complete. 1.Open your jennifer.conf in jennifer install path, and specify a server address, sid, host_id and inst_id. 2.Restart Apache Server root@NominT:/home/jennifer/agent.php#
agent.php/jennifer.confに必要な設定を行います。
項目 | 初期値 | 説明 |
---|---|---|
server_address | 127.0.0.1 | データサーバのIPアドレス |
server_port | 5000 | データサーバのポート番号 |
domain_id | 1000 | ドメインIDで、1から32767までの整数 |
ApacheまたはPHP-fpmを再起動します。
再起動後、agent.php/logディレクトリにログファイルjennifer_YYYY-MM-DD.logが生成されます。エージェント(PHP)がデータサーバと接続できると、次のようなメッセージが出力されます。
2016-05-18/10:17:00 INFO--PHP Agent 5256:Send Agent Info ---------------- [App Initialized] ---------------------- Jennifer Server Address = 192.168.0.120 Jennifer Server Port = 5000 sid = 1000 inst id = 10000 Agent pid = 5256 Apache pid = 5254 MachineName = Ubuntu 12.04.4 LTS Is64BitProcess = 1 Processor Architecture = x86_64 ---------------------------------------------------------
エージェントの手動インストール
agent-installerやInstall.phpスクリプトでインストールができない場合は次のように手動でインストールできます。
agent.phpディレクトリに移動します。
$ cd /home/jennifer/agent.php
php -vコマンドでサポートするPHPのバージョンを確認します。
$ php -v PHP 5.4.5 (cli) (built:Apr 3 2015 16:08:35) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
PHPのThread Safety値を確認します。
$ php -i | grep Thread Thread Safety => disabled
該当PHPバージョンに対するPHP extensionファイルの存在の有無を確認します。PHP extensionファイルはagent.php/binディレクトリにあり、jennifer5-php-{PHP_Major_Version}. {PHP_Minor_Version}.x-{NTS or ZTS}.soの形式のファイル名に従います。Thread Safety値がdisabledの場合はNTSをenabledの場合はZTSが必要です。
$ ls bin/jennifer5-php-5.4.x-NTS.so bin/jennifer5-php-5.4.x-NTS.so
エージェント(PHP)ホームディレクトリのフルパスとエージェントextensionファイルのフルパスをphp.iniファイルに追記します。
extension=/home/jennifer/agent.php/bin/jennifer5-php-5.4.x-NTS.so jenniferAgent.agent_file_root=/home/jennifer/agent.php
jennifer.confに必要な設定を行います。
項目 | 初期値 | 説明 |
---|---|---|
server_address | 127.0.0.1 | データサーバのIPアドレス |
server_port | 5000 | データサーバのポート番号 |
domain_id | 1000 | ドメインIDで、1から32767までの整数 |
inst_id | -1 | インスタントエージェントIDが'-1'の場合、IDは自動的にサーバから割り当てられます。1から32767までの整数です。 |
log_dir | ./logs | ログファイルの出力先の設定で、エージェント設定ディレクトリ配下のlogsディレクトリがデフォルトの出力先 |
log_max_age | 0 | ログファイルの保存期間で保存する日数(例えば、30の場合30日間)を設定します。0の場合は永久保存です。 |
ApacheまたはPHP-fpmを再起動します。
再起動後、agent.php/logディレクトリにログファイルjennifer_YYYY-MM-DD.logが生成されます。エージェント(PHP)がデータサーバと接続できると、次のようなメッセージが出力されます。
2016-05-18/10:17:00 INFO--PHP Agent 5256:Send Agent Info ---------------- [App Initialized] ---------------------- Jennifer Server Address = 192.168.0.120 Jennifer Server Port = 5000 sid = 1000 inst id = 210 Agent pid = 5256 Apache pid = 5254 MachineName = Ubuntu 12.04.4 LTS Is64BitProcess = 1 Processor Architecture = x86_64 ---------------------------------------------------------
CLI、CGIで動作するPHP環境へエージェント(PHP)インストール(5.2.2以上)
php.iniにjenniferAgent.enable_cgi_cliオプションの設定
CLIやCGIで動作するPHP環境でJENNIFERエージェントが動作するためには、php.iniに[jenniferAgent.enable_cgi_cli]オプションを”1”に設定する必要があります。デフォルト値は”0”です。
jenniferAgent.enable_cgi_cli=1
PHPマスターエージェント
CLI、CGIで動作する環境へエージェントをインストールするにはJENNIFERが提供するマスターエージェントプロセスを別途実行する必要があります。
Apacheモジュール、PHP-FPMで動作するエージェント(PHP)はマスターエージェントの実行が不要です。
Apache-PHPとPHP-CLIへ同時にJENNIFERエージェントをインストールする場合は、Apache-PHPとPHP-CLIが使用するphp.iniファイルを分離する必要があります。(同一php.iniファイルの両方使用はできない)
※php.iniファイルの分離方法については、以下のURLをご参照してください。
http://php.net/manual/ja/configuration.file.php
PHPマスターエージェントの実行
エージェント(PHP)のインストールディレクトリが/jennifer/agent.phpの場合、次のように実行します。
/jennifer/agent.php/bin/./Jennifer5Agent -k start 2017-03-24/14:12:38 INFO-- 7254: Run Jennifer5Agent
マスターエージェントが正常に実行していると、/jennifer/agent.php/logsで起動ログおよび/jennifer/agent.php/master_agent.pidファイルの確認ができます。その後CLI、CGIで動作するPHPプロセスはデータを収集してマスターエージェントへ転送します。
PHPマスターエージェントの終了
エージェント(PHP)のインストールディレクトリが/jennifer/agent.phpの場合、次のように実行します。
/jennifer/agent.php/bin/./Jennifer5Agent -k stop 2017-03-24/14:15:11 INFO-- 7310: Try to kill existing Master Agent
マスターエージェントが正常に終了すると、/jennifer/agent.php/logsで終了ログおよび/jennifer/agent.php/master_agent.pidファイルの削除が確認できます。
PHPマスターエージェントの再起動
エージェント(PHP)のインストールディレクトリが/jennifer/agent.phpの場合、次のように実行します。
/jennifer/agent.php/bin/./Jennifer5Agent -k restart 2017-03-24/14:16:46 INFO-- 7345: Try to kill existing Master Agent 2017-03-24/14:16:48 INFO-- 7346: Run Jennifer5Agent
マスターエージェントが再起動されると、/jennifer/agent.php/logsで終了と起動ログが確認できます。
Apache-CGIで動作するPHP環境の注意点
Apacheで実行したphp-cgiプロセスがエージェント(PHP)のインストールディレクトリへアクセスできるように権限を設定する必要があります。Apacheの設定(httpd.conf)に次のような設定を追記します。
<Directory "/home/jennifer/agent.php"> Require all granted </Directory>
また、Apache起動ユーザのインストールディレクトリ(/home/jennifer/agent.php)へ読み取りと書き込み権限の追加が必要です。
chmod 755 /home/jennifer chmod 755 /home/jennifer/agent.php
php-cgiプロセスがエージェント(PHP)インストールディレクトリへアクセス権限がない場合、Apacheのerror.logに次のようなログが出力されます。
PHP Warning: PHP Startup: Unable to load dynamic library '/home/jennifer/agent.php/bin/jennifer5-php-5.3.x-NTS.so' : cannot open shared object file: Permission denied in Unknown on line 0
コンテナ(Docker)にインストールする場合
インストールの流れ
1
モニタリング対象コンテナのDockerfileがある作業ディレクトリにJENNIFERエージェントのパッケージを用意します。
└── php_agent_install ├── Dockerfile └── jennifer-agent-php-x.x.x.x.zip
2
使用するエージェント設定ファイルの内容を次のように記述します。
server_address = 192.168.9.37 server_port = 5000 # default log_dir "{agent_home}/logs" # log_dir = {agent_home}/logs # log_file = # log_level : 1(info), 2(debug), 3(trace) log_level = 1 log_encoding = UTF-8 log_rotation = true # log_max_age : Working when log_rotation is activated. Valid ragne is (1-365) # log_max_age = 0 # domain_id : Valid range is (1-32767) domain_id = 1000
server_address、server_port、domain_idに適切な値を設定します。
3
作成したエージェント設定ファイルを作業ディレクトリへコピーします。
└── workspace ├── Dockerfile ├── jennifer-agent-php-x.x.x.x.zip └── jennifer.conf
4
php.iniファイルを修正します。
[jennifer] jenniferAgent.agent_file_root=/opt/agent.php # configure jennifer extension extension=/opt/agent.php/bin/jennifer5-php-8.0.x-NTS.so
5
作成したphp.iniファイルを作業ディレクトリにコピーします。
└── php_agent_install ├── Dockerfile ├── jennifer-agent-php-x.x.x.x.zip ├── php.ini └── jennifer.conf
6
次のようにDockerfileを編集して、JENNIFERエージェントをインストールします。
エージェントのパッケージをコンテナ内部へコピーし、/opt/agent.phpディレクトリへ解凍します。
jennifer.confファイルを/opt/agent.php/confへコピーします。
php.iniファイルを設定ディレクトリへコピーします。
FROM php:8.0-apache # Apache setting ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_RUN_DIR /var/run/apache2 ENV APACHE_PID_FILE /var/run/apache2/apache2.pid ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 # JENNIFER Agent setting RUN apt update RUN apt install unzip -y ENV JENNIFER_AGENT_VERSION=5.6.0 COPY jennifer-agent-php-64bit-${JENNIFER_AGENT_VERSION}.zip /opt RUN cd /opt && unzip jennifer-agent-php-64bit-${JENNIFER_AGENT_VERSION}.zip COPY jennifer.conf /opt/agent.php/jennifer.conf COPY php.ini /usr/local/etc/php/php.ini # ... CMD ["apache2"]
JENNIFER_AGENT_VERSIONにはダウンロードしたJENNIFERパッケージのバージョンを設定します。
7
Dockerfileの構成が終了すると、次のようにコンテナをビルドして構成した内容が反映されます。
docker build -t jennifer-php .
エージェント(PHP)のアンインストール
PHP構成ファイル(php.ini)のJENNIFER関連の下記の設定を削除し、ApacheまたはPHP-fgmを再起動します。
;extension=/home/jennifer/agent.php/jennifer5-php-5.3.x-NTS.so ;jenniferAgent.agent_file_root=/usr/local/jennifer5-debug/
RedHat系のLinuxで、SELINUX動作するときの方法
RedHat系Linux(RedHat、CentOS)でSELINUXが動作中(enabled)の場合はエージェント(PHP)が正常に動作しません。その場合、次の方法の中からどちらかを選択して適用します。
SELINUXをpermissive方式に変更
次のコマンドでSELINUXをpermissiveモードにします。
$ setenforce 0
SELINUXコンテキストを変更
この方法を使用するためにはエージェント(PHP)のインストールパスを/home配下にする必要があります。
次の手順でSELINUXのコンテキストを変更します。
$ yum install policycoreutils-python
policy utilityをインストールします。インストール済の場合はスキップします。
$ cd /home/jennifer/agent.php $ ./selinux_enable.sh centos_#.te
OSバージョンに対応するteファイルで実行します。例えば、CentOS6やRedHat6の場合はcentos_6.teで実行します。
トラブルシューティング
JENNIFERが提供するteファイルでSELINUXコンテキストを変更しても、OSの可変的な環境設定によってエージェント(PHP)が正常に動作しないことがあります。その場合は次の手順でSELINUXのコンテキストを変更します。
$ grep httpd_t /var/log/audit/audit.log | audit2allow -m jennifer_2 > jennifer_2.te $ ./selinux_enable.sh jennifer_2.te
PHP5.2.x環境の設定
PHP 5.2.x バージョンの場合、php.iniのextensionオプションにフルパスで指定したJennifer5Agent Extension soファイルのロードができないことがあります。この場合は次のようにphp.iniのextension_dirにシンボリックリンクファイルを生成してからphp.iniファイルを修正します。
phpのextension_dirパス確認
php -i | grep extension_dir
extension_dirへ遷移後、Symbolicファイルを生成
cd $PATH_OF_PHP_EXTENSION_DIR ln -s $JENNIER_PATH/agent.php/bin/jennifer5-php-5.2.x-NTS.so jennifer5-php-5.2.x-NTS.so ln -s $JENNIER_PATH/agent.php/bin/Jennifer5Agent Jennifer5Agent ln -s $JENNIER_PATH/agent.php/bin/libJennifer5Common.so libJennifer5Common.so
php.iniに設定されているJennifer Agent Extensionのパスを次のように修正
extension=jennifer5-php-5.2.x-NTS.so