PHP CLI アプリケーションを AppDynamics 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 サーバーがある場合、設定はすべてのトラフィックを単一のAppDynamicsノードに対して報告するか、あるいは別々のノードに対して報告するかにより異なります。コントローラで監視するAppDynamicsノードごとに、別々のプロキシが必要です。

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

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

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