zabbixを使用してphp-fpmサービスを監視します(16)

php-fpmサービスを監視するためにzabbixを使用する

1.php-fpmステータスモニタリングをオンにします

1.开启php-fpm状态监控
[root@192_168_81_220 ~]# vim /etc/php-fpm.d/www.conf
pm.status_path = /php_status

2.配置nginx连接php-fpm
[root@192_168_81_220 ~]# vim /etc/nginx/nginx.conf
        location /php_status {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
        
3.重启服务
[root@192_168_81_220 ~]# systemctl restart nginx
[root@192_168_81_220 ~]# systemctl restart php-fpm

2.監視ページをテストし、

[root@192_168_81_220 ~]# curl 127.0.0.1/php_status
pool:                 www
process manager:      dynamic
start time:           02/Nov/2020:17:09:24 +0800
start since:          39
accepted conn:        1
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

ここに画像の説明を挿入

accepts 4 // nginxが開始されてから受信したリクエストの数

処理済み4 // nginxが開始されてから処理されたリクエストの数

リクエスト// httpリクエストの総数

読み取り:0 //現在読み取られている接続要求ヘッダーの数

書き込み:1 //現在クライアントリクエストの数に応答しています

待機中:0 //現在待機中のリクエスト数

書き込み+待機の値は、アクティブな接続の値と等しくなければなりません

3.zabbixを使用してphp-fpmステータス値を監視します

アイデア:

1.最初にスクリプトを記述して値を取得します。これはWebページであるため、curlコマンドで取得できます。

2.スクリプトで関数を定義できます。各値は関数に対応します。最後に、大文字と小文字を区別して、パラメータとして渡された$ 1がその関数と一致することを確認します。一致する場合は、関数を実行してから実行します。アクセスURLを表示するために$ 2を定義します

3.パラメータを渡す形式で監視項目キーを定義します。これにより、キー値を定義して別の$ 1を書き込むことができます。

3.1。監視値を取得するためのスクリプトを作成する

スクリプト作成のアイデア:最初にcurlコマンドで取得したデータをファイルに保存し、次に現在の時刻とファイルの時刻の変数を定義して比較します。現在の時刻がファイルの時刻より60秒を超える場合は、ファイルを削除します。 curlコマンドとre-curlのデータを取得してファイルにインポートし、最後にさまざまな状態を定義する機能を通じて、主にファイルから状態値を取得し、どのパラメータを通過させるかを判断します。最後に、対応するパラメータのコマンドを実行して、監視値を取得します。

最後に、プロセスが動作しているかどうかを監視するには、psを使用してプロセスを確認し、wc -lを使用して数値を取得し、最後にこの値をエコーし​​て、トリガーを作成します。最新の値は0に等しく、プロセスは存在しません。

#!/bin/bash
#这是一个简单的监控php-fpm状态值的脚本
#20201103 	---jxl
comm_para=$1
PHP_URL=$2
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/php_status
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=`ps aux | grep php | grep -v grep | grep -v php-fpm_status.sh | 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

3.2。カスタム監視項目構成ファイルを作成します

[root@192_168_81_220 ~]# cat /etc/zabbix/zabbix_agentd.d/php-fpm.conf 
UserParameter=php_status[*],/bin/bash /etc/zabbix/scripts/php-fpm_status.sh $1 $2

[root@192_168_81_220 ~]# systemctl restart zabbix-agent


zabbix-server测试
[root@zabbix-server ~]# zabbix_get -s 192.168.81.220 -k php_status[max_active_processes,http://192.168.81.220/php_status]
1

3.3。監視テンプレートを作成します

3.3.1。クリックしてテンプレートを作成します

ここに画像の説明を挿入

設定名:php-fpm status
ここに画像の説明を挿入

3.3.2。マクロの設定

このマクロは実際にはzabbixが変数を設定する場所であり、マクロはスクリプトのphp_urlに対応している必要があります

マクロ:{$ PHP_URL}値:http://127.0.0.1/php_status

ここに画像の説明を挿入

3.3.3。アプリケーションセットの作成

ここに画像の説明を挿入

3.3.4。監視項目を作成する

名前:start_since実行時間

キー値:php_status [start_since、{$ PHP_URL}]

スクリプトの判定時間は60秒であるため、更新間隔:60秒

アプリケーションセットの選択:php-fpmステータス

ここに画像の説明を挿入

他の監視項目の構成は同じですが、パラメータのキー値が異なります

すべての監視項目のキー値

php_status[start_since,{$PHP_URL}]
php_status[accepted_conn,{$PHP_URL}]
php_status[listen_queue,{$PHP_URL}]
php_status[max_listen_queue,{$PHP_URL}]
php_status[listen_queue_len,{$PHP_URL}]
php_status[idle_processes,{$PHP_URL}]
php_status[active_processes,{$PHP_URL}]
php_status[total_processes,{$PHP_URL}]
php_status[active_processes,{$PHP_URL}]
php_status[max_active_processes,{$PHP_URL}]
php_status[max_children_reached,{$PHP_URL}]
php_status[slow_requests,{$PHP_URL}]
php_status[check,{$PHP_URL}]

3.3.5。トリガーを作成する

主にphp-fpmプロセスのトリガーを作成します

ここに画像の説明を挿入

{php-fpm status:php_status[check,{$PHP_URL}].last()}=0

ここに画像の説明を挿入

3.3.6。グラフィックを作成する

ここに画像の説明を挿入

グラフィックが追加されます

ここに画像の説明を挿入

3.3.7。テンプレートの作成が完了しました

ここに画像の説明を挿入

4.ホストアプリケーションのphp-fpm監視テンプレートの監視

構成-ホスト-テンプレート-選択-追加-更新

ここに画像の説明を挿入

テンプレートリンクが成功しました

ここに画像の説明を挿入

5.最新のデータを表示する

監視-最新のデータ-ホストアプリケーションセットの選択

ここに画像の説明を挿入

6.php-fpmプロセスの存在をトリガーしてアラートを出します

[root@192_168_81_220 ~]# systemctl stop php-fpm

[root@192_168_81_220 ~]# ps aux | grep php | grep -v grep | grep -v php_status.sh | wc -l
0

进程数已经是0,坐等监控报警

ダッシュボード表示

ここに画像の説明を挿入

アラームSMS

ここに画像の説明を挿入

7. grafanaを使用して、php-fpmステータス監視グラフィックを生成します

7.1。グラフィックを作成する

クリックしてグラフィックを作成

ここに画像の説明を挿入

棒グラフを選択

ここに画像の説明を挿入

7.2。監視項目を追加する

5分以内の期間を選択してください

実行時間の監視項目は無限大になりますので、このグラフには追加しないでください。

ここに画像の説明を挿入

7.3。グラフの名前を設定します

3番目のアイコン

ここに画像の説明を挿入

7.4。グラフィックを保存する

ここに画像の説明を挿入

7.5。グラフィックを表示する

過去15分間のグラフを表示する

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_44953658/article/details/114971605