PHP CLI アプリケーションを PHP エージェントでインストゥルメント化する場合、エージェントのインストール後に、ここで説明するいくつかの追加構成手順を実行する必要があります。 

PHP CLIアプリケーションのインストゥルメント化

PHP CLI アプリケーションをインストゥルメント化する際、以下のようにプロキシデーモンのスタートアップを提供する必要があります。

  1. エージェント/プロキシ通信に使用するプロキシ制御ディレクトリを作成します。
  2. ご使用の環境に応じて、PHP 構成ファイル php.ini または appdynamics_agent.ini で、次の設定を追加します。
    • agent.cli_enabled = 1
    • agent.auto_launch_proxy = 0
    • agent.proxy_ctrl_dir  = <proxy control directory>
      RPM インストーラを使用してエージェントをインストールする場合は、APPD_PROXY_CTRL_DIR 環境変数を使用してプロキシ制御ディレクトリを設定済みである可能性があります。詳細については、RPMによるPHPエージェントのインストールを参照してください。この環境変数はiniファイルの設定よりも優先されます。
  3. CLIでトラフィックを実行する前に、PHPエージェントをインストールしたディレクトリからプロキシを実行し、プロキシ制御ディレクトリとプロキシログディレクトリを引数として渡します。

    proxy/runProxy <proxy_control_dir> <log_dir>

    例:

    proxy/runProxy /tmp/proxy.communication /tmp/agentLogs

同じマシンに PHP CLI アプリケーションと Apache Web サーバーがある場合、設定はすべてのトラフィックを単一の Splunk AppDynamics ノードに対して報告するか、あるいは別々のノードに対して報告するかにより異なります。コントローラでモニターする Splunk AppDynamics ノードごとに、別々のプロキシが必要です。

あるノードに対してすべての CLI トラフィックを報告し、別のノードに対してすべての Web トラフィックを報告する場合は、プロキシが自動起動するように Apache を構成し(デフォルト)、手動起動したプロキシを使用するように CLI を構成します。これには、個別の .ini ファイルが必要です。1 つは agent.auto_launch_proxy1 に設定された Web PHP 用で、もう 1 つは agent.auto_launch_proxy0 に設定された PHP CLI 用です。

WebトラフィックとCLIトラフィックを同じノードに対して報告するには、同じ手動起動プロキシを使用するようApacheとCLIの両方を構成します。

Suhosinパッチを使用した長期実行CLIアプリケーション

Suhosin パッチの弊害は、PHP エージェントが長期実行 CLI アプリケーションのクリーンアップを保証しないことです。

PHPにSuhosinパッチがある場合、長時間実行されているアプリケーションではリソースが解放されない場合があります。したがって、アプリケーション自体が明示的にこれらのリソースを解放しない場合、メモリリークが発生する可能性があります。

long-running-cli 機能は、次の両方の条件が存在する環境で PHP アプリケーションを保護します。

  • Suhosin パッチを使用する PHP が Debian または Ubuntu で実行されている。Debian および Ubuntu の PHP では一般的にこのパッチが使用されています。
    この機能は、Suhosin 拡張機能(パッチとは異なります)のみを使用する PHP には必要ありません。一部の PHP では、拡張機能とパッチの両方が使用されていることに注意してください。
  • PHP エージェント API を使用し、同じプロセスで実行する複数のアンバインドされたビジネストランザクションを持つ CLI アプリケーションをインストゥルメント化している。

長期実行CLI機能の仕組み

インストール時にインストーラが、PHP に Suhosin パッチがあり、CLI が有効(agent.cli_enabled=1)であると判断すると、インストーラオプションの値によって次の結果になります。

  •  true の場合は、致命的なエラーが発生し、インストーラが終了します。オプションが設定されている場合、インストーラはSuhosinパッチを使用したPHPインストール時に長期実行CLIアプリケーションのインストゥルメント化を拒否します。
  • false の場合(デフォルト)は、インストールは続行し、長期実行 CLI プロセスにおいてメモリリークが発生する可能性を警告します。

インストーラがPHPにSuhosinパッチがないと判断した場合、インストールは続行します。Suhosinパッチがないため、長時間実行するCLIプロセスはエージェントによりサポートされます。

エージェントがインストール時に PHP に Suhosin パッチがあるかを判断できず、実行時にパッチを検出する場合、インストーラオプションを「true」に設定しておくと、長期実行のものだけでなくすべての CLI プロセスのインストゥルメント化が行われません。これによりSuhosinがパッチされたPHPが終了するのを回避できます。

CLI が有効になっていて、Suhosin パッチの検出が原因でインストーラが終了しなかった場合、Splunk AppDynamics では、enable-cli-long-running オプション(シェル スクリプト インストールの場合)または APPD_CONF_CLI_LONG_RUNNING_ENABLED 環境変数(RPM インストールの場合)をそれぞれ true に設定してエージェントをインストールすることを推奨しています。これによりパッチが実行時に検出された場合にもPHPは保護されます。

アプリケーションの CLI 部分がインストゥルメント化されない場合(インストーラが Suhosin パッチを検出したため)は、PHP ini ファイルの agent.cli_long_runningoff に設定すると、このオプションをオフにできます。また、インストーラを使用して再インストールすることもできます。