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 | static 、dynamic 或 ondemand |
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 | 連線方式(GET 、POST 等)。 |
request URI | 連線的網址。 |
content length | POST 的資料長度。 |
user | 認證的使用者名稱(PHP_AUTH_USER )。 |
script | 主要執行的 PHP 指令稿。 |
last request cpu | 上一個連線所耗費的 CPU 百分比(只有閒置的行程才會顯示)。 |
last request memory | 上一個連線所耗費的最大記憶體(只有閒置的行程才會顯示)。 |
建議在設定完每個 Agent 服務的,最好先到 /etc/snmp/ 下手動運行一次服務的 Agent 看是否有正確回報數值