一、开启Nginx status状态
1、在默认主机里面加上location添加ngx_status
如下操作:
server { listen 127.0.0.1:8080; server_name 127.0.0.1; access_log off; location /nginxstatus { stub_status on; access_log off; allow 127.0.0.1; deny all; }
2、重启nginx服务,service nginx restart,查看取值是否正常。
curl -s "http://127.0.0.1:8080/nginxstatus"
Active connections: 37 server accepts handled requests 7197043 7197043 67343248 Reading: 0 Writing: 1 Waiting: 36
3、nginx status详解
active connections – 活跃的连接数量 server accepts handled requests — 总共处理了7197043个连接 , 成功创建7197043次握手, 总共处理了67343248个请求 Reading — 读取客户端的连接数. Writing — 响应数据到客户端的数量 Waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
二、编写获取Nginx status的脚本
在agent上编写监控脚本,其实就是获取刚才以上nginxstatus的值:
#!/bin/bash function active { curl -s "http://127.0.0.1:8080/nginxstatus" | grep 'Active' | awk '{print $3}' } function reading { curl -s "http://127.0.0.1:8080/nginxstatus" | grep 'Reading' | awk '{print $2}' } function writing { curl -s "http://127.0.0.1:8080/nginxstatus" | grep 'Writing' | awk '{print $4}' } function waiting { curl -s "http://127.0.0.1:8080/nginxstatus" | grep 'Waiting' | awk '{print $6}' } function accepts { curl -s "http://127.0.0.1:8080/nginxstatus" | awk NR==3 | awk '{print $1}' } function handled { curl -s "http://127.0.0.1:8080/nginxstatus" | awk NR==3 | awk '{print $2}' } function requests { curl -s "http://127.0.0.1:8080/nginxstatus" | awk NR==3 | awk '{print $3}' } case "$1" in active) active ;; reading) reading ;; writing) writing ;; waiting) waiting ;; accepts) accepts ;; handled) handled ;; requests) requests ;; *) echo "Usage: $0 {active|reading|writing|waiting|accepts|handled|requests}" esac
Agent端写入自定义key:
UserParameter=nginx[*], /bin/bash /etc/zabbix/externalscripts/monitor-nginx.sh $1
三、制作Nginx模板
根据上面的监控项制作好模板,模板已经上传至Github:https://github.com/loveqx/zabbix-doc/tree/master/zabbix-scripts/zabbix-template-nginx
模板包括的监控项如下:
四、模板上套
主机(Agent)套上模板即可。
效果如下:
至此,Nginx监控完成。
五、总结
以上就是监控Nginx的整个过程,虽然只是一个开端,但是,后续监控其他服务或应用都是类似的流程。聪明的你,可以依葫芦画瓢。
1、通过方法或手段获取需要监控的监控项
通过脚本或LLD获取监控项或监控项类(通过lld发现的),解释一下这里为什么说是监控项类,因为他是一个监控项的抽象。比如,磁盘类、网卡类,而且他们具有同样是属性。
2、Agent端添加自定义key
3、制作模板
4、Agent套用模板
最后附上监控Nginx需要的模板和脚本:
Nginx监控github地址: