php-status監控流程

不太聪明的大鹅發表於2024-06-08

1.開啟php的狀態頁功能

#基於php-fpm程序做的實驗

yum install php-fpm -y

修改配置檔案,開啟php,status功能即可,開啟如下引數即可
要求你訪問php狀態頁面的入口就是/status_php

[root@web-7 ~]#grep 'status_'  /etc/php-fpm.d/www.conf 
pm.status_path = /status_php

php-fpm,nginx轉發過去的
  1. 設定nginx轉發
[root@web-7 /etc/nginx/conf.d]#cat status.conf 
server{

listen 80;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
}


location /php_status {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME html$fastcgi_script_name;
    include fastcgi_params;

}


}

重啟nginx,和php-fpm倆程序

[root@web-7 ~]#systemctl restart php-fpm.service nginx.service 

訪問測試php_status

欄位解釋

[root@web-7 /etc/nginx/conf.d]#curl 127.0.0.1/php_status
pool:                 www
process manager:      dynamic
start time:           04/Jul/2022:17:27:43 +0800
start since:          158
accepted conn:        2
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       4
active processes:     1
total processes:      5
max active processes: 1
max children reached: 0
slow requests:        0
[root@web-7 /etc/nginx/conf.d]#


pool – fpm池子名稱,大多數為www
process manager – 程序管理方式,值:static, dynamic or ondemand. dynamic
start time – 啟動日期,如果reload了php-fpm,時間會更新
start since – 執行時長
accepted conn – 當前池子接受的請求數
listen queue – 請求等待佇列,如果這個值不為0,那麼要增加FPM的程序數量
max listen queue – 請求等待佇列最高的數量
listen queue len – socket等待佇列長度
idle processes – 空閒程序數量
active processes – 活躍程序數量
total processes – 總程序數量
max active processes – 最大的活躍程序數量(FPM啟動開始算)
max children reached - 大道程序最大數量限制的次數,如果這個數量不為0,那說明你的最大程序數量太小了,請改大一點。
slow requests – 啟用了php-fpm slow-log,緩慢請求的數量

自定義的key php_status[採集的關鍵字]

UserParameter=php_status[*],/etc/zabbix/zabbix_agentd.d/php_status.sh  $1

寫指令碼簡單的監控php-fpm狀態值的指令碼

#!/bin/bash
# 這是一個簡單的監控php-fpm狀態值的指令碼

comm_para=$1
PHP_URL=$2
cmd="/usr/bin/curl $url"
cachefile=/tmp/php_status.txt
port=80

file_time=`stat -c %Y $cachefile`
now_time=`date +%s`
rm_file=$(($now_time-$file_time))
if [ -z $2 ];then
    url=http://127.0.0.1:$port/status_php
else
    url=$PHP_URL
fi
cmd="/usr/bin/curl $url"

if [ ! -e $cachefile ];then
    $cmd > $cachefile 2>/dev/null
fi

if [ $rm_file -gt 60 ];then
    rm -rf $cachefile
fi

if [ ! -f $cachefile ];then
    $cmd > $cachefile 2>/dev/null
fi

start_since() {
    #執行時長
    cat $cachefile | awk '/since/{print $3}'
    exit 0;
}

accepted_conn() {
    cat $cachefile | awk '/accepted/{print $3}'
    exit 0;
}

listen_queue(){ 
        cat $cachefile | awk '{if(NR==6){print $3}}'
    exit 0;
}

max_listen_queue(){
    cat $cachefile | awk '{if(NR==7){print $4}}'
    exit 0;
}

listen_queue_len() {
    cat $cachefile | awk '{if(NR==8){print $4}}'
    exit 0;
}

idle_processes() {
    cat $cachefile | awk '/idle/{print $3}'
    exit 0;
}

active_processes() {
    cat $cachefile | awk '{if(NR==10){print $3}}'
    exit 0;
}

total_processes() {
    cat $cachefile | awk '{if(NR==11){print $3}}'
        exit 0;
}

max_active_processes() {
    cat $cachefile | awk '{if(NR==12){print $4}}'
        exit 0;
}

max_children_reached() {
    cat $cachefile | awk '{if(NR==13){print $4}}'
        exit 0;
}

slow_requests() {
    cat $cachefile | awk '{if(NR==14){print $3}}'
        exit 0;
}

check() {
        php_pro_count=`ss -tunlp|grep php-fpm|wc -l`
        echo $php_pro_count
}

case "$comm_para" in 
start_since)
    start_since 
    ;;
accepted_conn)
    accepted_conn
    ;;
listen_queue)
    listen_queue
    ;;
max_listen_queue)
    max_listen_queue
    ;;
listen_queue_len)
    listen_queue_len
    ;;
idle_processes)
    idle_processes
    ;;
active_processes)
    active_processes
    ;;
total_processes)
    total_processes
    ;;
max_active_processes)
    max_active_processes
    ;;
max_children_reached)
    max_children_reached
    ;;
slow_requests)
    slow_requests
    ;;
check)
    check
    ;;
*)    
    echo "invalid status"
    exit 2;
esac

改許可權

[root@web-7 /etc/zabbix/zabbix_agentd.d]#chmod +x php_status.sh 
[root@web-7 /etc/zabbix/zabbix_agentd.d]#chown -R zabbix.zabbix ./*
[root@web-7 /etc/zabbix/zabbix_agentd.d]#ll
total 20
-rw-r--r-- 1 zabbix zabbix   87 Jul  4 13:44 nginx_status.conf
-rwxr-xr-x 1 zabbix zabbix 1706 Jul  4 13:51 nginx_status.sh
-rwxr-xr-x 1 zabbix zabbix 1095 Jul  4 17:33 php_status.sh
-rw-r--r-- 1 zabbix zabbix   52 Jun 29 19:06 tcp_status.conf
-rw-r--r-- 1 zabbix zabbix 1531 Jul 29  2019 userparameter_mysql.conf
3. 重啟agent
[root@web-7 /etc/zabbix/zabbix_agentd.d]#systemctl restart zabbix-agent.service 

4.手動zabbix_get測資料
[root@zabbix-server-71 ~]#zabbix_get -s 10.0.0.7 -k php_status[total_processes]
5

配置zabbix-UI的模板

監控項克隆新增
關聯web7機器
新增圖形資料,給模板加
檢視web7的圖形資料即可

新增觸發器,判斷php如果掛了, 立即釘釘報警

判斷php-fpm程序掛了立即釘釘報警

相關文章