zabbix 监控Nginx和PHP
原理
Nginx和PHP(5.3及以上版本)都自带了一个状态页,默认没有开启,通过开启这个状态页即可获取实时的工作状态。
Nginx状态获取
Nginx的配置默认是拒绝通过IP来访问,我们可以再默认虚拟主机中进行如下配置:
server {
listen 80;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location / {
access_log off;
return 404;
}
}
重启后测试获取Nginx的状态数据
[root@ ~]# curl http://127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests
22 22 22
Reading: 0 Writing: 1 Waiting: 0
Nginx状态数据解释:
Active connections : 活跃客户端连接数,包括处于等待状态的连接数。
accepts : 接收到的客户端连接总数。
handled : 处理请求的总数。通常情况下,这个值和accepts的值相同,除非达到了一些资源限制。
requests : 客户端请求总数。
Reading : 当前Nginx正在读取请求头的连接数量。
Writing : 当前Nginx正在将响应写回到客户端的连接数量
Waiting : 当前正在等待请求的闲置客户端连接数量
PHP状态获取
在php-fpm.conf添加如下配置:
#具体URL路径可以自定义
m.status_path = /phpfpm_status
ping.path = /phpfpm_ping
ping.response = pong
上面的Nginx的配置中添加如下配置:
location ~^/(phpfpm_status|phpfpm_ping)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
access_log off;
allow 127.0.0.1;
deny all;
}
重启后测试获取PHP的状态数据
[root@ ~]# curl http://127.0.0.1/phpfpm_status
pool: www
process manager: dynamic
start time: 19/Jun/2017:14:47:29 +0800
start since: 1961
accepted conn: 13
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 3
active processes: 1
total processes: 4
max active processes: 1
max children reached: 0
PHP状态数据解释:
pool : fpm池子名称,大多数为www。
process manager : 进程管理方式,值:static, dynamic or ondemand。
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 : 达到最大子进程的次数,达到进程的限制,当pm试图开启更多的子进程的时候(仅当pm工作在dynamic时)
PHP状态还支持详细的PHP子进程状态
[root@salt-master ~]# curl http://127.0.0.1/phpfpm_status?full
pool: www
process manager: dynamic
start time: 19/Jun/2017:14:47:29 +0800
start since: 2399
accepted conn: 15
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 3
active processes: 1
total processes: 4
max active processes: 1
max children reached: 0
************************
pid: 4848
state: Idle
start time: 19/Jun/2017:14:47:29 +0800
start since: 2399
requests: 4
request duration: 364
request method: GET
request URI: /phpfpm_status
content length: 0
user: -
script: -
last request cpu: 0.00
last request memory: 786432
************************
# 其余的子进程状态略去
zabbix 的配置
自定义一个 nginx_status.conf 的UserParameter配置文件
# 获取Nginx的活跃客户端连接数 ,若失败返回-1
UserParameter=nginx.active_conn,/usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status >/dev/null 2>&1 && /usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status |awk '/^Active connections:/ {print $NF}' || echo -1
# 获取Nginx接收到的客户端连接总数 ,若失败返回-1
UserParameter=nginx.server_accepts,/usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status >/dev/null 2>&1 && /usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status |grep -A 1 'server accepts handled requests' |grep -v 'server accepts handled requests' |awk '{print $1}' || echo -1
# 获取Nginx的处理请求的总数 ,若失败返回-1
UserParameter=nginx.server_handled,/usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status >/dev/null 2>&1 && /usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status |grep -A 1 'server accepts handled requests' |grep -v 'server accepts handled requests' |awk '{print $2}' || echo -1
# 获取Nginx的客户端请求总数 ,若失败返回-1
UserParameter=nginx.server_requests,/usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status >/dev/null 2>&1 && /usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status |grep -A 1 'server accepts handled requests' |grep -v 'server accepts handled requests' |awk '{print $3}' || echo -1
# 获取当前Nginx正在读取请求头的连接数量,若失败返回-1
UserParameter=nginx.client_read,/usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status >/dev/null 2>&1 && /usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status |awk '/^Reading:/ {print $2}' || echo -1
# 获取当前Nginx正在将响应写回到客户端的连接数量 ,若失败返回-1
UserParameter=nginx.client_write,/usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status >/dev/null 2>&1 && /usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status |awk '/^Reading:/ {print $4}' || echo -1
# 获取当前Nginx正在等待请求的闲置客户端连接数量 ,若失败返回-1
UserParameter=nginx.client_wait,/usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status >/dev/null 2>&1 && /usr/bin/curl -m 2 -s http://127.0.0.1/nginx_status |awk '/^Reading:/ {print $6}' || echo -1
自定义一个 php_status.conf 的UserParameter配置文件
# 获取PHP是否在运行
UserParameter=phpfpm.ping,/usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_ping |grep -ic pong
# 获取PHP当前进程池接受的请求数 ,若失败返回-1
UserParameter=phpfpm.accepted_conn,/usr/bin/curl -m 2 -s -I http://127.0.0.1/phpfpm_status |grep -q 'HTTP/1.1 200 OK' && /usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_status |awk '/^accepted conn:/ {print $NF}' || echo -1
# 获取PHP当前请求等待队列 ,若失败返回-1
UserParameter=phpfpm.listen_queue,/usr/bin/curl -m 2 -s -I http://127.0.0.1/phpfpm_status |grep -q 'HTTP/1.1 200 OK' && /usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_status |awk '/^listen queue:/ {print $NF}' || echo -1
# 获取PHP请求等待队列最高的数量 ,若失败返回-1
UserParameter=phpfpm.max_listen_queue,/usr/bin/curl -m 2 -s -I http://127.0.0.1/phpfpm_status |grep -q 'HTTP/1.1 200 OK' && /usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_status |awk '/^max listen queue:/ {print$NF}' || echo -1
# 获取PHP的socket等待队列长度 ,若失败返回-1
UserParameter=phpfpm.listen_queue_len,/usr/bin/curl -m 2 -s -I http://127.0.0.1/phpfpm_status |grep -q 'HTTP/1.1 200 OK' && /usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_status |awk '/^listen queue len:/ {print $NF}' || echo -1
# 获取PHP的空闲进程数量 ,若失败返回-1
UserParameter=phpfpm.idle_processes,/usr/bin/curl -m 2 -s -I http://127.0.0.1/phpfpm_status |grep -q 'HTTP/1.1 200 OK' && /usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_status |awk '/^idle processes:/ {print $NF}' || echo -1
# 获取PHP的活跃进程数量 ,若失败返回-1
UserParameter=phpfpm.active_processes,/usr/bin/curl -m 2 -s -I http://127.0.0.1/phpfpm_status |grep -q 'HTTP/1.1 200 OK' && /usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_status |awk '/^active processes:/ {print $NF}' || echo -1
# 获取PHP的总进程数量 ,若失败返回-1
UserParameter=phpfpm.total_processes,/usr/bin/curl -m 2 -s -I http://127.0.0.1/phpfpm_status |grep -q 'HTTP/1.1 200 OK' && /usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_status |awk '/^total processes:/ {print $NF}' || echo -1
# 获取PHP的最大的活跃进程数量 ,若失败返回-1
UserParameter=phpfpm.max_active_processes,/usr/bin/curl -m 2 -s -I http://127.0.0.1/phpfpm_status |grep -q 'HTTP/1.1 200 OK' && /usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_status |awk '/^max active processes:/ {print $NF}' || echo -1
# 获取PHP大到进程最大数量限制的次数
UserParameter=phpfpm.max_children_reached,/usr/bin/curl -m 2 -s -I http://127.0.0.1/phpfpm_status |grep -q 'HTTP/1.1 200 OK' && /usr/bin/curl -m 2 -s http://127.0.0.1/phpfpm_status |awk '/^max children reached:/ {print $NF}' || echo -1
好了,剩下的就是做个模板套上去吧。
zabbix 监控Nginx和PHP的更多相关文章
- Zabbix 监控 Nginx(四)
简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) [root@localhost ~]# /apps/product/ng ...
- Zabbix 监控 Nginx 状态
简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) shell > /usr/local/nginx/sbin/ngi ...
- 使用zabbix监控nginx
在zabbix agentd客户端上,查看nginx是否加载了--with-http_stub_status_module.因为zabbix监控nginx是根据 nginx的Stub Status模块 ...
- zabbix监控nginx连接状态(转)
zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数) ...
- 使用zabbix监控nginx的活动连接数
使用zabbix监控nginx的活动连接数 1.方法简述 zabbix可以自定义很多监控,只要是能通过命令获取到相关的值,就可以在zabbix的监控中增加该对象进行监控,在zabbix中,该对象称之为 ...
- Zabbix监控nginx性能的另外一种方式
Zabbix监控nginx性能的另外一种方式 nginx和php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有用,为了后续的zabbix监控,我们需要先启用nginx ...
- Zabbix应用四:Zabbix监控Nginx
利用Zabbix监控Nginx 一.准备nginx监控模版: 1.1.下载nginx监控模版: 点此下载 1.2.导入模版: Zabbix管理页面,选择'配置'->'模版'->'导入': ...
- zabbix监控nginx的性能
1.nginx配置 需要使用zabbix监控nginx,首先nginx需要配置ngx_status,在nginx的配置文件中加入红框中的配置,然后重启nginx如下图所示: location /ngx ...
- zabbix监控nginx进程
确认nginx有没有安装模块 然后在主站点下添加(二级站点) location /NginxStatus { stub_status on; access_log off; allow 127.0.0 ...
- 【zabbix告警监控】配置zabbix监控nginx服务
zabbix监控nginx,nginx需要添加--with-http_stub_status模块 使用zabbix监控nginx,首先nginx需要配置开启ngx_status.但是我这边nginx安 ...
随机推荐
- tf运作方式之共享变量
转自:https://docs.pythontab.com/tensorflow/how_tos/variable_scope/ 这个讲的不错,能够更理解tf.get_Variable()了.创建时有 ...
- react的super(props)
在学习react的时候,其中在构造函数里面,有一个super(props),具体是什么意思呢. 其中 super语法来自es6,其语法如下: super([arguments]); // 调用 父对象 ...
- (转载)Spring定时任务的几种实现
spring框架定时任务 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerT ...
- 设置sqlplus不显示除查询结果外的信息
背景:客户提出一个需求,写SQL脚本的时候,内容是拼接的,如何将这个拼接SQL执行的结果取出来调用执行呢? 我想到的方案是先把结果取出来,存为一个中间文件,再调用该文件即可. 知识点:如何将sqlpl ...
- MySQL-UNIQUE
什么是UNIQUE约束 可以使用 UNIQUE 约束确保在非主键列中不输入重复的值.尽管 UNIQUE 约束和 PRIMARY KEY 约束都强制唯一性,但想要强制一列或多列组合(不是主键)的唯一性时 ...
- D Cloud of Hashtags Codeforces Round #401 (Div. 2)
Cloud of Hashtags [题目链接]Cloud of Hashtags &题意: 给你一个n,之后给出n个串,这些串的总长度不超过5e5,你要删除最少的单词(并且只能是后缀),使得 ...
- html5-常用的通用元素
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 模拟QQ登录
2018-10-28 15:54:38 开始写 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.bor ...
- DeepLearning资源汇总
仍旧不完全统计,边学边加 Bagging与随机森林算法原理 分类数据集 MNIST Cifar10 ILSVRC排行榜 Cifar10 board train loss与test loss结果分析 ...
- mongoDB的使用A
一.[连接mongo服务].[连接数据库].[连接集合] #一.[连接Mongo] import pymongo #方法一 client = pymongo.MongoClient(host='loc ...