跳到主內容

PHP-FPM Agent 服務

  記錄 PHP-FPM 設定方式

2024.09.27 修改設定流程系統是在 Debian 運行

  • 下載 SNMP 套件
wget https://github.com/librenms/librenms-agent/raw/master/snmp/php-fpm -O /etc/snmp/php-fpm
  • 設定可執行
chmod +x /etc/snmp/php-fpm
  • 安裝必要套件
apt-get install -y libfile-slurp-perl libjson-perl libstring-shellquote-perl libmime-base64-perl
  • 到 SNMP 下新增 PHP-FPM 套件服務 vim /etc/snmp/snmpd.conf
extend phpfpmsp /etc/snmp/php-fpm

# 指令
echo "extend phpfpmsp /etc/snmp/php-fpm" >> /etc/snmp/snmpd.conf
  • 重啟 SNMP 服務
systemctl restart snmpd.service
  • 建立設定檔 vim /usr/local/etc/php-fpm_extend.json
{
"pools":{
         "站台名稱": "https://站台位置/fpm-status",
         "foobar": "https://foo.bar/fpm-status"
    }
}
  • 啟用 PHP-FPM 即時監控功能
  • PHP-FPM 這個功能預設是沒有啟用的,需先手動設定 PHP-FPM 裡的設定檔 vim /etc/php/8.3/fpm/pool.d/www.conf
# pm.status_path 修改成自己想要命名的名稱
pm.status_path = /status or /php_fpm_status

# ping.path 修改成自己想要命名的名稱
ping.path = /ping or /php_fpm_ping

# ping 回應內容
ping.response = pong or hello

指令
sed -i "s|^;pm.status_path = /status.*$|pm.status_path = /status|" /etc/php/8.3/fpm/pool.d/www.conf
sed -i "s|^;ping.path = /ping.*$|ping.path = /ping|" /etc/php/8.3/fpm/pool.d/www.conf
sed -i "s|^;ping.response = pong.*$|ping.response = pong|" /etc/php/8.3/fpm/pool.d/www.conf
  • 存檔後重啟 php-fpm 服務
systemctl restart php8.3-fpm
  • 測試服務是否可以正常運行 ./php-fpm,執行後會出現下面的文字是正常的

  • Nginx 設定檔
location ~ ^/(status|ping)$ {
        access_log off;
        allow 127.0.0.1;
        deny all;
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        #如果是端口请用 fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
  • 啟重服務
systemctl restart nginx or systemctl reload nginx
  • 用網址連線看是否成功

http://ip/status
http://ip/ping

  • status 設定成功畫面如下並且顯示當下的狀態資訊

  • ping 設定成功畫面如下

  • php-fpm status 詳解
訊息 說明
pool pool 名稱,通常是 www
process manager staticdynamicondemand
start time FPM 啟動的時間點。若重新載入(reload)也會改變這個時間
start since FPM 啟動後所經過的秒數。
accepted conn 已接收到的連線數量。
listen queue 目前正在等待處理的連線數量,若這個值不是 0,就代表 FPM 的行程數量可能不夠,要考慮增加行程數量。
max listen queue FPM 啟動後,等待處理連線數量的最大紀錄。
listen queue len 等待處理連線佇列的長度。
idle processes 閒置的 FPM 行程數量。
active processes 工作中的 FPM 行程數量。
total processes 所有的 FPM 行程數量。
max active processes FPM 啟動後,工作中 FPM 行程數量的最大紀錄。
max children reached FPM 啟動後,FPM 行程達到上限值的次數,若這個值不是 0,代表 PHP-FPM 的上限值設定太低,要考慮增加上限值。
slow requests 處理過慢的連線數,若這個值不是 0,代表某些 PHP 程式的處理速度太慢,最常見的因素就是 MySQL 資料庫查詢過慢。
  • full 詳解
訊息 說明
pid FPM 的行程 ID。
state 行程狀態,Idle 代表閒置,Running 代表工作中。
start time 行程啟動的時間點。
start since 行程啟動後所經過的秒數。
requests 處理過的連線數。
request duration 連線時間(µs)。
request method 連線方式(GETPOST 等)。
request URI 連線的網址。
content length POST 的資料長度。
user 認證的使用者名稱(PHP_AUTH_USER)。
script 主要執行的 PHP 指令稿。
last request cpu 上一個連線所耗費的 CPU 百分比(只有閒置的行程才會顯示)。
last request memory 上一個連線所耗費的最大記憶體(只有閒置的行程才會顯示)。

建議在設定完每個 Agent 服務的,最好先到 /etc/snmp/ 下手動運行一次服務的 Agent 看是否有正確回報數值

參考相關網站