Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP-FPMのみでメトリクスを出力してみたので, その設定例と落とし穴, 外部ツールを使...

PHP-FPMのみでメトリクスを出力してみたので, その設定例と落とし穴, 外部ツールを使う場合との違いについてお話しします!

Avatar for Moriwaki Daichi

Moriwaki Daichi

October 11, 2025
Tweet

Other Decks in Technology

Transcript

  1. 【 対象 🎯 】 PHP-FPM のメトリクスをまだ取っていない⽅ 【 ゴール 🏁 】

    取得できるメトリクスの違いを⼤まかにでも把握してもらうことで, メトリクスを取得する際の判断材料の1つにしてもらう
  2. つまり, 以下のようにすることで データ形式を変換する外部ツールを使わずにメトリクスの取得が可能︕ PHP-FPM Webサーバー OpenMertics形式に対応した 監視ツール Scrape php-fpm:9001/metrics?openmetrics localhost:8001/metrics

    設定を編集 メトリクス⽤のエンドポイントを公開 メトリクスの出⼒⾃体は, PHP-FPMのみで完結しますが, メトリクスを収集する際には, FastCGI形式からHTTP形式に変換する必要があるため Webサーバーを経由する必要があります.
  3. つまり, 以下のようにすることで データ形式を変換する外部ツールを使わずにメトリクスの取得が可能︕ PHP-FPM Webサーバー OpenMertics形式に対応した 監視ツール Scrape php-fpm:9001/metrics?openmetrics localhost:8001/metrics

    設定を編集 メトリクス⽤のエンドポイントを公開 メトリクスの出⼒⾃体は, PHP-FPMのみで完結しますが, メトリクスを収集する際には, FastCGI形式からHTTP形式に変換する必要があるため Webサーバーを経由する必要があります.
  4. つまり, 以下のようにすることで データ形式を変換する外部ツールを使わずにメトリクスの取得が可能︕ PHP-FPM Webサーバー OpenMertics形式に対応した 監視ツール Scrape php-fpm:9001/metrics?openmetrics localhost:8001/metrics

    設定を編集 メトリクス⽤のエンドポイントを公開 メトリクスの出⼒⾃体は, PHP-FPMのみで完結しますが, メトリクスを収集する際には, FastCGI形式からHTTP形式に変換する必要があるため Webサーバーを経由する必要があります.
  5. つまり, 以下のようにすることで データ形式を変換する外部ツールを使わずにメトリクスの取得が可能︕ PHP-FPM Webサーバー OpenMertics形式に対応した 監視ツール Scrape php-fpm:9001/metrics?openmetrics localhost:8001/metrics

    設定を編集 メトリクス⽤のエンドポイントを公開 メトリクスの出⼒⾃体は, PHP-FPMのみで完結しますが, メトリクスを収集する際には, FastCGI形式からHTTP形式に変換する必要があるため Webサーバーを経由する必要があります.
  6. つまり, 以下のようにすることで データ形式を変換する外部ツールを使わずにメトリクスの取得が可能︕ PHP-FPM Webサーバー OpenMertics形式に対応した 監視ツール Scrape php-fpm:9001/metrics?openmetrics localhost:8001/metrics

    設定を編集 メトリクス⽤のエンドポイントを公開 メトリクスの出⼒⾃体は, PHP-FPMのみで完結しますが, メトリクスを収集する際には, FastCGI形式からHTTP形式に変換する必要があるため Webサーバーを経由する必要があります.
  7. つまり, 以下のようにすることで データ形式を変換する外部ツールを使わずにメトリクスの取得が可能︕ PHP-FPM Webサーバー OpenMertics形式に対応した 監視ツール Scrape php-fpm:9001/metrics?openmetrics localhost:8001/metrics

    設定を編集 メトリクス⽤のエンドポイントを公開 メトリクスの出⼒⾃体は, PHP-FPMのみで完結しますが, メトリクスを収集する際には, FastCGI形式からHTTP形式に変換する必要があるため Webサーバーを経由する必要があります.
  8. つまり, 以下のようにすることで データ形式を変換する外部ツールを使わずにメトリクスの取得が可能︕ PHP-FPM Webサーバー OpenMertics形式に対応した 監視ツール Scrape php-fpm:9001/metrics?openmetrics localhost:8001/metrics

    設定を編集 メトリクス⽤のエンドポイントを公開 メトリクスの出⼒⾃体は, PHP-FPMのみで完結しますが, メトリクスを収集する際には, FastCGI形式からHTTP形式に変換する必要があるため Webサーバーを経由する必要があります.
  9. つまり, 以下のようにすることで データ形式を変換する外部ツールを使わずにメトリクスの取得が可能︕ PHP-FPM Webサーバー OpenMertics形式に対応した 監視ツール Scrape php-fpm:9001/metrics?openmetrics localhost:8001/metrics

    設定を編集 メトリクス⽤のエンドポイントを公開 メトリクスの出⼒⾃体は, PHP-FPMのみで完結しますが, メトリクスを収集する際には, FastCGI形式からHTTP形式に変換する必要があるため Webサーバーを経由する必要があります.
  10. つまり, 以下のようにすることで データ形式を変換する外部ツールを使わずにメトリクスの取得が可能︕ PHP-FPM Webサーバー OpenMertics形式に対応した 監視ツール Scrape php-fpm:9001/metrics?openmetrics localhost:8001/metrics

    設定を編集 メトリクス⽤のエンドポイントを公開 メトリクスの出⼒⾃体は, PHP-FPMのみで完結しますが, メトリクスを収集する際には, FastCGI形式からHTTP形式に変換する必要があるため Webサーバーを経由する必要があります.
  11. 【 この⽅法で取得できたメトリクスの⼀覧 】 l phpfpm_up l PHP-FPM上で動的プロセス管理(dynamic PM)を使⽤したwwwプールに到達できますか︖ l phpfpm_total_processes

    l アクティブプロセスとアイドルプロセスの数 l phpfpm_active_processes l アクティブプロセスの数 l phpfpm_idle_processes l アイドルプロセスの数 l phpfpm_max_active_processes l FPMの起動以降にアクティブになったプロセスの最⼤数 l phpfpm_max_children_reached l プロセス制限に達した回数(pmがさらに⼦プロセスを起動しようとする際に発⽣) l (pm 『dynamic』 および 『ondemand』 でのみ有効) l phpfpm_start_since l FPMが起動してから経過した秒数 l phpfpm_listen_queue l 待機接続キュー内のリクエスト数 l phpfpm_max_listen_queue l FPMの起動以降、保留中の接続キューに蓄積されたリクエストの最⼤数 l phpfpm_listen_queue_length l 待機接続のソケットキューのサイズ l phpfpm_slow_requests l 『request_slowlog_timeout』 値を超えたリクエストの数 l phpfpm_accepted_connections l プールが受け付けたリクエストの数 l phpfpm_memory_peak l FPMが開始されてからのメモリ使⽤量のピーク値
  12. 【 この⽅法で取得できたメトリクスの⼀覧 】 l phpfpm_up l PHP-FPM上で動的プロセス管理(dynamic PM)を使⽤したwwwプールに到達できますか︖ l phpfpm_total_processes

    l アクティブプロセスとアイドルプロセスの数 l phpfpm_active_processes l アクティブプロセスの数 l phpfpm_idle_processes l アイドルプロセスの数 l phpfpm_max_active_processes l FPMの起動以降にアクティブになったプロセスの最⼤数 l phpfpm_max_children_reached l プロセス制限に達した回数(pmがさらに⼦プロセスを起動しようとする際に発⽣) l (pm 『dynamic』 および 『ondemand』 でのみ有効) l phpfpm_start_since l FPMが起動してから経過した秒数 l phpfpm_listen_queue l 待機接続キュー内のリクエスト数 l phpfpm_max_listen_queue l FPMの起動以降、保留中の接続キューに蓄積されたリクエストの最⼤数 l phpfpm_listen_queue_length l 待機接続のソケットキューのサイズ l phpfpm_slow_requests l 『request_slowlog_timeout』 値を超えたリクエストの数 l phpfpm_accepted_connections l プールが受け付けたリクエストの数 l phpfpm_memory_peak l FPMが開始されてからのメモリ使⽤量のピーク値 プロセスの状態を⽰すメトリクス リクエストの状態を⽰すメトリクス メモリの状態を⽰すメトリクス
  13. 【 落とし⽳ その2 】 画像の引⽤元: https://www.php.net/manual/ja/fpm.status.php PHP-FPM Linux系OS Unix Domain

    Socket Linux系OS上でUNIX Domain Socketを使う場合, listen queueに関するメトリクスは 常に0の値を取る
  14. l phpfpm_process_state l プロセスの状態 (Idle, Running, ...) l phpfpm_process_request_duration l

    リクエストの継続時間(マイクロ秒単位) l phpfpm_process_last_request_memory l 最後のリクエストが消費したメモリの最⼤量 l phpfpm_process_last_request_cpu l 最後のリクエストが消費したCPU使⽤率 l phpfpm_scrape_failures l PHP-FPMからのスクレイピング失敗件数 php-fpm_exporterでは前者の⽅法と⽐べて, 取得できるメトリクスは増えた︕ プロセス単位のメトリクス メトリクスのscrapeに関するメトリクス
  15. 【 つまり, ここまでで⾔いたかったこと 】 l 前者の⽅法と⽐べて, php-fpm_exporterを使った⽅が取得できるメトリクスは多い︕ l ⼀⽅で, こちらの⽅法を使っても,

    構築する環境次第で取得できるメトリクスに違いはあるので, 注意が必要︕ 詳細は記事に 書いてあります︕