nginx有status状态模块,可以通过这个模块来反馈状态。
流程:
- nginx增加status状态
- agent端,自定义key
- web页面,定义模板(模板-应用集-监控项-触发器)
- web页面,为客户机添加模板
第一步,nginx增加status状态
对要监控的nginx配置文件进行修改,增加status状态
1 2 3 4 5 6 7
| #在server中增加 location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }
|
重启nginx:
查看nginx_status
1 2 3 4 5 6 7 8 9 10
| #状态解释 Active connections Nginx正处理的活动链接数个数;重要 server Nginx启动到现在共处理了多少个连接。 accepts Nginx启动到现在共成功创建几次握手。 handled requests Nginx总共处理了几次请求。 Reading Nginx读取到客户端的 Header 信息数。 Writing Nginx返回给客户端的 Header 信息数。 Waiting Nginx已经处理完正在等候下一次请求指令的驻留链接,开启。 Keep-alive的情况下,Waiting这个值等于active-(reading + writing)。 请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。
|
nginx状态查询可以编写脚本进行测试:
提前放zabbix目录方便以后使用
vi /etc/zabbix/zabbix_agentd.d/nginx_status.sh
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
| #cd /etc/zabbix/zabbix_agentd.d/ #vim nginx_monitor.sh HOST=127.0.0.1 NGINX_STATUS='/nginx_status/' NGINX_PORT=80 NGINX_COMMAND=$1
nginx_ping(){ /usr/sbin/pidof nginx wc -l } nginx_active(){ /usr/bin/curl -s $HOST:$NGINX_PORT$NGINX_STATUSawk '/Active/ {print $NF}' } nginx_reading(){ /usr/bin/curl -s $HOST:$NGINX_PORT$NGINX_STATUSawk '/Reading/ {print $2}' } nginx_writing(){ /usr/bin/curl -s $HOST:$NGINX_PORT$NGINX_STATUSawk '/Writing/ {print $4}' } nginx_waiting(){ /usr/bin/curl -s $HOST:$NGINX_PORT$NGINX_STATUSawk '/Waiting/ {print $6}' } nginx_accepts(){ /usr/bin/curl -s $HOST:$NGINX_PORT$NGINX_STATUSawk 'NR==3 {print $1}' } nginx_handled(){ /usr/bin/curl -s $HOST:$NGINX_PORT$NGINX_STATUSawk 'NR==3 {print $2}' } nginx_requests(){ /usr/bin/curl -s $HOST:$NGINX_PORT$NGINX_STATUSawk 'NR==3 {print $3}' } case $NGINX_COMMAND in ping) nginx_ping; ;; active) nginx_active; ;; reading) nginx_reading; ;; writing) nginx_writing; ;; waiting) nginx_waiting; ;; accepts) nginx_accepts; ;; handled) nginx_handled; ;; requests) nginx_requests; ;; *) echo $"USAGE:$0 {pingactivereadingwritingwaitingacceptshandledrequests}" esac
|
测试脚本:
1 2 3 4 5
| #添加执行权限 chmod +x /etc/zabbix/zabbix_agentd.d/nginx_status.sh #测试ping结果 /etc/zabbix/zabbix_agentd.d/nginx_status.sh ping 返回为1存在,返回0不存在
|
第二步,agent端,自定义key
查看/etc/zabbix/zabbix_agent.conf,可以看到自定义key注释和include路径。
key语法:UserParameter=, (UserParameter=<键值名称>,<要执行的命令或脚本>)
include路径:Include=/etc/zabbix/zabbix_agentd.d/*.conf
得到,key语法和key路径,我们就可以编辑自定义key了。
(key执行的脚本,上面写的nginx_status.sh)
1 2 3 4
| #创建自定义key配置文件 vi /etc/zabbix/zabbix_agentd.d/nginx_status.conf #配置文件,加入以下内容 UserParameter=nginx_status[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh
|
(不推荐,尽量使用脚本)nginx状态单行写键值:
1 2 3
| UserParameter=nginx_ping,/usr/sbin/pidof nginx wc -l UserParameter=nginx_active,/usr/bin/curl -s $HOST:$NGINX_PORT$NGINX_STATUSawk '/Active/ {print $NF}' UserParameter=等等等,以此类推很繁琐,所以不是很推荐
|
key键定义好后,重启agent
1
| systemctl restart zabbix-agent
|
到server端,可以通过agent-get测试,我们刚写的键值
1 2
| #-s 地址 -p 端口号 -k '键值名称' zabbix_get -s 《agent端ip地址》-p 10050 -k 'nginx_status[active]'
|
第三步,web页面,定义模板(模板-应用集-监控项-触发器)
向web添加东西,都需要从“配置”模块开始!
创建模板,模板可以理解为一个类别。
模板中添加应用集(应用集,可以理解为子类别或是一个文件夹)
创建监控项
创建触发器
创建图形:
ok,一个监控项完成,以此类推,我们需要重复添加监控项的其他状态
web页面,agent客户机添加模板
模板创建好后,我们要返回配置-主机,哪些主机需要使用这个模板,我们就为该主机增加模板即可。
一个主机可以有N个模板,实现监控N个模块。
这里为我们的agent客户机:vm-1添加nginx状态
添加模板(刚刚创建的app模板)
添加完成后,就可以通过仪表盘进行查看了。