PHP アプリケーション向け New Relic APM 設定ガイド
PHP アプリケーションでの New Relic APM 導入は、Web アプリケーションの包括的な監視と最適化を実現します。PHP エージェントは、PHP エンジンレベルでの統合により、Laravel、Symfony、WordPress などの主要フレームワークとCMSを自動的に監視対象とできます。
PHP エージェントの特徴
PHP エージェントの概要
New Relic PHP エージェントは、Zend Engine の拡張機能として動作し、PHP の実行時動作を詳細に監視します。既存のアプリケーションコードを変更することなく、関数呼び出し、データベースクエリ、外部API呼び出しを自動的に追跡します。
エージェントは以下の情報を自動的に収集します:
- HTTP リクエストとレスポンスの処理時間
- データベースクエリの実行時間
- フレームワーク固有の処理(ルーティング、ミドルウェア等)
- エラーとスタックトレース
事前準備
システム要件
- PHP バージョン: 7.4 以降(PHP 8.2+ 推奨)
- Web サーバー: Apache 2.4+、Nginx 1.18+、IIS 10+
- PHP SAPI: mod_php、PHP-FPM、CGI、CLI
- オペレーティングシステム: Linux (Ubuntu 20.04+, RHEL 8+)、macOS 12+、Windows Server 2019+
サポートフレームワーク:
- Laravel: 8.x, 9.x, 10.x, 11.x
- Symfony: 5.x, 6.x, 7.x
- WordPress: 5.8+
- Drupal: 9.x, 10.x
- CodeIgniter: 4.x
PHP エージェントを導入する前に、以下の要件を確認してください:
- PHP 7.0 以降(PHP 8.x 推奨)
- Web サーバー: Apache、Nginx、IIS
- PHP SAPI: mod_php、PHP-FPM、CGI
- 必要な権限: PHP 拡張機能のインストール権限
New Relic アカウントの準備
New Relic のアカウント作成とライセンスキーの取得が必要です。アカウント作成後、「APM & Services」から新しいアプリケーションを追加し、PHP を選択してライセンスキーを取得してください。
エージェントのインストール
Linux(Ubuntu/Debian)でのインストール
# New Relic リポジトリの追加
echo 'deb http://apt.newrelic.com/debian/ newrelic non-free' | sudo tee /etc/apt/sources.list.d/newrelic.list
wget -O- https://download.newrelic.com/548C16BF.gpg | sudo apt-key add -
# パッケージの更新とインストール
sudo apt-get update
sudo apt-get install newrelic-php5
# 設定スクリプトの実行
sudo newrelic-install install
Linux(CentOS/RHEL)でのインストール
# RHEL/CentOS/Amazon Linux 2 用の最新リポジトリ
# GPGキーの追加
sudo rpm --import https://download.newrelic.com/infrastructure_agent/gpg/newrelic-infra.gpg
# リポジトリの追加
sudo tee /etc/yum.repos.d/newrelic-infra.repo <<EOF
[newrelic-infra]
name=New Relic Infrastructure
baseurl=https://download.newrelic.com/infrastructure_agent/linux/yum/el/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://download.newrelic.com/infrastructure_agent/gpg/newrelic-infra.gpg
EOF
# エージェントのインストール
sudo yum update -y
sudo yum install -y newrelic-php5
# 設定スクリプトの実行
sudo newrelic-install install
手動インストール
RPMやDEBパッケージが使用できない環境では、手動インストールも可能です:
# Ubuntu/Debian 用の最新リポジトリ
# GPGキーの追加
wget -O - https://download.newrelic.com/infrastructure_agent/gpg/newrelic-infra.gpg | sudo gpg --dearmor -o /usr/share/keyrings/newrelic-infra-archive-keyring.gpg
# リポジトリの追加
echo "deb [signed-by=/usr/share/keyrings/newrelic-infra-archive-keyring.gpg] https://download.newrelic.com/infrastructure_agent/linux/apt $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/newrelic-infra.list
# パッケージリストの更新とインストール
sudo apt-get update
sudo apt-get install -y newrelic-php5
# 設定スクリプトの実行
sudo newrelic-install install
Docker コンテナでのインストール
# マルチステージビルドでセキュリティ強化
FROM php:8.3-apache AS base
# セキュリティアップデートと必要パッケージ
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
unzip \
ca-certificates \
gnupg \
&& rm -rf /var/lib/apt/lists/*
# New Relic PHP エージェントの最新版インストール
RUN curl -L "https://download.newrelic.com/php_agent/release/newrelic-php5-10.20.0.0-linux.tar.gz" \
-o /tmp/newrelic.tar.gz \
&& tar -C /tmp -zxf /tmp/newrelic.tar.gz \
&& NR_INSTALL_USE_CP_NOT_LN=1 NR_INSTALL_SILENT=1 \
/tmp/newrelic-php5-*/newrelic-install install \
&& rm -rf /tmp/newrelic* /tmp/nrinstall*
# 本番用コンテナ
FROM php:8.3-apache AS production
# セキュリティ強化: 非特権ユーザー作成
RUN groupadd -r phpuser && useradd -r -g phpuser -d /var/www -s /bin/bash phpuser
# New Relic エージェントをコピー
COPY --from=base /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/
COPY --from=base /usr/local/etc/php/conf.d/newrelic.ini /usr/local/etc/php/conf.d/
# PHP設定ファイルの作成(セキュリティ強化)
RUN echo "extension=newrelic.so" > /usr/local/etc/php/conf.d/99-newrelic.ini && \
echo "newrelic.enabled = true" >> /usr/local/etc/php/conf.d/99-newrelic.ini && \
echo "newrelic.distributed_tracing_enabled = true" >> /usr/local/etc/php/conf.d/99-newrelic.ini && \
echo "newrelic.span_events_enabled = true" >> /usr/local/etc/php/conf.d/99-newrelic.ini
# アプリケーションコードをコピー
COPY --chown=phpuser:phpuser . /var/www/html/
# Apache設定の最適化
RUN a2enmod rewrite headers
# 環境変数のデフォルト値
ENV NEW_RELIC_ENABLED=true
ENV NEW_RELIC_LOG_LEVEL=info
ENV APACHE_RUN_USER=phpuser
ENV APACHE_RUN_GROUP=phpuser
# ヘルスチェック
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost/health.php || exit 1
EXPOSE 80
Composer を使用したランタイムインストール
一部の環境では、Composer パッケージを使用してエージェントを統合できます。
composer require newrelic/monolog-enricher
基本設定の構成
php.ini での設定
インストール後、php.ini
ファイルに以下の設定を追加します:
; New Relic PHP エージェントの有効化
extension=newrelic.so
; ライセンスキーとアプリケーション名
newrelic.license = "YOUR_LICENSE_KEY_HERE"
newrelic.appname = "My PHP Application"
; エージェントの有効化
newrelic.enabled = true
; ログ設定
newrelic.logfile = "/var/log/newrelic/php_agent.log"
newrelic.loglevel = "info"
YOUR_LICENSE_KEY_HERE
の部分を、取得したライセンスキーに置き換えてください。
環境変数での設定
.env
ファイルを使用する場合:
# .env ファイル (セキュリティ強化)
# 本番環境では環境変数管理システムを使用
NEW_RELIC_LICENSE_KEY=${NEW_RELIC_LICENSE_KEY}
NEW_RELIC_APP_NAME="My PHP Application"
NEW_RELIC_ENABLED=true
NEW_RELIC_LOG_LEVEL=info
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
NEW_RELIC_SPAN_EVENTS_ENABLED=true
# PHP環境設定
PHP_ENV=production
PHP_DISPLAY_ERRORS=Off
PHP_LOG_ERRORS=On
フレームワーク別の設定例
Laravel アプリケーション
Laravel では、環境設定ファイルで New Relic を設定できます:
// config/app.php または .env ファイル
'providers' => [
// 既存のプロバイダー
App\Providers\NewRelicServiceProvider::class,
],
設定情報を環境変数で管理:
# .env ファイル
NEW_RELIC_LICENSE_KEY=your_license_key
NEW_RELIC_APP_NAME="${APP_NAME} (${APP_ENV})"
Symfony アプリケーション
Symfony では、設定ファイルで New Relic を管理できます:
# config/packages/newrelic.yaml (作成)
newrelic:
app_name: '%env(NEW_RELIC_APP_NAME)%'
license_key: '%env(NEW_RELIC_LICENSE_KEY)%'
WordPress サイト
WordPress では、テーマの functions.php
またはプラグインで基本的な設定を行います:
// wp-content/themes/your-theme/functions.php
if (extension_loaded('newrelic')) {
// アプリケーション名の設定
newrelic_set_appname(get_bloginfo('name') . ' (WordPress)');
// ユーザー情報の追加
if (is_user_logged_in()) {
$user = wp_get_current_user();
newrelic_set_user_attributes($user->ID, $user->display_name, $user->user_email);
}
}
監視データの確認
New Relic UI でのデータ確認
エージェント導入後、数分で New Relic のダッシュボードにデータが表示されます。確認できる主要な情報:
- 概要: アプリケーションの全体的なパフォーマンス
- トランザクション: 各ページやエンドポイントの処理時間
- データベース: SQLクエリの実行時間と頻度
- エラー: PHP エラーと例外の詳細
基本的なメトリクス
自動的に収集される基本メトリクス:
- 平均レスポンス時間
- スループット(リクエスト/分)
- エラー率
- Apdex スコア(ユーザー満足度指標)
よくある問題と解決方法
エージェントが動作しない場合
- 拡張機能の確認:
php -m | grep newrelic
でモジュールが読み込まれているか確認 - ライセンスキー: 設定ファイルに正しいキーが記載されているか確認
- Webサーバーの再起動: Apache や Nginx を再起動
- ログの確認:
/var/log/newrelic/php_agent.log
でエラーを確認
パフォーマンスへの影響を最小化
本番環境での設定例:
; パフォーマンス最適化設定
newrelic.framework = "laravel"
newrelic.transaction_tracer.transaction_threshold = 2.0
newrelic.error_collector.max_stack_trace_lines = 50
セキュリティ設定
機密情報を保護するための基本設定:
; SQLパラメータの難読化
newrelic.transaction_tracer.record_sql = "obfuscated"
; HTTPパラメータのキャプチャを無効化
newrelic.capture_params = false
; 機密情報を含むパラメータを除外
newrelic.ignored_params = "password,credit_card,ssn"
Docker での設定
Docker コンテナでの使用例:
FROM php:8.2-apache
# New Relic エージェントのインストール
RUN curl -L https://download.newrelic.com/php_agent/release/newrelic-php5-10.13.0.3-linux.tar.gz | tar -C /tmp -zx \
&& cd /tmp/newrelic-php5-* \
&& ./newrelic-install install \
&& rm -rf /tmp/newrelic-php5-*
# 設定ファイルの追加
RUN echo "extension=newrelic.so" > /usr/local/etc/php/conf.d/newrelic.ini \
&& echo 'newrelic.license = "YOUR_LICENSE_KEY"' >> /usr/local/etc/php/conf.d/newrelic.ini \
&& echo 'newrelic.appname = "My PHP App"' >> /usr/local/etc/php/conf.d/newrelic.ini
COPY . /var/www/html/
まとめ
PHP アプリケーションでの New Relic APM 導入は、エージェントのインストールと基本設定により、既存のアプリケーションを変更することなく包括的な監視を開始できます。Laravel、Symfony、WordPress などの主要フレームワークでは、自動的に重要なメトリクスが収集されます。
まずは基本設定でデータ収集を開始し、アプリケーションの特性に応じて詳細設定を調整することで、効果的なパフォーマンス監視システムを構築できます。
初心者向けトラブルシューティング
エージェントが動作しない場合
PHP拡張機能の確認
bashphp -m | grep newrelic
設定ファイルの確認
bashphp --ini | grep newrelic
Webサーバーの再起動
bash# Apache sudo systemctl restart apache2 # Nginx + PHP-FPM sudo systemctl restart nginx php8.3-fpm
ライセンスキーの確認
bashgrep license_key /etc/php/*/cli/conf.d/newrelic.ini
PHP エージェント設定パラメータ完全リファレンス
基本設定パラメータ
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.license | string | なし | New Relicライセンスキー(必須) | your_license_key_here |
newrelic.appname | string | PHP Application | アプリケーション名(最大3個、セミコロン区切り) | My PHP App;Staging;Development |
newrelic.enabled | boolean | true | エージェント全体の有効化 | true |
newrelic.daemon.location | string | 自動検出 | デーモンの場所 | /var/run/newrelic/newrelic.sock |
newrelic.daemon.loglevel | string | info | デーモンログレベル | error , warning , info , debug |
newrelic.daemon.pidfile | string | /tmp/newrelic.pid | デーモンPIDファイル | /var/run/newrelic/newrelic.pid |
newrelic.daemon.port | string | /tmp/.newrelic.sock | デーモン接続ポートまたはソケット | @newrelic |
ログ設定
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.logfile | string | /var/log/newrelic/php_agent.log | エージェントログファイル | /var/log/newrelic/php_agent.log |
newrelic.loglevel | string | info | エージェントログレベル | error , warning , info , debug |
newrelic.daemon.logfile | string | /var/log/newrelic/newrelic-daemon.log | デーモンログファイル | /var/log/newrelic/newrelic-daemon.log |
トランザクション追跡設定
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.transaction_tracer.enabled | boolean | true | トランザクション追跡有効化 | true |
newrelic.transaction_tracer.threshold | double | 2.0 | トランザクション追跡閾値(秒) | 1.0 |
newrelic.transaction_tracer.detail | int | 1 | トランザクション詳細レベル(0-2) | 2 |
newrelic.transaction_tracer.record_sql | string | obfuscated | SQL記録モード | off , obfuscated , raw |
newrelic.transaction_tracer.explain_enabled | boolean | true | SQL実行計画取得有効化 | true |
newrelic.transaction_tracer.explain_threshold | int | 500 | 実行計画取得閾値(ミリ秒) | 1000 |
newrelic.transaction_tracer.slow_sql | boolean | true | 低速SQL追跡有効化 | true |
エラー収集設定
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.error_collector.enabled | boolean | true | エラー収集有効化 | true |
newrelic.error_collector.record_database_errors | boolean | true | データベースエラー記録 | true |
newrelic.error_collector.prioritize_api_errors | boolean | false | API経由のエラーを優先 | true |
newrelic.error_collector.ignore_errors | string | なし | 無視するエラータイプ(カンマ区切り) | E_ERROR,E_WARNING |
newrelic.error_collector.ignore_user_exception_handler | boolean | false | ユーザー例外ハンドラーを無視 | true |
ブラウザ監視設定
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.browser_monitoring.auto_instrument | boolean | true | ブラウザ監視自動挿入 | true |
newrelic.browser_monitoring.loader | string | rum | ブラウザローダータイプ | rum , full |
分散トレーシング設定
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.distributed_tracing_enabled | boolean | true | 分散トレーシング有効化 | true |
newrelic.span_events_enabled | boolean | true | スパンイベント有効化 | true |
フレームワーク固有設定
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.framework | string | 自動検出 | フレームワーク種別 | laravel , symfony , wordpress , drupal |
newrelic.webtransaction.name.remove_trailing_path | boolean | false | パス末尾の除去 | true |
newrelic.webtransaction.name.functions | string | なし | トランザクション名生成関数 | my_naming_function |
カスタム属性設定
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.capture_params | boolean | false | HTTPパラメータ収集 | true |
newrelic.ignored_params | string | なし | 無視するパラメータ(カンマ区切り) | password,ssn,credit_card |
newrelic.attributes.enabled | boolean | true | 属性収集有効化 | true |
newrelic.attributes.include | string | なし | 含める属性パターン | request.parameters.* |
newrelic.attributes.exclude | string | デフォルト除外設定 | 除外する属性パターン | request.headers.cookie |
パフォーマンス最適化設定
設定項目 | データ型 | デフォルト値 | 説明 | 推奨値 |
---|---|---|---|---|
newrelic.transaction_tracer.max_segments_web | int | 2000 | Web最大セグメント数 | 1000 |
newrelic.transaction_tracer.max_segments_cli | int | 100000 | CLI最大セグメント数 | 50000 |
newrelic.daemon.max_threads | int | 8 | デーモン最大スレッド数 | 16 |
newrelic.daemon.metric_address_time | int | 120 | メトリクス送信間隔(秒) | 60 |
特殊設定
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.high_security | boolean | false | 高セキュリティモード | true |
newrelic.labels | string | なし | カスタムラベル(セミコロン区切り) | env:prod;team:backend |
newrelic.custom_insights_events.enabled | boolean | true | カスタムInsightsイベント有効化 | true |
newrelic.application_logging.enabled | boolean | true | アプリケーションログ連携 | true |
newrelic.application_logging.forwarding.enabled | boolean | true | ログ転送有効化 | true |
newrelic.application_logging.metrics.enabled | boolean | true | ログメトリクス有効化 | true |
環境変数(Heroku等)
パラメータ名 | データ型 | デフォルト値 | 説明 | 使用例 |
---|---|---|---|---|
NEW_RELIC_LICENSE_KEY | string | なし | New Relicライセンスキー | your_license_key_here |
NEW_RELIC_APP_NAME | string | なし | アプリケーション名 | My PHP App (Heroku) |
NEW_RELIC_METADATA_COMMIT | string | なし | コミットSHA(git情報) | 734713b |
per-directory設定(.htaccess/Apache)
設定方法 | 例 | 説明 |
---|---|---|
Apache VirtualHost | php_value newrelic.appname "VHost App" | 仮想ホスト単位での設定 |
.htaccess | php_value newrelic.enabled 1 | ディレクトリ単位での設定 |
PHP API | ini_set('newrelic.appname', 'API App'); | 実行時設定変更 |
Code Level Metrics設定
設定項目 | データ型 | デフォルト値 | 説明 | 設定例 |
---|---|---|---|---|
newrelic.code_level_metrics.enabled | boolean | true | コードレベルメトリクス有効化 | true |
newrelic.package_reporting.enabled | boolean | true | パッケージ検出情報送信 | true |
関連記事