天天看點

Zabbix5.0 監控PHP-FPM一、開始之前二、開啟PHP-FPM狀态統計三、Zabbix前端頁面連結模闆四、還沒結束

一、開始之前

本文内容是使用Zabbix 5.0自帶的PHP-FPM Template進行的監控和圖形展示。監控之後,繪制出的PHP-FPM運作時狀态的部分圖形如下:

Zabbix5.0 監控PHP-FPM一、開始之前二、開啟PHP-FPM狀态統計三、Zabbix前端頁面連結模闆四、還沒結束

二、開啟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.HOST}

    :PHP-FPM狀态的Nginx主機名或IP位址,預設是“localhost”;
  • {$PHP_FPM.PING.PAGE}

    :PHP-FPM ping狀态頁面位址,預設是“ping”,這裡是“php-fpm-ping”,
  • {$PHP_FPM.PING.REPLY}

    :PHP-FPM ping的傳回值,預設是“pong”;
  • {$PHP_FPM.PORT}

    :PHP-FPM狀态的Nginx主機的端口号,預設值是“80”;
  • {$PHP_FPM.STATUS.PAGE}

    :PHP-FPM狀态頁面位址,預設值是“status”,這裡是”php-fpm-status“。

如果需要修改這幾個參數的值,點選模闆名稱,選擇“Macros(宏)”,如下圖:

Zabbix5.0 監控PHP-FPM一、開始之前二、開啟PHP-FPM狀态統計三、Zabbix前端頁面連結模闆四、還沒結束

将該模闆連結到對應的伺服器上,等待采集資料即可。

注意事項: 如果在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
           

修改之後的監控項見下圖:

Zabbix5.0 監控PHP-FPM一、開始之前二、開啟PHP-FPM狀态統計三、Zabbix前端頁面連結模闆四、還沒結束

等待下一次資料采集時,監控項“PHP-FPM: Ping”的值變成了“Up(1)”,這時Zabbix對PHP-FPM程序存活狀态的判斷是正常的。

參考連結:https://www.zabbix.com/documentation/5.0/manual/config/templates_out_of_the_box/zabbix_agent