Help us understand the problem. What is going on with this article?

CentOS 7.5 PHP7.3(php-fpm)の環境をNew Relic APMで監視する

More than 1 year has passed since last update.

真っ新なCentOS 7.5の環境にPHP7.3をインストールし、New Relicでアプリケーション監視の設定をした際に、躓くポイントがいくつかありました。
構築手順をこちらに残します。

CentOS 7.5 環境構築

vagrantでローカルマシンに作成します。

vagrant init centos/7
vagrant up

Nginxのセットアップ

EPELリポジトリ追加とインストール

nginxはEPELリポジトリのものを使用します。

sudo yum -y install epel-release
sudo yum -y install nginx

Nginxからphp-fpmを実行する設定

phpのファイルが呼ばれた際にphp-fpmで実行する設定を、設定ファイルのserverディレクティブ内に記述します。

/etc/nginx/nginx.conf
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

起動設定

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

php-fpmの導入

Remiリポジトリの追加とインストール

CentOS標準のリポジトリにはPHP5系のパッケージしか用意されていません。
php-fpmはRemiリポジトリのものを使用します。

sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum -y install php73-php.x86_64 php73-php-fpm.x86_64

起動設定

sudo systemctl start php73-php-fpm.service
sudo systemctl enable php73-php-fpm.service

New Relic PHP拡張とAgentの導入

New Relicリポジトリの追加とインストール

sudo rpm -Uvh http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
sudo yum install newrelic-php5

php-fpmでnewrelic拡張を使用する設定

New Relicを使用する設定は通常 newrelic-install を用います。コマンドを実行するだけでほとんどの設定が完了します。
しかし、この環境ではRemiのphp-fpmを使用している都合により newrelic-install コマンドを使用できません。
なので必要な設定を手動で行います。

newrelic-php 設定ファイルの作成

sudo cp /usr/lib/newrelic-php5/scripts/newrelic.ini.template /etc/opt/remi/php73/php.d/newrelic.ini
sudo chmod u+w /etc/opt/remi/php73/php.d/newrelic.ini                                                                                            

php-fpmの設定ディレクトリにテンプレートをコピーし、書き込み権限を付与します。

newrelic-php 設定ファイルの編集

/etc/opt/remi/php73/php.d/newrelic.ini
extension = "/usr/lib/newrelic-php5/agent/x64/newrelic-20180731.so"

newrelic.license = "REPLACE_WITH_REAL_KEY"

newrelic.appname = "アプリケーション名"

newrelic.daemon.port = "/var/run/.newrelic.sock"

※上記は変更箇所のみ記述しています。
extension で拡張ライブラリを絶対パスで指定します。(あるいはここの記述は変更せず、ライブラリファイルを適切な場所へコピーしても良いです)
newrelic.licencenewrelic.appnameは自身の環境に合わせて変更します。
newrelic.daemon.portの初期値は/tmp/.newrelic.sockですが、CentOS 7系で動くサービスはPrivateTmpが有効となっているため、/tmp直下のファイルにアクセスできません。
ソケットファイルを/var/runに置くことで利用できるようになります。(あるいは通信にTCPを使用するか、php-fpmではPrivateTmpを無効にすることでも可能です)

php-fpmの再起動

sudo systemctl restart php73-php-fpm.service

newrelic-daemon 設定ファイルの作成

sudo cp /etc/newrelic/newrelic.cfg.template /etc/newrelic/newrelic.cfg
sudo chmod u+w /etc/newrelic/newrelic.cfg

newrelic-daemon 設定ファイルの編集

/etc/newrelic/newrelic.cfg
port="/var/run/.newrelic.sock"

※上記は変更箇所のみ記述しています。
portの値が、newrelic.iniのnewrelic.daemon.portと一致するようにします。

newrelic-daemonの起動設定

sudo service newrelic-daemon start
sudo chkconfig newrelic-daemon on

動作確認

phpinfoを出力するファイルを作成

<?php
phpinfo();

Webアクセス

watch -n 1 curl localhost/index.php

New Relicの管理画面で確認

image.png
数分待ち、Webトランザクションの情報が入ってくれば成功です。

まとめ

CentOS 7はPrivateTmpやSELinuxが有効になっていたり、php7のパッケージが標準で用意されていなかったりと、ハマりどころが多いです。
意外とハマりどころが多いです。
何かうまくいかないことがあったら、各サービスのログを見ながら対応を行いましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした