Dockerで作る開発環境:php-fpm-exporterの導入

スポンサーリンク
Dockerで作る開発環境:php-fpm-exporterの導入 ノウハウ
Dockerで作る開発環境:php-fpm-exporterの導入
この記事は約8分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、dockerで構築した開発環境において、php-fom-exporterを導入した手順をご紹介します。

スポンサーリンク

実行環境

この記事は、特定の開発環境を前提として書かれています。もし興味がある場合は、その開発環境を構築するための説明が書かれている記事を参考にしてください。該当記事は下記になります。

ただ、この記事で紹介している修正内容がたくさんあるので、その修正を反映した最新版のプログラムをダウンロードして、参照することをおすすめします。該当のプログラムの詳細については、下記のページで確認できます。

背景

Dockerで構築したphp-fpmにprometheusのphp-fpm-explorerを導入することで、PHP-FPMプールの状態を監視し、メトリクスを収集できます。これにより、アプリケーションのパフォーマンスを可視化し、問題が発生した場合に早期に対処することができます。また、php-fpm-explorerによって、PHP-FPMプールのリソース使用状況や負荷に関する詳細な情報を取得することができます。

ディレクトリ構造

ディレクトリ構造は下記のようになっています。赤字の箇所が新規&更新、削除になります。

.
├── LICENSE
├── Makefile
├── README.md
└── app
    ├── apache-exporter
    ├── compose.yml
    ├── flyway
    ├── grafana
    │   ├── dashboard.yml
    │   └── dashboards
    │          └── php-fpm.json
    ├── influxdb
    ├── k6
    ├── memcached
    ├── memcached-exporter
    ├── php-fpm
    │   └── www.conf
    ├── php-fpm-exporter
    │   └── Dockerfile
    ├── mongo
    ├── mysql
    ├── mysqld-exporter
    ├── prometheus
    │   └── prometheus.yml
    ├── schemaspy
    ├── web
    └── xhgui

compose.yml

下記の赤字内容でファイル(compose.yml) 76 行目に追加します。

   php-fpm:
    build: ./php-fpm
    container_name: php-fpm
    volumes:
      - ./php-fpm/CodeIgniter-3.1.13/application:/var/www/application
      - ./php-fpm/CodeIgniter-3.1.13/system:/var/www/system
      - ./php-fpm/index.php:/var/www/html/index.php
      - ./php-fpm/info.php:/var/www/html/info.php
      - ./php-fpm/xdebug.ini:/etc/opt/remi/php74/php.d/xdebug.ini
      - ./php-fpm/www.conf:/usr/local/etc/php-fpm.d/www.conf
    networks:
      - net

下記の内容をファイル(compose.yml) 213-224 行目に追加します。

  php-fpm-exporter:
    build: ./php-fpm-exporter
    container_name: php-fpm-exporter
    restart: unless-stopped
    environment:
      PHP_FPM_SCRAPE_URI: "tcp://php-fpm:9000/status"
      PHP_FPM_LOG_LEVEL: "debug"
    ports:
      - 9253:9253
    networks:
      - net

php-fpm/www.conf

下記の手順で新規ファイル(php-fpm/www.conf) を作成します。

make setup
cd app
docker compose cp php-fpm:/usr/local/etc/php-fpm.d/www.conf ./php-fpm/www.conf

下記の赤字内容でファイル(php-fpm/www.conf) 239行目を更新します。

pm.status_path = /status

php-fpm-exporter/Dockerfile

下記の内容でファイル(web/Dockerfile) を更新します。

FROM hipages/php-fpm_exporter:latest

prometheus/prometheus.yml

下記の赤字内容でファイル(prometheus/prometheus.yml) を更新します。

global:
  scrape_interval: 5s
scrape_configs:
  - job_name: 'docker-for-mac'
    static_configs:
      - targets: ['docker.for.mac.host.internal:9323']
  - job_name: 'apache'
    static_configs:
      - targets: ['apache-exporter:9117']
  - job_name: 'php-fpm'
    static_configs:
      - targets: ['php-fpm-exporter:9253']
  - job_name: 'memcached'
    static_configs:
      - targets: ['memcached-exporter:9150']
  - job_name: 'mysql'
    static_configs:
      - targets: ['mysqld-exporter:9104']

grafana/dashboard.yml

下記の赤字内容をファイル(grafana/dashboard.yml) 26-36行目に追記します。

  - name: 'php-fpm'
    orgId: 1
    folder: 'Service'
    type: file
    disableDeletion: false
    updateIntervalSeconds: 10
    allowUiUpdates: false
    options:
      path: /var/lib/grafana/dashboards/php-fpm.json
      foldersFromFilesStructure: false

grafana/dashboards/php-fpm.json

jsonファイルは行数が多いので、ここでの掲載は割愛します。

作成方法は、grafanaのdashboardで4912をインポートして、JSON出力したものになります。詳細は、GitHUBのコードをご参照ください。

動作確認

下記のコマンドを実行して、サービスを起動します。

make setup

ブラウザで「http://localhost:3000/dashboards」にアクセスして、php-fpmのダッシュボードが表示されていて、ダッシュボードを開いたときに、メトリクス情報が取得できていれば、成功です。

解説

php-fpm-exporterについて

php-fpm-exporterは、PHP-FPMのメトリクスをPrometheus形式で公開するためのツールです。以下は、php-fpm-exporterが収集できる主な情報です。

  • プロセス数(現在の起動中のプロセス数、空きプロセス数、使用中のプロセス数)
  • リクエスト数(ステータス別のリクエスト数、処理時間別のリクエスト数)
  • メモリ使用量(メモリ使用量、最大メモリ使用量、オーバーフロー数)
  • コネクション数(アクティブなコネクション数、最大同時接続数、接続数の合計)
  • ワーカープールの状態(ワーカープールサイズ、最小ワーカープールサイズ、最大ワーカープールサイズ)

また、php-fpm-exporterは、PHP-FPMのポート番号やソケットファイルのパスなど、PHP-FPMへの接続情報も収集できます。これらの情報を用いることで、PHP-FPMの状態をリアルタイムにモニタリングすることが可能になります。

おわりに

今日は、dockerで構築した開発環境にphp-fpm-exporterを導入し、grafanaでメトリクス情報を可視化しました。ぜひ、性能改善等に使用してみてください。

今回使用したファイルは下記のGitHubにタグ付けしています。

もし、質問等あればコメントください。確認後、ご連絡いたします。随時、エンジニア案件も相談可能ですので、よろしくお願いいたします。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました