您的位置:首页 > 运维架构 > Nginx

zabbix开源监控系列三(自定义key监控nginx_status) 推荐

2014-08-26 22:30 585 查看
需求场景
lnmp环境 3台nginx 每台nginx服务上有几个虚拟主机,分别跑了不同的域名,准备对主站做nginx
status 状态做监控,监控每一台nginx的活动链接数,和总的活动连接数。
解决方案1
每台nginx server的主配置文件 都配置status模块 代码端如下
location /ngst{
stub_status on;
access_log off;
allow 127.0.0.1;
allow xxx.xxx.xxx.xxx;
deny all;
}
引用网上文档,是一种解决方案。
缺点:每一个zabbix agent 都需要配置/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


HOST和PORT,是监控nginx对应的服务器IP和端口可以直接用命令测试一下
/usr/bin/curl "http://192.168.103.2:8888/nginx-status/"
Active connections: 2
server accepts handled requests
1968 1968 3907
Reading: 0 Writing: 1 Waiting: 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 server的主配置文件 都配置status模块
2.在一台nginx server 获取到nginx status的值,写到本地一个临时文件
3.按需求处理临时文件,使用UserParameter=nginx_status[*] 自定义key值的方式,
4.crontab 每分钟获取一次nginx status值
优点,不比每台zabbix 客户端都配置 /etc/zabbix/zabbix_agentd.conf 大大节约时间,并减少错误


缺点,一分钟获取一次,有稍稍不妥,但是时间还是看监控需求,脚本开发需要时间,(其实脚本很
简单)

具体实现方法,脚本思路及解决方案2 不可直接拿来使用,根据实际环境编写,简单的小脚本。此处

,此服务器可以直接使用hostname 访问,所以我使用了web1 web2。
#!/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/
total web1 web1_status web2 web2_status web3 web3_status
#cat /tmp/ngst/web1
Active connections: 1
server accepts handled requests
7716005 7716005 7354221
Reading: 0 Writing: 1 Waiting: 0
# cat /tmp/ngst/web1_status 处理后的文件
Active 1
Reading: 0
Writing: 1
Waiting: 0

设置zabbix agent端 只需修改配置文件,添加如下几行,默认zabbix自定义key以知晓。
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 server端添加下列监控。
1,创建模板,默认都会
2,创建监控项









可以添加个图形,把所以的几个线汇总到一块。








解决方案2 为自己捣鼓,有很多不足之处,大神有更好的解决方案,请分享。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  status 监控 nginx zabiix