使用nginx作为web服务器,我们需要清晰知道:
1.nginx的工作状态
2.请求数有多少,多少是已经响应完成的,多少是响应失败的
3.nginx服务以及端口监听情况是否处于运行状态
当出现服务停止或者大量请求响应失败时,我们需要第一时间知道,因此我使用了zabbix通过内置的运行状态模块进行一系列的监控
一.zabbix agent
1. 查看当前Nginx是否已安装内置性能统计模块
注:若是没有就选择源码编译
2.开启运行状态模块
nginx -t
systemctl restart nginx
浏览器访问运行状态页面
Active connections:1
server accepts handled requests 1 1 1Reading:0 Writing:1 Waiting:0
Active connections:当前活动的客户端连接数有多少(包括在等待阶段的)accepts:接受的客户端连接总数
handled:已处理的连接总数(通常与accepts数量一致,但存在某些资源限制的情况
导致数量不一致)
requests:客户端请求总数(包括接受请求或拒绝请求的)Reading:nginxi正在读取请求标头的当前连接数。
Writing:nginx正在将响应写回到客户端的当前连接数。Waiting:当前等待请求的空闲客户端连接数。
3.编写监控脚本并安装zabbix agent
3.1.安装agent2
[root@zabbixnginx local]# yum install https://mirrors.huaweicloud.com/zabbix/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-3.el8.noarch.rpm
[root@zabbixnginx local]# sed -i 's#https://repo.zabbix.com#https://mirrors.huaweicloud.com/zabbix#' /etc/yum.repos.d/zabbix.repo[root@zabbixnginx local]# systemctl restart zabbix-agent2
[root@zabbixnginx local]# systemctl enable zabbix-agent2
3.2.编写监控脚本
mkdir /etc/zabbix/script //脚本存放的默认位置
vim /etc/zabbix/script/ngx_status.sh
#!/bin/bash#定义Nginx status页面
ngx_status="http://192.168.32.190/status"#判断status页面是否存活
ngx_status_code() {http_code=`curl -o /dev/null -s -w %{http_code} ${ngx_status}`if [ ${http_code} == "200" ];thenreturn 1elseecho "Nginx status is not running."fi
}#获取当前活动的客户端连接数
active() {ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}'
}#获取接收客户端连接的总数量
accepts() {ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}'
}#获取已处理的连接总数量
handled() {ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}'
}#获取客户端请求总数量
requests() {ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}'
}#获取正在读取请求标头的当前连接数量
reading() {ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}'
}#获取正在将响应写回到客户端的当前连接数量
writing() {ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}'
}#获取当前正在等待响应的客户端连接数量
waiting() {ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}'
}#使用位置变量控制脚本输出
case $1 inactive)active;;accepts)accepts;;handled)handled;;requests)requests;;reading)reading;;writing)writing;;waiting)waiting;;*)echo "Unknown options"
esac
4.配置zabbix agent
[root@zabbixnginx zabbix]# cp /etc/zabbix/zabbix_agent2.conf{,.bak}
[root@zabbixnginx zabbix]# vim /etc/zabbix/zabbix_agent2.conf
注意:要开启允许访问自定义脚本或者外部命令
5.配置自定义监控项
[root@zabbixnginx zabbix]# vim /etc/zabbix/zabbix_agent2.d/userparameter_nginx.conf
添加以下内容
UserParameter=nginx.active,bash /etc/zabbix/script/ngx_status.sh active
UserParameter=nginx.accepts,bash /etc/zabbix/script/ngx_status.sh accepts
UserParameter=nginx.handled,bash /etc/zabbix/script/ngx_status.sh handled
UserParameter=nginx.requests,bash /etc/zabbix/script/ngx_status.sh requests
UserParameter=nginx.reading,bash /etc/zabbix/script/ngx_status.sh reading
UserParameter=nginx.writing,bash /etc/zabbix/script/ngx_status.sh writing
UserParameter=nginx.waiting,bash /etc/zabbix/script/ngx_status.sh waiting[root@zabbixnginx zabbix]# systemctl restart zabbix-agent2
6.zabbix主机使用zabbix——get进行测试
[root@node1 ~]# zabbix_get -s 192.168.32.190 -k nginx.active
1
二.zabbix server声音告警
2.1.进入zabbix web界面创建模版
2.2.创建主机,添加自定义的监控项
在模版中添加监控项,若是在主机中添加监控项,可用性有局限
声音告警不需要创建触发器的动作,只需要开启声音设置,同时创建触发器即可
2.3.创建触发器,开启声音告警
2.3.查看告警情况
同时发出了声音,注意没有在主机中创建触发器,则需要主机关联模版
2.4.压力测试工具
哈哈哈哈,突然想到了这个工具,就顺手用了一下,跟本次实验无多大关系
吞吐率:服务器并发处理能力的量化描述,指某个并发用户数下单位时间内处理的请求数
并发连接数:某个时刻服务器所接受的请求数目
并发用户数:注意一个用户也可能产生多个连接数,也就是会话
用户平均请求等待时间:处理完所有请求所花费的时间/(总请求数/并发用户数)
服务器平均请求等待时间:处理完所有请求数所花费的时间/总请求数
[root@zabbixnginx ~]# yum whatprovides ab
[root@zabbixnginx ~]# yum install httpd-tools-2.4.51-21.oe2203.x86_64
[root@zabbixnginx ~]# ab
[root@zabbixnginx ~]# ab -n 100 -c 50 http://192.168.32.190/status
三.zabbix server 邮件告警
3.1.配置mail媒介
3.2.测试媒介是否成功设置
3.3.设置报警媒介
3.4.创建触发器(已创建),创建触发器动作 ,并启用
4.5.验证邮件告警