PHP トレースの有効化と設定

デフォルトでは、PHP トレースはエージェント設定ファイルで有効になっています。 PHP トレースを有効にすると、PHP センサーは自動的に PHP Tracer (Instana PHP Tracing extension) を PHP ランタイムにインストールします。

注意: このドキュメントでは、 PHP TracerPHP Tracing extension という用語を同じ意味で使用しています。

要件

PHP センサーは、検出された PHP ランタイムが JSON 拡張をサポートしている場合にのみトレースを有効にします。 PHP ランタイムで以下の拡張モジュールが検出された場合、PHP Tracer のインストールは自動的に無効になります:

  • SourceGuardian
  • New Relic
  • Dynatrace
  • Datadog

PHP ランタイムで ionCube Loader 拡張モジュールが検出された場合、 PHP Tracer は PHP ユーザーランドのトレースを無効にしてインストールされます。

PHPトレースプロセス

エージェントの設定ファイルで PHP トレースが有効になっている場合、PHP Tracing エクステンションのインストールと設定は PHP センサーによって自動的に行われます:

  1. PHP センサーは PHP Tracing 拡張モジュールをダウンロードし、PHP ランタイムの INI 設定で以下のように有効にします:

    • PHP ランタイムが INI ファイルを追加するための別のディレクトリで構成されている場合、 PHP センサーは PHP Tracing 拡張モジュールの INI 設定を含む zzz-instana.ini ファイルをこのディレクトリに配置します。
    • そうでない場合は、PHP センサーは INI 設定をメインの php.ini ファイルに追加することで PHP Tracer を設定します。

    zzz-instana.ini を変更しないでください。PHP センサーは、Instana エージェント configuration.yaml ファイルの設定に基づいて、インストールのたびに上書きされるためです。

  2. PHP センサーは、PHP Tracing 拡張モジュールをメモリにロードするために PHP 環境を優雅に再起動しようとします。

  3. PHP ランタイムの再起動に成功すると、PHP Tracing 拡張モジュールは PHP ランタイムのトレース収集を開始します。

  4. PHP ランタイムの SAPI タイプが原因で自動再起動がうまくいかない場合は、 PHP を手動で再起動して PHP Tracing 拡張モジュールをメモリに読み込ませる必要があります。 PHP ランタイムの再起動の自動化についての詳細は自動再起動 を参照ください。

  5. PHP センサーは、PHP Tracing 拡張モジュールの INI 設定に対して妥当なデフォルト値を生成します。 しかし、非常に特殊なニーズに対応するために、これらの設定を調整することができる。 詳細については、 高度なカスタマイズを参照してください。

PHP Tracing 拡張モジュールの自動インストールで問題が発生した場合は、 手動でインストールすることもできます。 PHP Tracing extension の手動インストール を参照ください。

高度なカスタマイズ

PHP センサーは zzz-instana.ini を頻繁に上書きするので、この INI ファイルは変更しないでください。 代わりに、 zzz-instana.ini のデフォルトの Instana INI 設定を上書きする独自のカスタム INI ファイルを追加できます。 PHPはINIファイルを英数字順に読み込み、最後に現れた設定のインスタンスが有効な値となります。 カスタムINIファイルのINI設定が zzz-instana.ini のINI設定より優先されるように、カスタムINIファイルの名前を zzzzz-instana-extras.ini (接頭辞 zzzzz- )にし、 zzz-instana.ini後にロードされるようにします。 コンテナ化されたシナリオでは、カスタムINIファイルを動的にマウントするか、イメージの一部にすることができる。

以下の設定は、すべてのバージョンの PHP で利用可能です:

  • instana.batch_threshold_us: スパンのバッチ処理が実行される長さと距離のしきい値。 デフォルト値は 10000 です。
  • instana.backtrace_limit: 記録される呼び出しスタックの深さを制御します。 デフォルトまたは上限値は25エントリである。
  • instana.disabled_instrumentation (非推奨):無効にするインストルメンテーションのビットマスクを指定します。 デフォルト値は0(なし)。 詳細は、「 インストゥルメンテーションを無効にする 」の項を参照。 このINI設定は廃止され、 スパン無効化機能に取って代わられた。
  • instana.disable_userland_tracing:フレームワークのような非ネイティブのPHP拡張やPHPユーザーランドのコードのトレースをすべて無効にします。 デフォルト値は0(オフ)。
  • instana.enable_cli:CLI SAPIのトレースを有効または無効にする。 1 = オン。 0 = オフ。 デフォルト値は0(オフ)。
  • instana.log_level:ログを記録するレベル:0 = off、1 = ERROR、2 = WARN、3 = INFO、4 = DEBUG。 デフォルト値は0(オフ)。
  • instana.segfault_error_log:PHPのエラーログへのバックトレースを捕捉または回避する。 デフォルト値は0(オフ)。
  • instana.span_chunk_size:エージェントに送信する前にPHPのメモリに保持するスパンの数。 この数値はバッチングに直接影響する。 例えば、1つのチャンクは効果的にバッチングを無効にする。

以下の設定は PHP 5 専用です:

  • instana.socket:Instana PHP センサーの TCP ソケットのアドレス。 ソケットのアドレスは、インストール時に決定します。デフォルトは tcp://127.0.0.1:16816 です。

以下の設定は、 PHP 7.0以降にのみ適用されます:

  • instana.buffer_hard_limit:エージェントが応答しなくなった場合に、バッファに保持されるスパンの最大数。 最も古いスパンから始まるスパンは、バッファがこの制限内に収まるまでドロップされる。 デフォルト値は 1000 です。
  • instana.buffer_maximum_delay_ms:スパンバッファのクリアランスの最大間隔。 デフォルト値は 1000 ミリ秒です。
  • instana.buffer_soft_limit:スパン・バッファがクリアされるまでにバッファリングされるスパンの最大数。 デフォルト値は 500 です。

以下の設定は PHP 8.1 以降専用です:

  • instana.span_filter_config_file:トレースを無効にする設定を含むYAMLファイルの絶対パスを指定する。 PHPセンサーはこの設定を更新し、エージェント configuration.yaml ファイルを通してスパン無効化を有効にする。 デフォルト値は<System_Temp>/instana-php/instana_span_filter_config.yamlです。 この設定の詳細については、 追加設定のセクションを参照してください。

以下の表は、PHP 拡張モジュールを設定するための環境変数の完全なリストです:

環境変数 デフォルト値
INSTANA_AGENT_HOST 127.0.0.1
INSTANA_AGENT_PORT 42699
INSTANA_SERVICE_NAME
INSTANA_DEBUG OFF
INSTANA_STACK_TRACE_LENGTH 25
INSTANA_EXTRA_HTTP_HEADERS なし
INSTANA_SECRETS password, key, secret
INSTANA_LOG_LEVEL なし

これらの環境変数の存在は、 zzz-instana.ini の設定よりも優先される。 詳細は環境変数を参照。

これらの設定についてヘルプが必要な場合は、 IBM サポートにお問い合わせください。

カスタム HTTP ヘッダーのキャプチャ

PHP Tracer は、カスタムな HTTP ヘッダをエントリースパンとエグジットスパンでキャプチャすることができます。 これらのヘッダーをキャプチャするには、以下のいずれかの設定でヘッダーのリストを指定する:

  • PHP INI 設定:

    instana.extra_http_headers=HEADER1,HEADER2

  • 環境変数の設定:

    INSTANA_EXTRA_HTTP_HEADERS=HEADER1;HEADER2

あるいは、エージェント configuration.yaml ファイルにヘッダリストを設定することで、追跡されたすべてのリクエストまたはレスポンスの HTTP ヘッダをキャプチャすることができます。 詳細については、 カスタム HTTP ヘッダーの取得を参照してください

PHP Tracer では、ヘッダのキーと値の両方にスペースを使用します。

スパンの無効化

PHP Tracer は、特定のスパンタイプ (フレームワーク、ライブラリ、インストルメンテーション) やライブラリグループ全体 (スパンカテゴリ) のトレースやスパンの無効化をサポートしています。 このスパン無効化機能により、アプリケーションのニーズに応じてトレースをカスタマイズすることができ、アプリケーションに不可欠なトレースのみをレポートすることで、ネットワークコストを削減することができます。

トレースを無効にする設定を行うには、以下のいずれかの方法を使用します:

注意: この機能を初めて有効にする場合、あるいは空の YAML 設定から有効にする場合は、 設定を更新した後で PHP ランタイムを再起動するようにしてください。 一度再起動すれば、今後コンフィギュレーションを変更しても、再度再起動することなく適用される。

Apache、IISサーバーでスパンの無効化を設定するには、追加の手順が必要です。 詳細については、 追加設定を参照してください。 Instana がスパンの無効化に優先順位を付ける方法の詳細については、 スパンの無効化に関する設定の優先順位を参照してください。

環境変数による設定

環境変数を通してトレースを無効にするには、環境変数 INSTANA_CONFIG_PATH を設定します。

たとえば、すべてのデータベース呼び出し ( MongoDB を除く) とすべてのロギングフレームワークのトレースを無効にするには、次のコードを別の YAML ファイルにコピーします:

tracing:
  disable:
    - databases: true
    - mongodb: false
    - logging: true
 

環境変数 INSTANA_CONFIG_PATH を次のようにコンテンツを配置するYAMLファイルの絶対パスに設定します:

INSTANA_CONFIG_PATH=<your YAML file>
 
注意: 設定ファイルの内容は、リアルタイムで変更を適用するために監視されるため、 ファイル監視APIによる不要な活動を減らし、PHPプロセスによる高いCPU消費を 引き起こす可能性のある、専用のディレクトリの下にファイルを置きます。

Instanaエージェント設定による構成

Instana エージェント設定でトレースを無効にするには、エージェント configuration.yaml ファイルの com.instana.tracing.disable セクションでトレースを無効にします。

すべてのデータベース呼び出し( Redis を除く)とすべてのロギングフレームワークのトレースを無効にするには、次の例に示すように、エージェント configuration.yaml ファイルの com.instana.tracing セクションを更新します:

com.instana.tracing:
  disable:
    - databases: true
    - redis: false
    - logging: true
 

設定のカスタマイズの詳細については、 トレースを無効にするを参照してください。

あるカテゴリのトレースを無効にすると、そのカテゴリの下にあるすべてのライブラリのスパン生成が無効になります。 PHP Tracer がサポートするカテゴリの一覧は以下のとおりです:

スパンを無効にする設定の優先順位

スパン無効化ルールは、以下の優先順位で適用される:

  1. 環境変数を介して渡されるコンフィギュレーション・ファイルのルールを無効にする。 INSTANA_CONFIG_PATH 環境変数を通して渡されます。
  2. instana.disabled_instrumentation iniの設定でスパン無効化。
  3. エージェント configuration.yaml ファイルからルールを無効にする。

この優先順位はフィーチャーレベルで強制される。 PHPランタイムがある機能で複数の設定を検出した場合、最も優先順位の高い設定からスパン無効化ルールを適用します。 例えば、PHPランタイムが以下のようなスパン無効化ルールを環境変数 INSTANA_CONFIG_PATH 環境変数

com.instana.tracing:
  disable:
    - logging: true
    - databases: true
    - redis: false
 

そして、同じランタイムには次のようなini設定がある:

instana.disabled_instrumentation=24 ; disables redis (16) and curl (8) instrumentations
 

この設定例では、PHP Tracer は以下のように動作します:

  • すべてのロギング・ライブラリのトレースが無効になる。
  • Redis を除くすべてのデータベースのトレースは無効になっています。

環境変数が優先されるため、 instana.disabled_instrumentation iniの設定は無視される。 INSTANA_CONFIG_PATH 環境変数が優先される。 したがって、環境変数で指定されたコンフィギュレーション・ファイルによって無効化されていないインスツルメンテーションはすべて有効化される。 INSTANA_CONFIG_PATH 環境変数で指定されたコンフィギュレーション・ファイルによって無効化されていないインスツルメンテーションはすべて有効化される。

スパン無効化ルールが、環境変数とエージェント ファイルの両方を通して設定されている場合、 ファイルのルールは無視される。 INSTANA_CONFIG_PATH スパン無効化ルールが環境変数とエージェント configuration.yaml ファイルの両方を通して設定されている場合、 configuration.yaml ファイルのルールは無視されます。

追加の構成

PHPセンサーは、エージェント configuration.yaml ファイルの変更を検知し、セクション com.instana.tracing.disable のコピーを、 <System Temp>/instana-php/instana_span_filer_config.yaml にある別のファイルに作成する。 生成されたファイルの絶対パスは instana.span_filter_config_file ini の設定に設定され、 PHP Tracer は PHP ランタイムを再起動することなく configuration.yaml ファイルへの変更を検知して適用します。 したがって、エージェント configuration.yaml ファイルを使用してルールの設定や無効化を行う場合、PHP ランタイムはシステムの temp フォルダにアクセスできる必要があります。

以下の節では、PHPランタイムがシステムのtempフォルダに十分にアクセスできるようにするために、環境によっては必要となる追加の手順を説明します。

Apache サーバー

Apache Linux -ベースのOS上のサーバーは、システムのtempフォルダーを使うのではなく、隔離されたtempフォルダーを持つように設定されているかもしれない。 PHP Tracer がシステムの temp フォルダにある設定ファイルにアクセスするには、 以下の手順で PrivateTmpfalse に設定されていることを確認します:

  1. 以下のコマンドを実行して、 Systemd unit ファイルを編集する:

    sudo systemctl edit apache2.service
     
  2. Serviceセクションの PrivateTmp プロパティを追加または更新する:

    [Service]
    PrivateTmp=false
     
  3. Apache サーバーを再起動して、変更を適用する。

PrivateTmp の更新を避けるために、 環境変数でスパン無効化ルールを設定することができます。

IIS サーバー

IISワーカープロセスがWindowsの一時フォルダにアクセスできないことがある。 このtempフォルダへの不十分なアクセスは、ワーカープロセスの実行に使用されるアプリケーションプールのIDに、tempフォルダへの十分な読み取り権限または書き込み権限がないことが原因である。 このアクセスの問題を解決するには、以下の手順を実行してください:

  1. PowerShell ターミナルで以下のコマンドを実行して、アプリケーション・プールの ID を確認する:

    & $env:windir\system32\inetsrv\appcmd.exe list apppool <your AppPool> /text:processModel.identityType
     
  2. ID が ApplicationPoolIdentity でない場合は、以下のコマンドを実行して ID を更新する:

    & $env:windir\system32\inetsrv\appcmd.exe set AppPool <your AppPool> -processModel.identityType:ApplicationPoolIdentity
     
  3. アプリケーション・プールを再起動して、変更を適用する:

    & $env:windir\system32\inetsrv\appcmd.exe recycle apppool <your AppPool>
     

    IIS サーバーは、 ApplicationPoolIdentity という ID で実行されているアプリケーション・プールを検出し、アプリケーション・プールの名前を持つ仮想ユーザーを作成します。

  4. PHP ランタイム、つまり IIS ワーカープロセスに <SYSTEM_TEMP> ディレクトリへの読み込み権限を与えるには、 以下のコマンドを使用します:

    
    icacls "<SYSTEM_TEMP>" /grant "IIS APPPOOL\<your AppPool>:(OI)(CI)R" /T /C
     

計装を無効にする

PHP の ini 設定から特定のライブラリあるいはライブラリ群のインスツルメンテーションを無効にするには、 instana.disabled_instrumentation を使用します。 トレースを無効にしたいライブラリのビットマスク値を取る。 ライブラリーのビットマスク値を取得するには、「 Instrumented libraries and frameworks」 セクションの Instrumentation flag 列を参照する。

複数のライブラリのインスツルメンテーションを無効にするには、それぞれの Instrumentation flag 。 例えば、 MongoDB 呼び出し(instrumentation フラグ: 32 )と Redis データストア呼び出し(instrumentation フラグ: 16 )のトレースを無効にするには、ini 設定ファイルに以下の行を追加します:

instana.disabled_instrumentation=48 ; 32 + 16 = 48
 

PHP Tracer のスパン生成をよりうまくコントロールするには、 instana.disabled_instrumentation 設定の代わりに Disabling spans 機能を使用します。

自動再始動

PHP Tracer は PHP ランタイムにロードされる PHP 拡張モジュールなので、 PHP トレースを有効あるいは無効にしたり、 インストールされている PHP Tracing 拡張モジュールのバージョンを変更したりするには、 PHP ランタイムを再起動する必要があります。

PHP センサーは、 Apache と PHP-FPM のランタイムを自動的かつ優雅に再起動することができます。 しかし、以下のようなPHPのランタイムシナリオでは手動での再起動が必要です:

  • CGI SAPI を使用した PHP ランタイム:PHP ランタイムを手動で再起動する必要があります。
  • あらかじめフォークされたワーカープロセスを持つ PHP ランタイム:PHP マスタープロセスを手動で再起動する必要があります。

tracing.notificationScript の通知スクリプトを指定することで、 手動での再起動を自動化したり、PHP センサーが PHP ランタイムを再起動する方法を変更したりすることができます。 com.instana.plugin.php configuration.yaml セクションで指定します。

この設定は、実行可能なシェルスクリプト( Linux )または PowerShell スクリプト(Windows)への絶対パスを取ります。 PHP ランタイムの再起動が必要な場合、PHP センサーはデフォルトの再起動コマンドを使う代わりに tracing.notificationScript で定義されたスクリプトを実行します。

通知スクリプトの設計に関する考慮事項

通知スクリプトはPHPの実行時間ごとに一度だけ実行されるため、同じPHP実行ファイルを実行しているすべてのプロセスでスクリプトが起動されるとは限りません。 PHP Tracing 拡張モジュールをメモリに読み込むには、スクリプトが PHP 実行ファイルから実行されているすべてのプロセスを再起動するようにしなければなりません。

このスクリプトが設定され、正常に実行されると、自動再起動のデフォルトメカニズムを上書きする。 デフォルトの仕組みとは異なり、このスクリプトはどの SAPI に対しても実行されます。 そのため、PHP-CGI 環境での再起動の自動化に使用できます。 自動再起動を完全に無効にしたい場合は、空のスクリプトを設定する。

PHP センサーは、スクリプト実行のために以下の環境変数を設定する:

INSTANA_EXT_VERSION_OLD = the version of the tracing extension currently in memory
INSTANA_EXT_VERSION_NEW = the version of the tracing extension after a restart
INSTANA_PID_HOST = the PID of the process on the host, e.g. your Apache, PHP-FPM or PHP-CGI
INSTANA_PID_CONTAINER = the PID the host process has in a container (if applicable)
INSTANA_CONTAINER = the ID/name of the container the process is running in (if applicable)
 

次の例は、拡張機能の変更をファイルに記録し、 Apache を再起動するスクリプトです:

#!/bin/bash
echo "Found new tracing extension." >> php_update.log;
echo "INSTANA_EXT_VERSION_OLD=$INSTANA_EXT_VERSION_OLD" >> php_update.log;
echo "INSTANA_EXT_VERSION_NEW=$INSTANA_EXT_VERSION_NEW" >> php_update.log;
echo "INSTANA_PID_HOST=$INSTANA_PID_HOST" >> php_update.log;
echo "INSTANA_PID_CONTAINER=$INSTANA_PID_CONTAINER" >> php_update.log;
echo "INSTANA_CONTAINER=$INSTANA_CONTAINER" >> php_update.log;
echo "restarting apache" >> php_update.log;
apachectl -k graceful >> php_update.log;
 

Apache をコンテナ内で実行する場合は、サンプル・スクリプトの最後の行を次の行に置き換える:

docker exec $INSTANA_CONTAINER apachectl -k graceful;
 

PHP-FPMの場合は、次の例のように SIGUSR2 を送信することで 優雅に再起動させることができる:

docker exec $INSTANA_CONTAINER kill -USR2 $INSTANA_PID_CONTAINER;
 

グレースフル・リスタートは、マスタープロセスを再起動せずに PHP 拡張モジュールをメモリにロードします。 そのため、このロードは、コンテナ内でプロセスがPID 1として実行されている場合でも機能する。 再起動の方法が使えない、あるいは使いたくない場合は、実行中のコンテナ・インスタンスのスナップショットを作成して停止し、新しいインスタンスを簡単に開くこともできる:

#!/bin/bash
IMAGE_HASH=$(docker inspect --format='{{.Config.Image}}' $INSTANA_CONTAINER)
IMAGE_NAME=$(docker images | grep $IMAGE_HASH | awk '{print $1}')
IMAGE_TAG="instana-php-$INSTANA_EXT_VERSION_NEW"
docker commit $INSTANA_CONTAINER $IMAGE_NAME:$IMAGE_TAG &&
docker stop $INSTANA_CONTAINER &&
docker run -d --rm $IMAGE_NAME:$IMAGE_TAG
 

このアクションは、スクリプトに渡されたコンテナIDを使用して、コンテナイメージの名前を検索します。 そして、現在実行中のコンテナを、新しい PHP 拡張モジュールのバージョン番号が付与された新しいイメージにコミットします。 その後、元のコンテナを停止し、新しくタグ付けされた画像からコンテナを開始する。 このアクションはPHPセンサーのインストールルーチンを再度トリガーしますが、拡張機能はすでにインストールされているため、通知スクリプトを再度トリガーすることはありません。

これらの例は、 Docker をコンテナ・エンジンとして使用していることを前提としている。 しかし、トリガーされたシェルスクリプトは完全にあなたのコントロール下にあるので、あなたのセットアップに自動再起動を機能させるために必要なロジックを置くことができる。

PHPのトレースを無効にする

PHP トレースを無効にするには、以下の手順を実行します:

  1. エージェントの com.instana.plugin.php configuration.yaml セクションで、 tracing.enabledfalse に設定する。 エージェント configuration.yaml ファイルに com.instana.plugin.php セクションがない場合は、以下のように追加する必要がある:

    com.instana.plugin.php:
      tracing:
        enabled: false
     
    注意 com.instana.plugin.php セクションをコメントしても PHP のトレースは無効になりません。

    PHP センサーは自動的に PHP INI 設定から PHP Tracing 拡張モジュールの INI 設定を削除し、PHP ランタイムを優雅に再起動させて PHP Tracing 拡張モジュールをメモリから削除しようとします。 PHP ランタイムが正常に再起動した後、PHP トレースは完全に無効になります。

  2. PHP センサーが自動的に PHP ランタイムを再起動できない場合は、手動で PHP ランタイムを再起動し、PHP トレースを完全に無効にしてください。 PHP センサーが PHP ランタイムを自動的に再起動できるかどうかは、SAPI の種類に依存します。 この動作を制御し、PHP Tracer をメモリから削除するために必要な PHP ランタイムの再起動を自動化することができます。 詳しくは自動再起動を参照。

    注意: PHP Tracing 拡張モジュールをメモリから削除するために PHP ランタイムを手動で再起動する必要があるかどうかは、 自動再起動を読んで慎重に検討する必要があります。
  3. PHP の INI 設定で有効になっている拡張モジュールの一覧に instana がないことを確認し、 PHP のランタイムで PHP Tracing 拡張モジュールが有効になっていないことを確認します。 有効な PHP 拡張モジュールの一覧を取得するには、PHP ランタイムが使用する PHP バイナリを -m オプションを指定して実行します。 次の例は、 php-fpm バイナリを使用して有効な PHP 拡張モジュールを一覧表示するものです:

    $> php-fpm -m
    [PHP Modules]
    curl
    json
    PDO
    sqlite3
    Zend OPcache
    zlib
    
    [Zend Modules]
    Zend OPcache
     
    注意: PHP Tracing 拡張モジュールが mod_php ランタイムの Apache で無効になっているかどうかを確認するには、ウェブサーバーのドキュメントルートに <?php phpinfo(); という内容の PHP スクリプトを作成し、 Apache にスクリプトを提供させます。 ブラウザでこのスクリプトの URL を開き、有効な PHP 拡張モジュールのリストに instana がないことを確認します。

    この手順でエラーが発生した場合は、手動で PHP トレースを無効にして PHP Tracing 拡張モジュールをアンインストールします。 詳細は PHP トレースを手動で無効にする を参照ください。

Instana エージェントをアンインストールしても、すでにインスツルメンテーションされている PHP ランタイムから PHP Tracing エクステンションが自動的に削除されるわけではありません。 Instana エージェントをアンインストールする前に、 PHP トレースを無効にして、ホスト内のすべての PHP ランタイムから PHP Tracing エクステンションをアンインストールします。 詳細については、 Instana エージェントのアンインストールを参照してください。

PHP Tracingエクステンションのインストールを無効にする

新しく検出された PHP ランタイムへの PHP Tracing 拡張モジュールの自動インストールを無効にするには、 エージェントファイル false のセクションで tracing.installExtension を に設定します。 com.instana.plugin.php セクションを configuration.yaml に設定します:

com.instana.plugin.php:
  tracing:
    enabled: true
    installExtension: false
 
注意: この設定は、Instana PHP Tracing エクステンションがすでにインストールされている PHP ランタイムでは無効にしません。

トラブルシューティング

Instana UI に PHP のトレースがない

重要: サポートされているPHPのバージョンを使用していることを確認してください。 詳細については、 サポートされる PHP のバージョンを参照してください。

Pleskを使用している場合は、 plesk bin php_handler --reread を実行する必要があります。

PHP アプリケーションの Instana UI にトレースが表示されない場合は、次の手順を実行してください:

  1. 以下の前提条件を確認する:

  2. PHP Tracing 拡張モジュールを再読み込みするには、以下のコマンドを実行します。 reload コマンドを実行します:

    • Apache :

      systemctl reload apache2
       
    • PHP-FPM の場合:

      systemctl reload php<version>-fpm
       

      reloadコマンドの <version>は、システムにインストールされている実際のバージョンに置き換えてください。

それでも Instana UI にトレースが表示されず、オペレーティングシステムにデフォルトで SELinux が含まれているか、セキュリティ目的で環境に追加されている場合、SELinux が問題の原因である可能性があります。

PHP Tracer エクステンションは、PHP デーモンとは Unix TCP ソケット <socket path> で通信し、Instana エージェントとは TCP/IP ポート 42699 で通信します。 SELinux が強制モードに設定されている場合、SELinux が許可するように設定されていない限り、PHP 拡張モジュールとデーモンが互いに通信することを防ぎます。

この問題が SELinux のせいであるかどうかを調べるには、 /var/log/audit/audit.log で PHP デーモンのサイレント拒否が記録されていないか確認してください。 または、以下の手順を実行してスモークテストを行うこともできます:

  1. SELinuxを一時的に無効にする。
  2. PHPデーモンを再起動します。

SELinuxが問題の原因として特定された場合、以下のいずれかのオプションを使用することで解決できる:

  • PHP Tracer が通信できるように SELinux を設定します:SELinux を使用すると、独自のセキュリティポリシーに従ってカスタムポリシーを設定し、通信を許可することができます。 SELinuxポリシーの作成と変更の詳細については、以下のリンクを参照してください:

  • SELinuxをパーミッシブ・モードに設定する:このモードでは、サービスは制限なしで動作することができます。 サーバーを再起動することで、デフォルト設定に戻すことができます。 SELinuxをパーミッシブ・モードに設定するには、 SELinuxパーミッシブ・モードを参照のこと。

  • SELinux を無効にします:Instana は、セキュリティソフトウェアを無効にすることを積極的に推奨していません。 正しく安全なアプローチは、SELinuxポリシーを作成することである。 ただし、SELinux を無効にする場合は、 Linux を無効にする」を参照してください。

ロギングの有効化

デフォルトでは、ロギングはオフになっている。 有効にするには、以下の手順を参照してください。

  • 環境変数を使ってロギングを有効にする。
  1. ログレベルをデバッグに設定するには、 INSTANA_DEBUGTRUE または INSTANA_LOG_LEVEL=4
  • INIファイルを使用してロギングを有効にする。
  1. PHPをインストールしたディレクトリのscanディレクトリにある zzz-instana.ini という名前のファイルを探します。 たとえば、 php --ini | grep zzz-instana.iniphp-fpm<version> -i | grep zzz-instana.ini を実行すると、その場所がわかる。

  2. zzz-instana.iniinstana.log_level=4 という行を追加する。

  3. 選択した PHP ランタイムを実行する際には、ログが出力され、 拡張モジュールが有効になっていることを確認してください。 例えば、 php --ri instanaphp-fpm<version> -i | grep instana を実行して検証することができる。

    例:

    [instana.INFO] Initializing, logging at level 4
     
  4. ここで説明されているように、PHP tracing extension をリロードします。 このステップをスキップすると、最終的にログが記録されなくなる。

ログは、PHP トレース拡張モジュールがインストールされている PHP ランタイムに送られます。 このため、正確な位置はその構成に大きく左右される。 通常、 Apache2 の場合は /var/log/apache2/error.log を、PHP-FPM の場合は /var/log/php<version>-fpm.log を指定します。

手動でPHP Tracingエクステンションをインストールする

PHP Tracing 拡張モジュールを手動でインストールするには、以下の手順を実行します:

  1. Instana PHP Tracing エクステンションを次のようにダウンロードします:

    1. 以下のリポジトリからシェルスクリプトをダウンロードする:

      https://artifact-public.instana.io/artifactory/shared/com/instana/php/instana-ext-download-script/php-instana-ext-download-script.sh
       
    2. シェルスクリプトを実行して、あなたの環境に適した拡張機能をダウンロードしてください。 次のコマンドは利用可能なオプションを示す:

      ./php-instana-ext-download-script.sh -a <aarch64/x86_64> -l <musl/glibc> -p <PHP version> -t <NTS/ZTS> -d <serverless/native> -s <OpenSSL version> -v <Instana extension version>
       
      • PHPのバージョンは、メジャーバージョンとマイナーバージョンを指定してください。 例えば、Instana extension for PHP 8.4.12 をダウンロードするには、フラグ -p 8.4 を指定してシェルスクリプトを実行します。

      • OpenSSL バージョンの場合、 OpenSSL 1.1 をサポートするエクステンションをダウンロードするには -s ssl1 オプションを、 OpenSSL 3.x をサポートするエクステンションをダウンロードするには -s ssl3 オプションを使用する。

      • Instana 拡張機能のバージョンについては、デフォルト値は release で、利用可能な最新バージョンをダウンロードします。 特定のバージョンのアーティファクトをダウンロードするには、 -v フラグを使用します。 例えば、 -v 4.7.0 でスクリプトを実行すると、リリースバージョン 4.7.0 の拡張機能がダウンロードされます。

      • スクリプトで使用可能なすべてのオプションを表示するには、次のコマンドを実行します:

        ./php-instana-ext-download-script.sh
         
  2. 以下のようにエクステンションをインストールする:

    1. ダウンロードした .so ファイルを PHP CLI 拡張モジュールディレクトリに移動します。

    2. 次の例のように INI ファイル zzz-instana.ini を作成し、PHP CLI 追加 INI ディレクトリに保存します。 <hostIP> を Instana エージェントホストの IP アドレスに置き換えて、エージェントが PHP 環境から到達できるようにします。

      ; this file was automatically generated by Instana
      ;
      ; any changes made to this file are expected to be overwritten when
      ; a new version of the Instana PHP Tracer extension is installed
      [instana]
      extension=<php cli extension dir path where extension.so file is placed>
      instana.socket=<hostIP>:16816
      instana.agent_endpoint=http://<hostIP>:42699
      instana.use_agent_endpoint=1
      instana.auto_profile_socket=tcp://<hostIP>:42699
      instana.enable_auto_profile=0
      instana.secrets_matcher=contains-ignore-case
      instana.secrets_list="key,pass,secret"
      instana.extra_http_headers=
      instana.pid_in_root_namespace=<pid of PHP process in hostnamespace>
      instana.enable_cli=1
       

PHPのトレースを手動で無効にする

PHP Tracing を無効にするで説明した手順を実行すると、 PHP トレースが完全に無効になります。

この手順でエラーが発生し、手動で PHP トレースを無効にして PHP Tracing 拡張モジュールをアンインストールしたい場合は、 以下の手順を実行します:

  1. 以下のように、エージェント configuration.yaml ファイルで PHP トレースが無効になっていることを確認してください:

    com.instana.plugin.php:
      tracing:
        enabled: false
     

    この設定により、PHP センサーが PHP Tracing 拡張モジュールを再インストールすることを防ぎます。

  2. PHP INI 設定で PHP Tracing 拡張モジュールを無効にする。 PHP Tracing 拡張モジュールを無効にする を参照ください。

  3. PHP Tracing 拡張ファイルをシステムから削除する。 PHP Tracing 拡張ファイルの削除 を参照ください。

PHP Tracing 拡張機能の無効化

PHP センサーが拡張モジュールをインストールする際に、 PHP インストール用の拡張モジュールも有効にします。 拡張機能を有効にするということは、PHPセンサーが zzz-instana.ini ファイルを Additional Ini files フォルダーに置くか、 php.ini で直接有効にするということです。

どこで有効に設定されているかを確認するには、トレースを有効にした php バイナリーを実行します。 次の例では、PHP-FPM バイナリを使用しています:

$> php-fpm7.0 -i | egrep "^(Scan|Loaded)"
Loaded Configuration File => /etc/php/7.0/fpm/php.ini
Scan this dir for additional .ini files => /etc/php/7.0/fpm/conf.d
 

この例では、 zzz-instana.ini ファイルは /etc/php/7.0/fpm/conf.d にある。 Additional Ini files 」フォルダがない場合、または「 zzz-instana.ini 」ファイルがその場所に存在しない場合は、代わりに「 php.ini 」を確認してください。 この例では、ファイルは /etc/php/7.0/fpm/php.ini にある。

Windows では、 PowerShell で以下のコマンドを実行し、 php.ini ファイルの場所あるいは PHP-CGI 用の Additional Ini files フォルダの場所を取得します:

PS C:\> php-cgi -i | Select-String -Pattern '(Scan|Loaded Configuration)' | ForEach-Object { ($_ -replace '<br\s*/?>', "`n") -replace '<[^>]+>', ''}
Loaded Configuration File C:\Php\php.ini
Scan this dir for additional .ini files (none)
 
注: Apache mod_phpの場合は、 Apache のウェブアクセス可能な場所に、 <?php phpinfo(); の内容のPHPファイルを置き、ブラウザで開いて同じ情報を見る。

PHP トレース拡張を無効にするには、以下の手順を実行します:

  1. 該当する ini ファイルをエディターで開き、 extension=/path/to/instana.so の行頭にセミコロン(;)を以下のように付ける。 セミコロンをつけると、その行はコメントアウトされる。

    ;extension=/path/to/instana.so

    あるいは、 extension=/path/to/instana.so の行を完全に削除する。 後で拡張機能を有効にするつもりなら、削除しないでください。

  2. zzz-instana.ini 、次のようにしてファイルを完全に削除することもできる:

    $> sudo rm /etc/php/7.0/fpm/conf.d/zzz-instana.ini
     

    Windowsの場合、 PowerShell (管理者として)で以下のコマンドを実行すれば、ファイルを削除できる:

    PS C:\> Remove-Item -Path C:\Php\conf\zzz-instana.ini
     
    重要です: php.ini ファイル全体を削除しないでください。
  3. PHP Tracing 拡張モジュールをメモリから削除するために、 PHP ランタイムを再起動します。 PHPランタイムが事前にフォークされたワーカーを使用している場合は、今すぐPHPマスタープロセスを再起動する必要があります。

注意: 拡張機能を無効にしても、拡張機能ファイルはシステムから削除されません。

PHP Tracing 拡張ファイルの削除

PHPは拡張モジュールが見つからないと起動エラーを記録するので、 拡張モジュールを削除する前に、それを無効にしておく必要があります。 詳細は PHP Tracing 拡張モジュールを無効にする を参照ください。

PHP センサーは、Instana PHP トレース拡張モジュールを php.iniextension_dir 設定で指定されたディレクトリに配置します。 この設定を確認するには、トレースを有効にした php バイナリーを実行します。 次の例では、PHP-FPM バイナリを使用しています:

$> php-fpm7.0 -i | egrep ^extension_dir
extension_dir => /usr/lib/php/20151012 => /usr/lib/php/ext
 
注: Apache mod_phpの場合は、 Apache のウェブアクセス可能な場所に、 <?php phpinfo(); の内容のPHPファイルを置き、ブラウザで開いて同じ情報を見る。

PHP センサーは最初の値のみを使用するため、この例では拡張子を /usr/lib/php/20151012 で見つけることができます。 拡張子のパスは、 php.ini または zzz-instana.ini ファイルにも記載されています。

Windowsの場合、 PowerShell で以下のコマンドを実行すると、 extension_dir が表示されます:

PS C:\> php-cgi -i | Select-String -Pattern 'extension_dir' | ForEach-Object { ($_ -replace '<br\s*/?>', "`n") -replace '<[^>]+>', ' '}
  extension_dir  C:\php\ext  C:\php\ext
 

拡張機能を削除するには、以下のコマンドを実行する:

$> sudo rm /usr/lib/php/20151012/instana.so
 

Windowsの場合、 PowerShell (管理者権限)で以下のコマンドを実行すれば、ファイルを削除できる:

PS C:\> Remove-Item -Path C:\Php\ext\instana.dll
 

pre-forked workers を使用していて、拡張モジュールを無効にしたときに PHP マスタープロセスを再起動しなかった場合は、 変更を有効にするために再起動する必要があります。