幽沉谢世事,俯默窥唐虞。这篇文章主要讲述使用zabbix监控php-fpm服务(十六)相关的知识,希望能为你提供帮助。
使用zabbix监控php-fpm服务 1.开启php-fpm状态监控
1.开启php-fpm状态监控
[root@192_168_81_220 ~]# vim /etc/php-fpm.d/www.conf
pm.status_path = /php_status2.配置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启动到现在共接收了多少个请求
handled 4 //nginx启动到现在共处理了多少个请求
requests //总的http请求数
Reading: 0 //当前读取的连接请求头数
Writing: 1 //当前响应客户端请求数
Waiting: 0 //当前的等待请求数
writing+waiting的值要等于Active connections的值
3.利用zabbix监控php-fpm状态值 思路:
? 1.首先编写获取值的脚本,由于是web页面,因此可以通过curl命令来抓取
? 2.脚本里面可以定义函数,每一个值对应一个函数,最后在使用case判断传参进来的$1与那个函数匹配,匹配正确则执行函数,再定义一个$2展示访问url
? 3.定义传参形式的监控项key,这样就可以定义一个key值,写不同的$1就可以了
3.1.编写获取监控值脚本
脚本编写思路:首先将curl命令获取的数据保存到一个文件中,然后定义当前时间和文件时间的变量,进行比较,如果当前时间比文件时间大于60s,则把curl命令的文件进行删除,重新curl获取数据并导入到文件中,最后通过定义各种状态的函数,函数里面主要就是通过文件把状态值获取到,再通过case进行判断要传那个参数,最后执行对应参数的命令获取监控值
最后监测进程是否存活可以通过ps查到进程然后通过wc -l获取数量,最后echo这个值,然后创建触发器,最新值等于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
fiif [ $rm_file -gt 60 ];
then
rm -rf $cachefile
fiif [ ! -f $cachefile ];
then
$cmd >
$cachefile 2>
/dev/null
fistart_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-agentzabbix-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}]
更新间隔:60s,因为脚本里面的判断时间就是60s
应用集选择:php-fpm status
文章图片
其他监控项配置一致,只是参数key值不一样
所有监控项key值
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,坐等监控报警
仪表盘显示
文章图片
报警短信
文章图片
7.利用grafana生成php-fpm状态监控图形 7.1.创建图形
点击创建图形
文章图片
选择条形图
文章图片
7.2.添加监控项
【使用zabbix监控php-fpm服务(十六)】时间段选择5分钟内
这个图形不要添加运行时长那个监控项,因为会无限大
文章图片
7.3.设置图形名称
第三个图标
文章图片
7.4.保存图形
文章图片
7.5.查看图形
查看最近15分钟的图形
文章图片
推荐阅读
- zabbix自定义变量传参监控项--监控主机TCP连接状态
- k8s node节点重新加入集群失败问题解决
- kubernetes限制节点启动的pod数量
- Vue 之自定义编译生成目录名称等
- 小程序接入Echarts组件库
- 「音乐」aespa—Savage
- JavaScript
- Jmeter里的全能java测试sampler - Java request
- 草稿模板