运维小白分享zabbix监控nginx经验


#1
  • nginx简介:

Nginx是一个高性能的HTTP和反向代理服务器。内存少,并发能力强等特性让他一跃成为世界上第二流行的web服务器,被广大互联网公司使用。

  • 本公司使用nginx的场景:

和nginx关联的server数量:100+,openresty,tengine也都尝试过,综合对比、评估效果来看,还是nginx更适合我们的架构。还有一个更重要的原因就是nginx简单易用,网上学习资料多。

  • nginx监控的基础指标:

1、nginx是否存活

2、nginx活跃连接数

3、nginx读取到客户端的连接数量

4、nginx响应客户端的连接数量

5、nginx驻留连接

6、nginx每分钟收到的连接数

7、nginx每分钟成功处理的连接数

zabbix结合监控脚本实时监控nginx:

#!/bin/bash  
# Script to fetch nginx statuses for tribily monitoring systems

# Set Variables  
HOST="127.0.0.1"
PORT="80" 

# Functions to return nginx stats 

function alive {
alive=\`/usr/bin/curl -s "http://\$HOST:\$PORT/nginx_status" 2> /dev/null| grep 'Active' | awk '{print $NF}'`

if [ -z ${alive} ];
then
echo 0
else
echo 1
fi
}

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.conf文件

#monitor nginx

UserParameter=nginx.alive,/usr/local/zabbix-2.4.5/script/check_status alive
UserParameter=nginx.accepts,/usr/local/zabbix-2.4.5/script/check_status accepts
UserParameter=nginx.handled,/usr/local/zabbix-2.4.5/script/check_status handled
UserParameter=nginx.requests,/usr/local/zabbix-2.4.5/script/check_status requests
UserParameter=nginx.connections.active,/usr/local/zabbix-2.4.5/script/check_status active
UserParameter=nginx.connections.reading,/usr/local/zabbix-2.4.5/script/check_status reading
UserParameter=nginx.connections.writing,/usr/local/zabbix-2.4.5/script/check_status writing
UserParameter=nginx.connections.waiting,/usr/local/zabbix-2.4.5/script/check_status waiting
  • zabbix_agentd.conf文件中include nginx.conf文件,增加一个扩展。

    Include=/usr/local/zabbix-2.4.5/shell/nginx.conf

如果有的同学对自定义脚本监控不太熟悉,可以看看运维生存时间上总结的内容:https://www.ttlsa.com/zabbix/zabbix-user-parameters/

附带两张监控截图

  • 出现问题第一时间发送报警消息。

报警Trigger触发规则,nginx是否存活:

Trigger  严重程度:Disaster

触发条件{Nginx Status:nginx.alive.last(0)}=0

前面脚本传值,如果nginx挂了,会返回0,触发告警。其他的监控指标的报警阀值也都可以进行自定义,熟悉zabbix的同学应该都能够搞定。小白就不在这里献丑了。

接收告警消息可以选择邮件和短信、网上教程也比较多,教程帖子:
http://www.iyunv.com/thread-22904-1-1.html
http://www.iyunv.com/thread-40998-1-1.html

如果觉得自己搞这些比较麻烦的话,也可以试试 OneAlert 一键集成zabbix,短信、电话、微信、APP啥都能搞定,还免费,用着不错。
http://www.onealert.com/activity/zabbix.html

初学zabbix,希望能和大家共同进步,把自己学到用到的share给大家。