【New Relic APM】WordPressのパフォーマンスを監視する

## はじめに
インフラエンジニアとして日々、監視や運用に携わっています:computer::smiley:
最近、APMを使うことでアプリケーション側の監視ができることを知りました。
実際に導入する機会もあるため検証を行い、その結果をこの記事にまとめました。

### APMとは
APM（Application Performance Monitoring）は、アプリケーションのパフォーマンスをリアルタイムで監視・分析するツールです。

以下のような課題を解決するために役立ちます。

- サイトやアプリケーションが遅い原因（ボトルネック）の特定
- ユーザー視点でのサービス品質の可視化
- エラーや障害の早期発見

以下は、実際のNew Relic APMの監視画面です。

![スクリーンショット 2024-12-03 22.48.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/d76a8f45-15ab-c2b6-ccdb-dd8d20a8f166.png)

今回は、世界中で広く使われているCMS「WordPress」にAPMの1つであるNew Relic APMを導入してみました。

:::note info
この記事では、AWSでEC2インスタンス（Amazon Linux 2023）上のWordPress環境にNew Relic APMを導入します。
:::

## 本記事の内容
- New Relic APMのインストール（PHPエージェント）
- 導入後の確認
- PHPエージェント削除

## 前提条件
以下条件のサーバーに導入しました。

EC2インスタンス(Amazon Linux 2023)
- LAMP（Apache, MySQL, PHP）が設定済み
- WordPressが正常に動作している
- Session ManagerやSSH接続でEC2にアクセス可能
- New Relicアカウントを作成済み

## New Relic APMのインストール
New Relicの管理画面で「＋ Integrations & Agens」を選択->「PHP」で検索かけて、表示されたアイコンをクリックします。

![スクリーンショット 2024-12-03 21.16.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/f95eeef8-009b-c5a5-39c1-0c7efe326bbd.png)


APMエージェントのインストール方法を選択します。
「On a host（tar archive）」を選択します。

:::note warn
※管理面を考えてパッケージマネージャーでインストールを試みましたが、上手くいかずtarを選択しました。Amazon Linux 2023 はまだ対応していない？？:thinking:（2024/12/07時点）
:::

![スクリーンショット 2024-12-03 22.11.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/a222441c-3227-7daa-1dc0-6487dd0bf202.png)

インストールで使用するlicense keyとuse keyを作成します。

![スクリーンショット 2024-12-03 22.12.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/547ccd38-6760-f288-f0de-2553d5d2068b.png)

インストール対象のサーバーにログインしてPHPのバージョンを確認します。
公式ドキュメント：[PHPエージェントの互換性と要件](https://docs.newrelic.com/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements/#php-release)

![スクリーンショット 2024-12-03 22.12.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/b7c9a98a-a8f8-c861-bb10-305c741b4c1a.png)

```sh
$ php --version
PHP 8.3.10 (cli) (built: Jul 30 2024 13:44:37) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.10, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.10, Copyright (c), by Zend Technologies
```
:::note info
今回は 8.3.10 です！
:::

curlコマンドでNew Relic PHPエージェントのリリースディレクトリにあるgzファイルを表示します。

![スクリーンショット 2024-12-03 22.12.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/18d1b750-f6ce-3f30-61ff-e483c4a7dc5c.png)

表示されたファイルを入力し、ファイルをダウンロードします。

![スクリーンショット 2024-12-03 22.13.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/83772613-6c00-86e2-1cf4-c8777cccd468.png)

:::note info
newrelic-php5-11.3.0.16-linux-musl.tar.gz
newrelic-php5-11.3.0.16-linux.tar.gz

上記2ファイルが取得できました。
今回は「newrelic-php5-11.3.0.16-linux.tar.gz」を使用します。
:::

ダウンロードしたファイルを解凍してエージェントをインストールします。
![スクリーンショット 2024-12-03 22.14.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/9131b139-dfd8-bd20-9a6d-b4404f29b5a3.png)

アプリ名を入力し、エージェントを設定します。
![スクリーンショット 2024-12-03 22.15.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/7e52c361-1994-f553-8176-a1d56830bba4.png)

ミドルウェアを再起動します。（今回はPHP-FPMとApache(RHEL)）
![スクリーンショット 2024-12-03 22.16.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/baa709f3-fdec-042b-b24b-07eb58c2ce20.png)
![スクリーンショット 2024-12-03 22.16.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/28bf3f24-47af-58a0-9542-a80396a54226.png)

今回はログ転送はSkipします。
![スクリーンショット 2024-12-03 22.16.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/a62797d1-6059-2a9c-53b3-f0fa941f24f9.png)

接続テストをしてSuccessになることを確認します。
![スクリーンショット 2024-12-03 22.17.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/decfe97f-3046-0455-59d0-94c65fb73874.png)

APMに追加されたことを確認します。
New Relicの管理画面で「APM & Services」を選択 ->「アプリ名」をクリックします。
![スクリーンショット 2024-12-03 22.18.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/fe642943-0e3a-cbe4-0ff7-6c088fb33929.png)

少し待っているとデータの取得が確認できました！:raised_hands:
![スクリーンショット 2024-12-03 22.23.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/9cd148d9-25a0-1b63-10e2-78780f6c35a3.png)

メイン画面は以下のような画面になってます。
（データの波形がカクカクで不自然なのは監視対象が実際のWebサイトではなく、検証機を利用して30秒ごとにページ更新をかけているからです:pray:）
![スクリーンショット 2024-12-07 15.26.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/a82f6858-f830-a3d3-69bb-46feb2c67dff.png)

Summary画面で以下のような指標が確認可能です。
これらの情報によりサービスが正常に稼働しているか、正しく機能しているか、そしてユーザー体験（UX）に問題がないか等を確認できます。
### ・応答性能
アプリケーション側での処理時間、データベースや外部Webサービスへのアクセス時間

### ・スループット
一定時間あたりのリクエスト数

### ・エラー率
Webトランザクションやその他のエラー率

### ・Apdex score
アプリケーションのパフォーマンスに対するユーザー満足度を示す指標

## エージェントの削除（お片付け）
:::note alert
実際に本番運用でエージェントを削除する場合は必ず公式ドキュメントのご確認をお願いします。
:::

https://docs.newrelic.com/jp/docs/apm/agents/php-agent/advanced-installation/uninstalling-php-agent/

導入したエージェントを手動で削除していきます。

newrelic-daemonのプロセスが稼働していることを確認します。
```sh
# ps -ef | grep [n]ewrelic-daemon
root       52880       1  0 Dec03 ?        00:00:00 /usr/bin/newrelic-daemon --agent --pidfile /var/run/newrelic-daemon.pid --logfile /var/log/newrelic/newrelic-daemon.log --port @newrelic --wait-for-port 0s --define utilization.detect_aws=true --define utilization.detect_azure=true --define utilization.detect_gcp=true --define utilization.detect_pcf=true --define utilization.detect_docker=true --define utilization.detect_kubernetes=true
root       52885   52880  0 Dec03 ?        00:00:48 /usr/bin/newrelic-daemon --agent --pidfile /var/run/newrelic-daemon.pid --logfile /var/log/newrelic/newrelic-daemon.log --port @newrelic --wait-for-port 0s --define utilization.detect_aws=true --define utilization.detect_azure=true --define utilization.detect_gcp=true --define utilization.detect_pcf=true --define utilization.detect_docker=true --define utilization.detect_kubernetes=true -no-pidfile
```
対象のプロセスを停止します。
```sh
sudo kill 52885 52880
```
関連ファイルを削除します。
```sh
sudo rm -rf /etc/newrelic/
sudo rm -rf /var/log/newrelic/
sudo rm -f /etc/php.d/newrelic.ini
sudo rm -f /etc/rc.d/init.d/newrelic-daemon
```
Webサーバーを再起動します。
```sh
sudo systemctl restart httpd
```
プロセスが削除されたか確認します。
```sh
ps -ef | grep [n]ewrelic
```
データ取得が停止しました。
![スクリーンショット 2024-12-09 22.00.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/befa1c09-0423-fdc3-6f43-a3694aca1cdd.png)

New Relic側でアプリケーションを削除します。
New Relicの管理画面で「APM & Services」を選択 ->「アプリ名」-> 「Application」を選択します。
「Delete application」をクリックして削除します。
![スクリーンショット 2024-12-09 22.01.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951077/5eb009be-1bea-4c26-6dec-ee2d9de8984f.png)


## さいごに
サイトのパフォーマンス改善にNew Relic APMをぜひ活用してみてください！
読んでいただきありがとうございました！！:open_hands:

## 参考ドキュメント

https://docs.newrelic.com/docs/apm/new-relic-apm/getting-started/introduction-apm/

https://qiita.com/nr-mito/items/74bf587bc97128403d9e