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分間のグラフを表示する