跳到主內容

PHP-FPM Agent 服務

  記錄 PHP-FPM 設定方式

  • 下載 SNMP 套件
wget https://github.com/librenms/librenms-agent/raw/master/snmp/phpfpmsp -O /etc/snmp/phpfpmsp

設定可執行
chmod +x /etc/snmp/phpfpmsp
  • 到 SNMP 下新增 PHP-FPM 套件服務
vim /etc/snmp/snmpd.conf

extend phpfpmsp /etc/snmp/phpfpmsp

重啟 SNMP 服務
systecmctl restart snmpd
  • 啟用 PHP-FPM 即時監控功能 PHP-FPM 這個功能預設是沒有啟用的,需先手動設定 PHP-FPM 裡的設定檔
vim /etc/php-fpm.d/www.conf

pm.status_path 修改成自己想要命名的名稱
pm.status_path = /status or /php_fpm_status

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

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

:wq
存檔後重啟 php-fpm 服務
systemctl restart php-fpm
  • Nginx 設定檔
location ~ ^/(status|php_fpm_ping)$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        #如果是端口请用 fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

啟重 nginx
systemctl restart nginx or systemctl nginx relaod
  • 用網址連線看是否成功

http://ip/status
http://ip/php_fpm_ping

  • 如果設定成功畫面會如下 status

php-fpm-status.png

  • ping 成功畫面,會回傳剛剛在 php-fpm 設定檔裡面的值

php-fpm-ping.png

  • 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 看是否有正確回報數值

參考相關網站