使用zabbix监控php-fpm服务(十六)

简介: 使用zabbix监控php-fpm服务1.开启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_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启动到现在共接收了多少个请求

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
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}]

更新间隔: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.添加监控项

时间段选择5分钟内

这个图形不要添加运行时长那个监控项,因为会无限大

7.3.设置图形名称

第三个图标

7.4.保存图形

7.5.查看图形

查看最近15分钟的图形

目录
相关文章
|
2月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
2月前
|
监控 安全 Linux
在Linux中,zabbix如何监控脑裂?
在Linux中,zabbix如何监控脑裂?
|
1月前
|
监控 Linux
Zabbix 5.0 LTS的agent服务部署实战篇
文章介绍了如何在CentOS 7.6操作系统上部署Zabbix 5.0 LTS版本的agent服务,包括配置软件源、安装agent、修改配置文件、启动服务,并在Zabbix web界面添加监控。
82 4
Zabbix 5.0 LTS的agent服务部署实战篇
|
1月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
32 2
zabbix agent集成percona监控MySQL的插件实战案例
|
2月前
|
SQL 监控 分布式数据库
【解锁数据库监控的神秘力量!】OceanBase社区版与Zabbix的完美邂逅 —— 揭秘分布式数据库监控的终极奥秘!
【8月更文挑战第7天】随着OceanBase社区版的普及,企业广泛采用这一高性能、高可用的分布式数据库。为保障系统稳定,使用成熟的Zabbix监控工具对其进行全方位监控至关重要。本文通过实例介绍如何在Zabbix中配置监控OceanBase的方法,包括创建监控模板、添加监控项(如TPS)、设置触发器及图形展示,并提供示例脚本帮助快速上手。通过这些步骤,可以有效监控OceanBase状态,确保业务连续性。
79 0
|
4月前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
5月前
|
JavaScript Java 测试技术
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
54 3
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
|
4月前
|
监控 数据库 Docker
Zabbix监控神通数据库教程
**摘要:** 本文介绍了如何使用Docker安装和配置神舟通用数据库,并利用Zabbix进行监控。首先,通过Docker安装数据库镜像,启动容器并映射端口。接着,使用默认凭证连接数据库并验证安装。然后,将数据库的Python模块和库文件复制到主机,并安装Python3.5及相应模块,创建外部检查脚本以实现Zabbix的监控功能。示例展示了查询数据库版本的监控指标配置。最后,提到了监控结果的界面展示,并邀请读者探索更多Zabbix监控技巧。
58 0
Zabbix监控神通数据库教程
|
3月前
|
监控 关系型数据库 应用服务中间件
Linux zabbix监控 软件的安装
Linux zabbix监控 软件的安装
|
5月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践深入理解PHP的命名空间与自动加载机制
【5月更文挑战第30天】 在容器化和微服务架构日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排工具。然而,随之而来的挑战是集群的监控与日志管理。本文将深入探讨 Kubernetes 集群监控的最佳实践,包括节点资源使用情况、Pods 健康状态以及网络流量分析等关键指标的监控方法。同时,我们也将讨论日志聚合、存储和查询策略,以确保快速定位问题并优化系统性能。文中将介绍常用的开源工具如 Prometheus 和 Fluentd,并分享如何结合这些工具构建高效、可靠的监控和日志管理系统。

推荐镜像

更多