需求场景
Lnmp自然环境3nginx每个nginx服务项目上的几个云虚拟主机,各自运行一个不同的网站域名,提前准备为域名做nginx。
状态监控,监控每个nginx的主题活动连接数和主题活动线程总数。
解决方案1
每个nginx服务器的主配置文件配置在状态控制模块编码端的下方。
location /ngst{ stub_status on; access_log off; allow 127.0.0.1; allow xxx.xxx.xxx.xxx; deny all; }引入在线文本文档是一种解决方案。
缺陷:每个zabbix代理都必须配置/etc/zabbix/etc/zabbix/zabbix_agentd.conf并重启zabbix移动客户端,比较复杂。
2.制作nginx-status的分配脚本
#!/bin/bash #HOST=`ifconfig eth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'` HOST="192.168.103.2" PORT="8888" function active { /usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Active' | awk '{print $NF}' } function reading { /usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Reading' | awk '{print $2}' } function writing { /usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Writing' | awk '{print $4}' } function waiting { /usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } function accepts { /usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| awk NR==3 | awk '{print $1}' } function handled { /usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| awk NR==3 | awk '{print $2}' } function requests { /usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| awk NR==3 | awk '{print $3}' } # Run the requested function $1和主机端口,是监控nginx的网络服务器的IP和端口号,可以立即用指令进行测试。
/usr/bin/curl"http://192.168.103.2:8888/nginx-status/"
活动连接:2
服务器接受已处理的请求
196819683907
阅读:0写作:1等待:1
3.更改zabbix_agentd.conf的配置
/etc/zabbix/zabbix_agentd.conf UserParameter=nginx.accepts,/home/zabbix/nginx-status.sh accepts UserParameter=nginx.handled,/home/zabbix/nginx-status.sh handled UserParameter=nginx.requests,/home/zabbix/nginx-status.sh requests UserParameter=nginx.connections.active,/home/zabbix/nginx-status.sh active UserParameter=nginx.connections.reading,/home/zabbix/nginx-status.sh reading UserParameter=nginx.connections.writing,/home/zabbix/nginx-status.sh writing UserParameter=nginx.connections.waiting,/home/zabbix/nginx-status.sh waiting解决方案2
1.每个nginx服务器的主配置文件都配置有状态控制模块。
2.获取nginx服务器中nginx状态的值,并将其写入本地临时文件夹。
3.根据需要求解临时文件夹,应用UserParameter=nginx_status[*]的方法自定义键值,
4.crontab每分钟获取nginx状态值
优点:比每个zabbix手机客户端配置/etc/Zabbix/etc/Zabbix/Zabbix_agentd.conf节省时间,减少不准确性。
比率
缺陷,一分钟获取一次,略有不妥,但时间还是要看监控需求,脚本制作、开发、设计都需要时间。(其实剧本制作是很
简单)
实际的完成方式,剧本制作思路和方案二都不能马上套用。它是根据特定的自然环境,以及简单的剧本制作而成的。在这里
,这个web服务器可以立即应用主机名浏览,所以我应用了web1web2。
#!/bin/bash rm -rf /tmp/ngst/* function GETSTATUS { for ip in {1..3} do curl http://web$ip:8080/ngst >/tmp/ngst/web$ip 2>/dev/null done } function HANDLE { for i in {1..3} do cat /tmp/ngst/web$i |grep Active |awk '{print $1,$NF}' >>/tmp/ngst/web${i}_status cat /tmp/ngst/web$i |grep Reading |awk '{print $1,$2}' >>/tmp/ngst/web${i}_status cat /tmp/ngst/web$i |grep Writing |awk '{print $3,$4}' >>/tmp/ngst/web${i}_status cat /tmp/ngst/web$i |grep Waiting |awk '{print $5,$6}' >>/tmp/ngst/web${i}_status #mv /tmp/ngst/web$i.new /tmp/ngst/web$i done } function TOTAL{ cat /tmp/ngst/*status |grep Active |awk '{total=$NF}END{print total}'>/tmp/ngst/total # 总的 Active 线程数 } GETSTATUS HANDLE TOTAL实施后,结果如下
#ls/tmp/ngst/
总网站1网站1_状态网站2网站2_状态网站3网站3_状态
#cat/tmp/ngst/web1
活动连接:1
服务器接受已处理的请求
771600577160057354221
阅读:0写作:1等待:0
#cat/tmp/ngst/web1_状态已解决文件
活动1
阅读:0
写作:1
正在等待:0
要设置zabbix代理,只需更改配置文档并添加以下两行,默认设置zabbix自定义键即可理解。
UserParameter=nginx_status.total, cat /tmp/ngst/total UserParameter=nginx_status[*], cat /tmp/ngst/web1 |grep "$1"|awk '{print $NF}' UserParameter=nginx2_status[*], cat /tmp/ngst/web2 |grep "$1"|awk '{print $NF}' UserParameter=nginx3_status[*], cat /tmp/ngst/web3 |grep "$1"|awk '{print $NF}' #只必须写那么两行就能完成对 Active Reading 等或是别的非常值得监控。此时,在zabbix服务器端添加以下监控。
1.创建一个模板,默认设置为会议。
2.建立监控项目
可以加一个图案,这样多条线就可以总结成一条了。
解决方案2有许多缺点。高手有更强的解决方法。请分享一下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)