これは何?

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

日本語訳

アクティブなプロセスの合計数

これは先ほど curlpm.status_path の動作確認時に表示された active processes に該当します。

ダッシュボードのウィジェットで php_fpm.processes.active を選択して表示したグラフが以下になります。

このグラフではサーバーへのリクエストの増加に合わせて php-fpm のアクティブなプロセスの合計数が動的に変化していることが視覚的に分かります。


これで EC2 インスタンスにインストールした php-fpm の情報を Datadog でモニタリングすることが実現できました😆

以上になります!