目录
nginx的基础监控
- 进程监控
- 端口监控
注意:这两个是必须要加在zabbix监控,加触发器有问题及时告警。
web服务器NGINX以其高性能与抗并发能力越来越多的被用户使用,nginx提供了ngx_http_stub_status_module,ngx_http_request_module模块,这个模块提供了基础的nginx监控功能
监控的主要指标
我们需要对一下主要的指标进行监控:
1、基本活跃指标
accepts(接受)、handled(已处理)、request(请求数)是一直在增加的计数器。Active(活跃)
名称 | 描述 | 指标类型 |
Accepts(接受) | nginx所接受的客户端连接数 | 资源:功能 |
handled(已处理) | 成功的客户端连接数 | 资源:功能 |
dropped(已丢弃,计算得出) | 丢弃的连接数=接受-已处理 | 工作:错误* |
request(请求数) | 客户端请求数 | 工作:吞吐量 |
2、每秒请求数——QPS
通过持续的QPS监控,可以立刻发现是否被恶意攻击或对服务的可用性进行评估。虽然当问题发生时,通过QPS不能定位到确切问题的位置,但是他却可以在第一时间提醒你环境可能出问题了。
3、服务器错误率
通过监控固定时间间隔内的错误代码(4xx代码表示客户端错误,5xx表示服务器端错误),可以了解到客户端收到的结果是否是正确的,错误率突然的飙升很可能是你的网站漏洞发出的信号
如果你希望通过access.log分析错误率,那么你就要配置nginx的日志模块,让nginx将状态码写入访问日志
指标的收集
nginx stub status监控
模块安装
先用命令查看是否已安装这个模块
# -V大写会显示版本号和模块等信息、v小写仅显示版本信息
[root@localhost ~]# nginx -V
如果没有此模块,需要重新安装,编译命令如下:
./configure –with-http_stub_status_module
需要在nginx的配置文件添加这个模块才能使用,配置如下:
server {
listen 80;
server_name localhost;
location /nginx-status {
stub_status on;
access_log on;
}
}
nginx状态查看
配置完成后重新加载nginx'配置文件,在浏览器输入192.168.242.138/nginx-status查看,或者用curl localhost/nginx-status,显示信息如下:
stub_status参数说明
正常情况下waiting数量是比较多的,并不是说性能差。如果reading+writing数量比较多,说明服务器并发有问题。
名称 | 描述 | 是否累加历史数据 |
accepts(接受) | nginx接受的客户端连接数(包括handled+dropped+waiting) | 是 |
handled(已处理) | 成功处理的客户端连接数(包含waiting状态连接) | 是 |
active(活跃) | 当前活跃的客户端连接数 | 否 |
dropped(已丢弃) | 已丢弃连接数(出错) | 是 |
request(请求) | 客户端请求数 | 是 |
waiting(等待) | 正在等待的连接数 | 否 |
reading(读) | 正在执行读操作的连接数 | 否 |
writing(写) | 正在执行操作的连接数 | 否 |
Active connections:2 #当前nginx处理请求的数目(活跃的连接数)
server accepts handled requests 26 26 48
nginx总共处理了26个连接,成功创建26次握手,也就是成功的连接数connection. 总共处理了48个请求
失败连接=(总连接数-成功连接数)(相等表示中间没有失败的)
Nginx Reqstat 模块监控
模块安装
可以监控Nginx的性能、主要监控、连接数、请求数、各种响应码范围的请求数、输入输出流量、rt、upstream访问等。现在通过ngx_req_status_module
能够统计Nginx中请求的状态信息。需要安装第三方模块。
描述:
-
ngx_http_reqstat_module 模块
-
这个模块计算定义的变量,根据变量值分别统计 nginx 的运行状况。
-
可以监视的运行状况有:连接数、请求数、各种响应码范围的请求数、输入输出流量、rt、upstream访问等。
-
可以指定获取所有监控结果或者一部分监控结果。
-
利用变量添加自定义监控状态。总的监控状态最大个数为50个。
-
回收过期的监控数据。
-
设置输出格式
-
跟踪请求,不受内部跳转的影响
-
不要使用与响应相关的变量作为条件,比如"$status"
模块安装
1.下载ngx_req_status_module 模块, 这是第三方模块需要添加
[root@nginx-server ~]# wget https://github.com/zls0424/ngx_req_status/archive/master.zip -O ngx_req_status.zip
[root@nginx-server ~]# unzip ngx_req_status.zip
[root@nginx-server ~]# cp -r ngx_req_status-master/ /usr/local/ #与解压的nginx在同一级目录下
[root@nginx-server ~]# cd /usr/local/nginx-1.16.0/
[root@nginx-server nginx-1.16.0]# yum -y install pcre pcre-devel openssl openssl-devel gcc gcc-c++ zlib zlib-devel
[root@nginx-server nginx-1.16.0]# yum -y install patch.x86_64
[root@nginx-server nginx-1.16.0]# patch -p1 < ../ngx_req_status-master/write_filter-1.7.11.patch
[root@localhost nginx-1.16.0]# ./configure 添加上原来的参数 --add-module=/usr/local/ngx_req_status-master
2.由于原先已有nginx,所以不能执行make install
否则会覆盖掉以前的配置文件及内容
[root@localhost nginx-1.16.0]# make
3.更换二进制文件
[root@localhost nginx-1.16.0]# mv /usr/sbin/nginx /usr/sbin/nginx_bak
[root@localhost nginx-1.16.0]# cp objs/nginx /usr/sbin/
[root@localhost nginx-1.16.0]# systemctl restart nginx
[root@localhost nginx-1.16.0]# nginx -V
如果发现编译的配置文件有变化就成功了!
开启req_stat监控,需要在配置文件的http块中添加这个模块才能使用
[root@localhost ~]# vim /etc/nginx/nginx.conf
req_status_zone server_name $server_name 256k;(开启的req监控)
req_status_zone server_addr $server_addr 256k;
req_status_zone server_url $server_name$uri 256k;
req_status server_name server_addr server_url;
server {
server_name localhost;
location /req-status {
req_status_show on;
}
}
指令介绍
req_status_zone
语法: req_status_zone name string size
默认值: None
配置块: http
定义请求状态ZONE,请求按照string分组来排列,例如:
req_status_zone server_url $server_name$uri 256k;
域名+uri将会形成一条数据,可以看到所有url的带宽,流量,访问数
req_status
语法: req_status zone1[ zone2]
默认值: None
配置块: http, server, location
在location中启用请求状态,你可以指定更多zones。
req_status_show
语法: req_status_show on
默认值: None
配置块: location
在当前位置启用请求状态处理程序
浏览器访问查看nginx状态
请求状态信息包括以下字段:
-
zone_name - 利用req_status_zone定义的分组标准。例如,按照服务器名称对请求进行分组后;
-
key - 请求按分组标准分组后的分组标识(即组名)。例如按服务器名称分组时,组名可能是localhost;
-
max_active - 该组的最大并发连接数;
-
max_bw - 该组的最大带宽;
-
traffic - 该组的总流量;
-
requests - 该组的总请求数;
-
active - 该组当前的并发连接数;
-
bandwidth - 该组当前带宽。