1、客户端配置
1.1、nginx开启nginx status
使用 zabbix 监控 nginx,首先 nginx 需要配置 ngx_status,nginx.conf加入以下配置,并重启Nginx或reload
location /ngx_status
{
stub_status on;
access_log off;
#allow 127.0.0.1;
#deny all;
}
nginx status 信息
[fieldyang@www nginx]$ curl http://127.0.0.1:1080/ngx_status
Active connections: 7
server accepts handled requests
7493 7493 7511
Reading: 0 Writing: 6 Waiting: 1
说明
active connections – 活跃的连接数量
server accepts handled requests — 总共处理了7493 个连接 , 成功创建7493 次握手, 总共处理了7511个请求
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
1.2、zabbix 客户端配置
以上为 nginx 性能计数,除了监控以上数据,还需要监控 nginx 进程状态,并且配置触发器!
1.2.1、编写客户端脚本 ngx_status.sh
如脚本无法使用,请检查对应路径和相关变量
[fieldyang@www scripts]$ pwd
/usr/lib/zabbix/scripts
[fieldyang@www scripts]$ cat >ngx_status.sh
#!/bin/bash
# 功能:zabbix 监控 nginx 性能、进程状态、返回码统计
# 说明:需要配置在被监控端,否则 ping 检测将会得到不符合预期的结果
HOST="127.0.0.1"
PORT="1080"
lastmin=`date +"%Y:%H:%M" -d "1 min ago"`
code=$2
# 检测 nginx 进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测 nginx 性能
function active {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
function status_sum {
sum=`grep " ${code}" /var/log/nginx/access.log |grep ${lastmin}|awk '{sum+=1}END{ print sum}'`
if [ "$sum" = "" ]
then
echo 0
else
echo $sum
fi
}
# 执行 function
if [ $# -gt 1 ]
then
status_sum
else
$1
fi
[fieldyang@www scripts]$ chmod +x ngx_status.sh
1.2.2、zabbix 客户端文件配置
将自定义的 UserParameter 加入配置文件,然后重启 agentd,如下:
[fieldyang@www scripts]$ cat /etc/zabbix/zabbix_agentd.conf|grep ^UserParameter
UserParameter=nginx.status[*],/usr/lib/zabbix/scripts/ngx_status.sh $1 $2
[fieldyang@www scripts]$ killall zabbix_agentd
[fieldyang@www scripts]$ ps -ef|grep zabbix_agentd
fieldyang 69914 57012 0 13:52 pts/0 00:00:00 grep --color=auto zabbix_agentd
[fieldyang@www scripts]$ /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
[fieldyang@www scripts]$ ps -ef|grep zabbix_agentd
zabbix 69918 1 0 13:52 ? 00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix 69919 69918 0 13:52 ? 00:00:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix 69920 69918 0 13:52 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix 69921 69918 0 13:52 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix 69922 69918 0 13:52 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix 69923 69918 0 13:52 ? 00:00:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
fieldyang 69928 57012 0 13:52 pts/0 00:00:00 grep --color=auto zabbix_agentd
[fieldyang@www scripts]$
1.2.3、zabbix_get 获取数据
通过此命令我们可以检测配置是否正确,如下命令 192.168.28.132 为zabbix-agent IP地址
Ps.推荐使用VMware安装 centos7最小系统,按需克隆主机,修改网卡配置的IP地址,重启network,便可以拷贝多台机器完成zabbix 学习。
[fieldyang@www network-scripts]$ cat /etc/sysconfig/network-scripts/ifcfg-ens33|grep IPADDR
IPADDR=192.168.28.132
[fieldyang@www scripts]$ for i in ping active reading writing waiting accepts handled requests status_sum
> do
> if [ $i = "status_sum" ]
> then
> for j in 200 301 302 403 404 500
> do
> zabbix_get -s 192.168.28.132 -k nginx.status[$i,$j] |xargs |xargs echo "${i}_${j}:"
> done
> else
> zabbix_get -s 192.168.28.132 -k nginx.status[$i] |xargs |xargs echo "$i:"
> fi
> done
ping: 1
active: 1
reading: 0
writing: 1
waiting: 0
accepts: 141612
handled: 141613
requests: 141218
status_sum_200: 124
status_sum_301: 139
status_sum_302: 99
status_sum_403: 0
status_sum_404: 0
status_sum_500: 0
[fieldyang@www scripts]$
在zabbix server 服务器上执行如上命令, 192.168.28.132 为 agentd 机器
2、zabbix web配置
2.1、创建“Template App NGINX”模板、应用集Nginx (略)
配置-->模板-->创建模板
配置-->模板-->“Template App NGINX”-->应用集-->创建应用集
2.2、创建监控项
配置-->模板-->“Template App NGINX”-->监控项-->创建监控项
注意:自定义的脚本只适合以下监控项,其他需求请按需修改脚本。
2.3、创建触发器
配置-->模板-->“Template App NGINX”-->触发器-->创建触发器
2.4、创建图形
配置-->模板-->“Template App NGINX”-->图形-->创建图形
2.5、创建触发器告警动作
配置-->动作-->左上角选择 触发器动作-->创建动作
2.6、链接模板
配置-->主机-->点击 nginx 所在服务器-->点击 模板-->链接新模板 输入"Template App NGINX"->Add->最后点击 更新。
3、功能验证
测试可以使用 ab工具模拟访问
ab -n 4000 -c 15 http://192.168.28.132:1080/ngx_status >>1.txt
或以下脚本
for i in `seq -w 1 9999`
do
curl http://192.168.28.132:1080/ngx_status>>1.txt
done
3.1、查看最新数据
监测-->最新数据
3.2、查看图形展示
监测-->主机-->选择nginx主机-->图形-->过滤相关图形
3.3、测试触发器动作。
模拟下线nginx
[fieldyang@www ~]$ service nginx stop
Redirecting to /bin/systemctl stop nginx.service
[fieldyang@www]~]$
在问题列表可以看到已经触发问题,并下发告警邮件。
重新上线nginx,可以看到问题已解决,并下发恢复邮件
4、导出模板
实际使用中,可以在测试环境中调试好模板,然后再导入到生产环境中
导出
配置-->模板-->选中要导出的模板-->导出
导入
配置-->模板-->选中要导入的模板-->导入