zabbix添加php监控

简介:

本文主要是针对与添加php-fpm方法,生产环境有个坑,填下,初始环境不是我做的,我是来填坑的,

j_0065.gif

以源码安装为例:

目录环境:

/usr/local/php/etc/php-fpm.conf

/usr/local/nginx/conf/nginx.conf

------------------------------------------------------------


一、开始按照书上配的,发现没有sock文件,当然访问就报错了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
             listen 127.0.0.1:80;
             server_name 127.0.0.1;
             location  /nginx_status  {
                 stub_status on;
                 access_log off;
                 allow 127.0.0.1;
                 deny all;
             }
             location ~ ^/(phpfpm_status)$ {
                 include fastcgi_params;
                 fastcgi_pass  unix: /tmp/php-cgi .sock;
                 fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
             }
}
# curl 127.0.0.1/phpfpm_status

502报错

查看了一下nginx的error日志:

1
*100011 connect() to unix: /tmp/php-fcgi .sock failed (2: No such  file  or directory)  while  connecting to upstream, client: 127.0.0.1, server: 127.0.0.1, request:  "GET /phpfpm_status HTTP/1.1" , upstream:  "fastcgi://unix:/tmp/php-fcgi.sock:" , host:  "127.0.0.1"

二、查了查网上发现:

其中fastcgi_pass为配置nginx与php-fpm的交互路径,一般有两种方式

1
2
sock方式:fastcgi_pass    unix: /tmp/php-cgi .sock;
http方式:fastcgi_pass    127.0.0.1:9000;

任选其中一种即可,但必须和php-fpm的配置一致。

三、解决方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
重启nginx
# vim /usr/local/nginx/conf/nginx.conf
server {
             listen 127.0.0.1:80;
             server_name 127.0.0.1;
             location  /nginx_status  {
                 stub_status on;
                 access_log off;
                 allow 127.0.0.1;
                 deny all;
             }
             location ~ ^/(phpfpm_status)$ {
                 include fastcgi_params;
                 fastcgi_pass 127.0.0.1:9000;
                 fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
             }
}
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
# curl 127.0.0.1/phpfpm_status
 
pool:                 www
process manager:      dynamic
start  time :           20 /Jun/2017 :17:22:19 +0800
start since:          2245
accepted conn:        40
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       1
active processes:     1
total processes:      2
max active processes: 2
max children reached: 0
slow requests:        0
可以了
php-fpm status状态值详解
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:进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,需要设置大点

四、监控脚本

(1)shell脚本,此脚本是抄袭的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/bash
source  /etc/bashrc  > /dev/null  2>&1
source  /etc/profile  > /dev/null  2>&1
LOG= /var/log/zabbix/phpfpmstatus .log
curl -s http: //localhost/phpfpmstatus  >$LOG
pool(){
     awk  '/pool/ {print $NF}'  $LOG
}
process_manager(){
     awk  '/process manager/ {print $NF}'  $LOG
}
start_since(){
     awk  '/start since:/ {print $NF}'  $LOG
}
accepted_conn(){
     awk  '/accepted conn:/ {print $NF}'  $LOG
}
listen_queue(){
     awk  '/^(listen queue:)/ {print $NF}'  $LOG
}
max_listen_queue(){
     awk  '/max listen queue:/ {print $NF}'  $LOG
}
listen_queue_len(){
     awk  '/listen queue len:/ {print $NF}'  $LOG
}
idle_processes(){
     awk  '/idle processes:/ {print $NF}'  $LOG
}
active_processes(){
     awk  '/^(active processes:)/ {print $NF}'  $LOG
}
total_processes(){
     awk  '/total processes:/ {print $NF}'  $LOG
}
max_active_processes(){
     awk  '/max active processes:/ {print $NF}'  $LOG
}
max_children_reached(){
     awk  '/max children reached:/ {print $NF}'  $LOG
}
case  "$1"  in
pool)
      pool
      ;;
process_manager)
      process_manager
      ;;
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
      ;;
*)
echo  "Usage: $1 {pool|process_manager|start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"
esac

(2)python脚本,这个是自己写的,写的不好,还望海涵。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env python
#__*__coding:utf8__*__
import  urllib2,sys,os
def  Php_status():
     php_status_dirt  =  {}
     request_status_list  =  []
     php_status_list  =  [ "pool" , "process_manager" , "start_since" , "accepted_conn" , "listen_queue" , "max_listen_queue" , "listen_queue_len" , "idle_processes" , "active_processes" , "total_processes" , "max_active_processes" , "max_children_reached" ]
     php_url  =  'http://127.0.0.1/phpfpm_status'
     req  =  urllib2.Request(php_url)
     response  =  urllib2.urlopen(req)
     request_list  =  response.read().split()
     # request_status_list=[request_list[1],request_list[4],request_list[11],request_list[14],request_list[17],request_list[21],request_list[25],request_list[28],request_list[31],request_list[34],request_list[38],request_list[42],request_list[45]]
     #以下数字位置都是上面截出来的,为了美观,将位置作为了列表,在用位置列表定位request_list中的值['www', 'dynamic', '57795', '5424', '0', '0', '128', '2', '1', '3', '3', '0', '0', 'www', 'dynamic', '57795', '5424', '0', '0', '128', '2', '1', '3', '3', '0', '0'],并追加到request_status_list里面
     #position--->request_list--->(request_status_list+php_status_list)--->php_status_dirt
     position = [ 1 , 4 , 11 , 14 , 17 , 21 , 25 , 28 , 31 , 34 , 38 , 42 , 45 ]
     for  in  position:
         request_status_list.append(request_list[i])
     for  in  range ( len (php_status_list)):
         php_status_dirt[php_status_list[i]]  =  request_status_list[i]
     if  len (sys.argv)  is  not  2  or  str (sys.argv[ 1 ])  not  in  php_status_dirt.keys():
         print  "Usage: php_stauts.py $1 {pool|process_manager|start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"
         exit( 1 )
     else :
         print  php_status_dirt[ str (sys.argv[ 1 ])]
if  __name__  = =  '__main__' :
     try :
         Php_status()
     except  urllib2.URLError,e:
         print  "%s,there may be something wrong with php!"  % e

五、配置监控扩展

被监控主机端,zabbix_agentd.conf文件中添加上这个:

1
UserParameter=phpfpm[*], /etc/zabbix/scripts/phpfpm_status .py $1

或者

1
UserParameter=phpfpm[*], /etc/zabbix/scripts/phpfpm_status .sh $1

六、将脚本放置在/etc/zabbix/scripts/目录下

1
chmod  +x phpfpm.py

七、测试

1
2
3
4
[root@zabbix_server-12-155 ~] # zabbix_get -s 10.1.12.177 -k phpfpm[s]
Usage: php_stauts.py $1 {pool|process_manager|start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}
[root@zabbix_server-12-155 ~] # zabbix_get -s 10.1.12.177 -k phpfpm[pool]
www

接下来就是添加监控项了,模版我是在这下的https://www.ttlsa.com/zabbix/zabbix-monitor-php-fpm-status/










本文转自 wangpengtai  51CTO博客,原文链接:http://blog.51cto.com/wangpengtai/1940563,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
JSON 监控 PHP
企业局域网监控软件的扩展性设计:PHP插件开发指南
在企业网络环境中,对局域网进行监控是至关重要的。为了满足不同企业的需求,我们需要一种灵活可扩展的监控软件,能够根据具体情况进行定制和扩展。本文将介绍如何利用PHP插件来实现企业局域网监控软件的扩展性设计,并提供一些代码示例,帮助读者更好地理解和应用这一技术。
169 2
|
3月前
|
存储 SQL 监控
修改Zabbix源码实现监控数据双写,满足业务需求!
虽然对接Elasticsearch后有诸多好处,但是它不往数据库写历史数据了,同时还不再计算趋势数据了。有这么一个场景...
修改Zabbix源码实现监控数据双写,满足业务需求!
|
4月前
|
数据采集 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
77 4
|
4月前
|
监控 关系型数据库 机器人
小白带你学习linux的监控平台zabbix
小白带你学习linux的监控平台zabbix
137 0
|
6月前
|
监控 关系型数据库 MySQL
企业实战(8)CentOS 6.8安装Zabbix-agent 5.0监控主机性能与Mysql数据库
企业实战(8)CentOS 6.8安装Zabbix-agent 5.0监控主机性能与Mysql数据库
|
1月前
|
数据采集 监控 数据库
请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
【2月更文挑战第25天】请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
25 2
|
6月前
|
监控
zabbix如何添加自定义监控项
zabbix如何添加自定义监控项
262 0
|
2月前
|
监控 Cloud Native 关系型数据库
使用 Grafana 统一监控展示 - 对接 Zabbix
使用 Grafana 统一监控展示 - 对接 Zabbix
|
2月前
|
监控 关系型数据库 MySQL
PHP与MySQL的结合:实现局域网上网行为监控软件的数据库管理
在当今信息化时代,网络安全日益成为重要的话题。为了有效监控和管理局域网上网行为,开发一个基于PHP和MySQL的数据库管理系统是一个理想的选择。本文将介绍如何结合PHP和MySQL,开发一款简单而高效的局域网上网行为监控软件,并重点关注数据库管理方面的实现。
196 0
|
4月前
|
监控 Docker 容器
Zabbix【部署 03】zabbix-agent2安装配置使用(zabbix-agent2监控docker实例分享)
Zabbix【部署 03】zabbix-agent2安装配置使用(zabbix-agent2监控docker实例分享)
238 0

推荐镜像

更多