これは何?
EC2 インスタンスにインストールした php-fpm のステータス情報を Datadog でモニタリングする方法を記した記事です!
ここでいうステータス情報は、具体的には php-fpm の pm.status_path
の設定で確認できるステータス情報のことです。
過去に作成した以下のブログ記事の補足になります😌
https://iret.media/116947
構成図
理解しやすくなると思うので最終的な状態の構成図を先に見ていただきます!
※ 今回の記事は赤枠の部分にフォーカスした内容になります
前提
- EC2 インスタンスに以下がインストールされた状態を前提とします
- Apach
- php-fpm
- Datadog エージェント
関連用語の説明
php-fpm について
WEBサーバーがリクエストを受けてから PHP のプログラムを実行する仕組みの一つです。
PHP のアプリケーションサーバーと表現されることもあります。
PHP のプログラムを実行する仕組みについて
PHP のプログラムを実行する仕組みは大きく分けて二つあります。
PHP のプログラムを実行する仕組み | 説明 | 備考欄 |
---|---|---|
php-fpm | Web サーバーのプロセスとは別のプロセスで PHP を実行する仕組み | 今回のブログはこちらのケース |
モジュール版 | Web サーバーのプロセスの中で PHP を実行する仕組み | – |
FPM (FastCGI Process Manager)
PHP における FastCGI 実装のことです。
FastCGI
CGI の改良版です。
初回のプロセス実行後そのプロセスを一定時間サーバー内に保持することで次回以降の「プロセスの起動・終了」を省略することにより、起動や終了のたびに発生するCPU負荷を軽減し高速な処理が可能にする動作方式です。
それによりモジュール版 PHP と同等のパフォーマンスを提供すると言われています。
CGI (Common Gateway Interface)
クライアント側のWebブラウザの要求に応じてWebサーバが外部プログラムを呼び出して、その実行結果がHTTPを介してクライアントのWebブラウザに送信される仕組みのことです。
pm.status_path
php-fpm の設定項目の一つです。
この設定項目でサーバーのパスを指定することで、そのパスにアクセスすれば php-fpm の情報を取得できるようになります。
※ 公式ドキュメントは以下
https://www.php.net/manual/en/fpm.status.php
手順
以降が EC2 インスタンスにインストールした php-fpm のステータス情報を Datadog でモニタリングする方法になります。
php-fpm で pm.status_path 設定追加
php-fpm の設定ファイルに pm.status_path
の設定を追加します。
この環境では /etc/php-fpm.d/www.conf
に以下の設定を追記します。
pm.status_path = /fpm-status
Apache でバーチャルホスト設定
この環境では /etc/httpd/conf.d/localhost_vhost.conf
という Localhost 向けのバーチャルホストを設定します。
ファイルの中身は以下とします。
<VirtualHost 127.0.0.1:80> ServerName Localhost DocumentRoot /var/www/html ErrorLog /var/log/httpd/localhost.error.log CustomLog /var/log/httpd/localhost.access.log combined <Location /fpm-status> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/fpm-status" Require all denied Require ip 127.0.0.1 </Location> </VirtualHost>
php-fpm, Apache 再起動
以下のコマンドで php-fpm のシンタックスチェックをします。
php-fpm -t
以下のような結果であれば正常です。
## php-fpm -t [20-Sep-2024 06:03:28] NOTICE: configuration file /etc/php-fpm.conf test is successful
以下のコマンドで Apache のシンタックスチェックをします。
httpd -t
以下のような結果であれば正常です。
## httpd -t Syntax OK
以下のコマンドで php-fpm の再起動をします。
systemctl restart php-fpm
以下のコマンドで Apache の再起動をします。
systemctl restart httpd
pm.status_path の動作確認
pm.status_path
の動作確認のために以下のコマンドを実行します。
curl http://localhost/fpm-status
以下のような結果であれば正常です。
# curl http://localhost/fpm-status pool: www process manager: dynamic start time: 20/Sep/2024:02:48:01 +0000 start since: 11848 accepted conn: 792 listen queue: 0 max listen queue: 0 listen queue len: 0 idle processes: 4 active processes: 1 total processes: 5 max active processes: 1 max children reached: 0 slow requests: 0
表示されている値の意味は以下の公式ドキュメントからご確認ください。
https://www.php.net/manual/ja/fpm.status.php
Datadog エージェントの設定
php-fpm の情報を取得するための Datadog エージェントの設定ファイルを作成します。
この環境でのファイルパスは /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
とします。
vi /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
設定ファイルの中身は以下とします。
init_config: instances: - status_url: http://localhost/fpm-status
Datadog エージェント再起動
Datadog エージェントの設定ファイルの設定が正しいかチェックをします。
datadog-agent configcheck
エラーが表示されないことを確認します。
以下のコマンドで Datadog エージェントの再起動をします。
systemctl restart datadog-agent
EC2 インスタンス側の設定は以上となります。
Datadog ダッシュボードで php-fpm の情報を確認する
※ Datadog のダッシュボードの詳しい使い方は割愛します。
以下はダッシュボード編集画面の Timeseries
のウィジェット作成画面でグラフ化するデータを選択するクエリの部分です。
ここまでの設定が正しければ、Metric
の隣のボックスで php_fpm
と入力すると以下のような候補が表示されます。
今回は php_fpm.processes.active
を選択します。
Datadog の公式ドキュメントに選択したデータの説明があります。
https://docs.datadoghq.com/ja/integrations/php_fpm/?tab=%E3%83%9B%E3%82%B9%E3%83%88
php_fpm.processes.active
Total number of active processes
日本語訳
アクティブなプロセスの合計数
これは先ほど curl
で pm.status_path
の動作確認時に表示された active processes
に該当します。
ダッシュボードのウィジェットで php_fpm.processes.active
を選択して表示したグラフが以下になります。
このグラフではサーバーへのリクエストの増加に合わせて php-fpm のアクティブなプロセスの合計数が動的に変化していることが視覚的に分かります。
これで EC2 インスタンスにインストールした php-fpm の情報を Datadog でモニタリングすることが実現できました😆
以上になります!