一、開始之前
本文内容是使用Zabbix 5.0自帶的PHP-FPM Template進行的監控和圖形展示。監控之後,繪制出的PHP-FPM運作時狀态的部分圖形如下:
二、開啟PHP-FPM狀态統計
修改php-fpm配置檔案,取消注釋以下兩行内容并按照需要修改:
# cat /usr/local/php-fastcgi/etc/php-fpm.d/www.conf
pm.status_path = /php-fpm-status
ping.path = /php-fpm-ping
修改之後重新加載php-fpm。
編輯Nginx虛拟主機配置,添加以下内容:
# cat /usr/local/nginx/conf/nginx.conf
server {
...
location ~ ^/php-fpm-(status|ping)$ {
access_log off;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_pass unix:/usr/local/php-fastcgi/var/run/php-fpm.sock;
allow 127.0.0.1;
deny all;
}
}
注意:因為我的PHP-FPM監聽的是unix socket,是以這裡“fastcgi_pass”指向socket檔案的位址。如果PHP-FPM監聽的是IP:Port,則“fastcgi_pass”指向“127.0.0.1:9000”。
修改之後重新加載Nginx配置檔案。
測試:
# curl http://127.0.0.1/php-fpm-ping
pong
# curl http://127.0.0.1/php-fpm-status
pool: www
process manager: dynamic
start time: 25/Apr/2021:16:35:34 +0800
start since: 3925
accepted conn: 2577
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 2
active processes: 1
total processes: 3
max active processes: 3
max children reached: 0
slow requests: 0
PHP-FPM狀态各個參數的含義:
- pool:PHP池名稱;
- process manager:PHP程序管理方式,dynamic或者static;
- start time:PHP-FPM啟動時間;
- start since:PHP-FPM運作時間;
- accepted conn:目前池接受的請求數;
- listen queue:請求等待隊列。如果這個值不為0,那麼需要增加FPM的程序數量;
- max listen queue:請求等待隊列的最大值;
- listen queue len:socket等待隊列長度;
- idle processes:空閑程序數量;
- active processes:活躍程序數量;
- total processes:總程序數量;
- max active processes:最大的活躍程序數量;
- max children reached:子程序達到最大數量的次數。如果這個數量不為0,說明最大程序數量過小,可以适當調整。
三、Zabbix前端頁面連結模闆
在Zabbix前端頁面,點選“Configuration” -> “Templates”,找到名稱為“Template App PHP-FPM by Zabbix agent”的模闆。
該模闆定義了幾個重要的參數:
-
:PHP-FPM狀态的Nginx主機名或IP位址,預設是“localhost”;{$PHP_FPM.HOST}
-
:PHP-FPM ping狀态頁面位址,預設是“ping”,這裡是“php-fpm-ping”,{$PHP_FPM.PING.PAGE}
-
:PHP-FPM ping的傳回值,預設是“pong”;{$PHP_FPM.PING.REPLY}
-
:PHP-FPM狀态的Nginx主機的端口号,預設值是“80”;{$PHP_FPM.PORT}
-
:PHP-FPM狀态頁面位址,預設值是“status”,這裡是”php-fpm-status“。{$PHP_FPM.STATUS.PAGE}
如果需要修改這幾個參數的值,點選模闆名稱,選擇“Macros(宏)”,如下圖:
将該模闆連結到對應的伺服器上,等待采集資料即可。
注意事項: 如果在PHP配置中,設定了隐藏PHP版本号,則該模闆無法正常擷取到PHP版本号。
四、還沒結束
在我使用該模闆監控PHP-FPM時,無論PHP-FPM程序是否運作,從Zabbix前端頁面的“Latest data”裡顯示的“PHP-FPM: Ping”的值都是“down(0)”,也就是說Zabbix無法正常判斷PHP-FPM程序的存活狀态,我用的Zabbix版本是5.0.10。之後嘗試解決了該問題。
在Zabbix前端頁面,點選“Configuration” -> “Templates”,找到名稱為“Template App PHP-FPM by Zabbix agent”的模闆,點選“Items”檢視所有的監控項,發現“PHP-FPM: Ping”監控項是依賴于“PHP-FPM: php-fpm_ping”監控項的。
“PHP-FPM: php-fpm_ping”監控項使用“web.page.get”作為key,使用
zabbix_get
指令對這個key做了測試,當PHP-FPM正常運作時,結果如下:
# /usr/local/zabbix-agent/bin/zabbix_get -s 'server01' -k 'web.page.get["127.0.0.1","php-fpm-ping","80"]'
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 25 Apr 2021 08:27:33 GMT
Content-Type: text/plain;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
4
pong
0
手動停止PHP-FPM程序,再次執行
zabbix_get
指令,結果如下:
# /usr/local/zabbix-agent/bin/zabbix_get -s 'server01' -k 'web.page.get["127.0.0.1","php-fpm-ping","80"]'
HTTP/1.1 502 Bad Gateway
Server: nginx
Date: Sun, 25 Apr 2021 08:04:02 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
a6
<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx</center>
</body>
</html>
0
于是将“PHP-FPM: php-fpm_ping”監控項的key修改為
web.page.regexp["{$PHP_FPM.HOST}","{$PHP_FPM.PING.PAGE}","{$PHP_FPM.PORT}","{$PHP_FPM.PING.REPLY}"]
,再次使用
zabbix_get
指令進行測試,PHP-FPM正常運作時的結果如下:
# /usr/local/zabbix-agent/bin/zabbix_get -s 'server01' -k 'web.page.regexp["127.0.0.1","php-fpm-ping","80","pong"]'
pong
修改之後的監控項見下圖:
等待下一次資料采集時,監控項“PHP-FPM: Ping”的值變成了“Up(1)”,這時Zabbix對PHP-FPM程序存活狀态的判斷是正常的。
參考連結:https://www.zabbix.com/documentation/5.0/manual/config/templates_out_of_the_box/zabbix_agent