1.2 软件安装路径
zabbix安装在/usr/local/zabbix路径下,其相关配置文件及二进制执行程序都放置其中。
nginx安装在/usr/local/nginx下,其相关配置文件及二进制执行程序都放置其中。
php安装在/usr/local/php下,其相关配置文件及二进制执行程序都放置其中。
继续后面的操作前,请确认nginx和php-fpm的服务端口都处于监听状态。
二、配置nginx的status
2.1 确认nginx的status已编译到程序包中
使用nginx -V可以查看nginx是否将模块·http_stub_status_module`编译进包中:
[root@monitor-server2 zabbix_agentd.conf.d]# nginx -Vnginx version: nginx/1.10.3built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013TLS SNI support enabledconfigure arguments: --prefix=/usr/local/nginx-1.10.3 --with-http_ssl_module --with-http_stub_status_module --with-pcre ??#出现with-http_stub_status_module说明已装载status模块
2.2 启用nginx的status模块
- 修改nginx.conf文件
一般在默认主机中增加如下location即可:
location /nginx_status { ?stub_status on; ?access_log off; ?allow 127.0.0.1; ?allow 192.168.249.0/24; ?deny all;
- 查看nginx status
nginx配置文件修改完成以后,使用nginx -t测试配置文件是否有明显逻辑及语法错误,没有问题则重载配置文件。
nginx -tnginx -s reload
然后使用浏览器或者curl指令查看nginx status:
[root@monitor-server2 zabbix_agentd.conf.d]# curl localhost/nginx_statusActive connections: 2 server accepts handled requests 1585 1585 7785 Reading: 0 Writing: 1 Waiting: 1
2.3 nginx status数值的含义说明
三、配置php-fpm的status
php-fpm自带的有用于查询其工作状态的页面,需要进行如下 两步,以启用这一功能。
3.1 启用php-fpm status页面
修改php-fpm.conf文件,去掉status页面的注释,并可以根据需要将其改名。操作如下:
vim /usr/local/php/etc/php-fpm.confpm.status_path = /php_fpm-status ??????#去掉了前面的;注释符,并更名为php_fpm-status
3.2 查看php-fpm的status
修改完php-fpm.conf后,使用service php-fpm reload重新加载配置文件,然后在浏览器或者使用curl指令查看php-fpm的status。操作如下:
[root@monitor-server2 zabbix_agentd.conf.d]# curl localhost/php_fpm-statuspool: ????????????????wwwprocess manager: ?????dynamicstart time: ??????????01/May/2017:15:14:23 +0800start since: ?????????29536accepted conn: ???????5947listen queue: ????????0max listen queue: ????3listen queue len: ????128idle processes: ??????2active processes: ????1total processes: ?????3max active processes: 3max children reached: 0slow requests: ???????0
php-fpm的status可以查看汇总信息和详细信息,详细信息比汇总信息要多出每一个php-fpm进程的相关信息,同时支持多种格式输出,如xml、html和json,默认情况下分别使用如果指令即可:
Examples for summary status page:http://example.com/statushttp://example.com/status?jsonhttp://example.com/status?htmlhttp://example.com/status?xmlExample for detailed status page:http://example.com/status?fullhttp://example.com/status?json&fullhttp://example.com/status?html&fullhttp://example.com/status?xml&full
使用何种格式查看status决定了后续使用zabbix进行监控获取status数值的方式。本文以上述curl localhost/php_fpm-status的输出为例。
3.3 php-fpm status的含义
四、编写status数据提取脚本
在适当的位置,一般是/usr/local/zabbix/bin里准备脚本用于提取status里每个字段的数值。
4.1 nginx的status数值提取脚本
此脚本为/usr/local/zabbix/bin/nginx_status.sh,其内容如下:
#!/bin/bash#check nginx statusip=127.0.0.1function ping() { ?????????????????????????????#用于检测nginx进程是否存在 ???/sbin/pidof nginx | wc -l}function active() { ????????????????#用于提取status中的active数值 ???/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n ‘1p‘ | awk ‘{print $NF}‘}function accepts() { ???????????#用于提取status中的accepts数值 ???/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n ‘3p‘ | awk ‘{print $1}‘}function handled() { ?????????#用于提取status中的handled数值 ???/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n ‘3p‘ | awk ‘{print $2}‘}function requests() { ???????#用于提取status中的request数值 ???/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n ‘3p‘ | awk ‘{print $3}‘}function reading() { ???????#用于提取status中的reading数值 ???/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n ‘4p‘ | awk ‘{print $2}‘}function writing() { ???????#用于提取status中的writing数值 ???/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n ‘4p‘ | awk ‘{print $4}‘}function waiting() { ????#用于提取status中的waiting数值 ???/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n ‘4p‘ | awk ‘{print $6}‘}$1 ??????????????????????????#通过第一个位置参数的值来调用相应的函数 ?
4.2 php-fpm status数值提取脚本
php-fpm status数值提取脚本为/usr/local/zabbix/bin/php_fpm_status.sh,内容如下:
#!/bin/bash#check php-fpm statuscase $1 in ???ping) ??????????????????????????#检测php-fpm进程是否存在 ???/sbin/pidof php-fpm | wc -l ???;; ???start_since) ????????????#提取status中的start since数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==4{print $3}‘ ???;; ???conn) ????????????????????#提取status中的accepted conn数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==5{print $3}‘ ???;; ???listen_queue) ????????#提取status中的listen queue数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==6{print $3}‘ ???;; ????max_listen_queue) ?#提取status中的max listen queue数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==7{print $4}‘ ???;; ???listen_queue_len) ???#提取status中的listen queue len ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==8{print $4}‘ ???;; ???idle_processes) ?????#提取status中的idle processes数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==9{print $3}‘ ???;; ???active_processes) ??#提取status中的active processes数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==10{print $3}‘ ???;; ????total_processes) ???#提取status中的total processess数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==11{print $3}‘ ???;; ???max_active_processes) ????#提取status中的max active processes数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==12{print $4}‘ ???;; ????max_children_reached) ???#提取status中的max children reached数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==13{print $4}‘ ???;; ???slow_requests) ??#提取status中的slow requests数值 ???/usr/bin/curl localhost/php_fpm-status 2>/dev/null ?| awk ‘NR==14{print $3}‘ ?????;; ???*) ???echo "Usage: $0 {conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processess|total_processes|max_active_processes|max_children_reached|slow_requests}" ???exit 1 ???;;esac
五、创建zabbix_agentd的子配置文件
在/usr/local/zabbix/etc/zabbix_agentd.d/中创建关联nginx status和php-fpm status的子配置文件,创建一个,或者在已有的某配置文件中增加也可以,我这里分别为它们创建配置文件,文件名可自定义,只要确保此文件夹全部内容在zabbix_agentd.conf中包含(include)了。
5.1 userparameter_nginx.conf
[root@monitor-server2 zabbix_agentd.conf.d]# cat userparameter_nginx.conf #/usr/local/zabbix/bin/nginx_status.shUserParameter=nginx.status[*],/usr/local/zabbix/bin/nginx_status.sh $1 ??#这种写法比较简洁,参考zabbix 3.2.4中自带的的userparameter_examples.confUserParameter=nginx.version,/usr/local/nginx/sbin/nginx -v ????#让zabbix-agentd获取nginx的版本信息 ,一切shell指令都推荐使用绝对路径
5.2 userparameter_php-fpm.conf
[root@monitor-server2 zabbix_agentd.conf.d]# cat userparameter_php-fpm.conf #/usr/local/zabbix/bin/php_fpm_status.shUserParameter=php-fpm.status[*],/usr/local/zabbix/bin/php_fpm_status.sh $1UserParameter=php-fpm.version,/usr/local/php/sbin/php-fpm -v | awk ‘NR==1{print $0}‘ ??#获取php-fpm版本信息
5.3 确认子配置文件被zabbix_agentd配置文件包含
确认在/usr/local/zabbix/etc/zabbix_agentd.conf中包含:Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/且没有被注释。
六、重启zabbix_agentd服务
service zabbix_agentd restart 让zabbix_agentd加载新的配置文件。
七、测试zabbix_get能否取到数据
在zabbix server上使用如下指令测试能否获取到nginx和php-fpm status数值。
[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k ‘nginx.status[ping]‘ ?????1[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k ‘nginx.status[active]‘6[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k ‘nginx.status[requests]‘ ?1841[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k ‘php-fpm.status[ping]‘ 1[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k ‘php-fpm.status[conn]‘1247
注意:
- zabbix_get指令在zabbix server上运行。
- userparameter_*.conf文件位于zabbix_agentd端。
- nginx_status.sh和php_fpm_status.sh位于zabbix_agentd端。
- zabbix-get后-s指定的ip为zabbix-agentd的监听ip。
八、zabbix server上配置相应的模板
这里的模板包含对nginx status和php-fpm status要监控的item、trigger、Graphs等一系列内容。对于在zabbix server上新增要监控的内容,最好的办法就是从模板开始,然后按照顺序依次配置相应内容,无需去网上找现成的模板导入,对于系统的监控按需配置是最好的。下面是相应的操作过程。
8.1 添加nginx status监控模板
新建nginx status模板
定义nginx status模板
新建nginxApplication
定义nginx status items,这里我使用的是被动临控
增加nginx status状态码映射
nginx trigger定义
定义nginx监控视图
8.2 添加php-fpm status监控模板
php-fpm status的模板添加步骤和上述方法一样,此处不在赘述。
8.3 选择相应的主机或主机组关联上相应的模板
给主机或主机组关联模板
九、实际监控效果展示
查看监控效果可以通过查看Monitoring—->Latest data,过滤出相应的主机及应用名进行查看,最新收集的各item的监控结果,凡是监控到数据的item会显示数据,出现灰色的表示没有监控到数据,需要排查原因。如下所示:
nginx的监控数据
也可以通过定义的Graphs查看监控效果:
nginx statur监控视图
十、小结
zabbix中要实现对用户自定义的item的监控,大致过程如下:
- 启用相应软件的性能统计功能
- 编写性能统计数据提取脚本
- 配置自定义的userparameter conf文件
- 重启zabbix_agentd服务
- zabbix server web上添加相应的模板
- 给主机或主机组调用模板
使用zabbix监控nginx和php-fpm性能
原文地址:https://www.cnblogs.com/kali-aotu/p/8521802.html