Nginx 监控

一、nginx的基础监控

  • 进程监控
  • 端口监控

注意: 这两个是必须要加在zabbix监控,加触发器有问题及时告警。
web 服务器 nginx 以其高性能与抗并发能力越来越多的被用户使用
nginx 提供了 ngx_http_stub_status_modulengx_http_reqstat_module 模块,这个模块提供了基本的监控功能

二、监控的主要指标

我们需要对以下主要的指标进行监控:

1. 基本活跃指标

Accepts(接受)、Handled(已处理)、Requests(请求数)是一直在增加的计数器。Active(活跃)

名称 描述 指标类型
Accepts(接受) NGINX 所接受的客户端连接数 资源: 功能
Handled(已处理) 成功的客户端连接数 资源: 功能
Dropped(已丢弃,计算得出) 丢弃的连接数(接受 - 已处理) 工作:错误*
Requests(请求数) 客户端请求数 工作:吞吐量

2. 每秒请求数 -- QPS

通过持续的 QPS 监控,可以立刻发现是否被恶意攻击或对服务的可用性进行评估。虽然当问题发生时,通过 QPS 不能定位到确切问题的位置,但是他却可以在第一时间提醒你环境可能出问题了

3. 服务器错误率

通过监控固定时间间隔内的错误代码(4XX代码表示客户端错误,5XX代码表示服务器端错误),可以了解到客户端收到的结果是否是正确的错误率突然的飙升很可能是你的网站漏洞发出的信号

如果你希望通过 access log 分析错误率,那么你需要配置 nginx 的日志模块,让 nginx 将响应码写入访问日志

三、指标的收集

通过在编译时加入 nginx 的 ngx_http_stub_status_module 模块我们可以实时监控以下基本的指标:

1. nginx Stub Status 监控模块安装

先使用命令查看是否已经安装这个模块:

# -V大写会显示版本号和模块等信息、v小写仅显示版本信息
[root@localhost ~]# nginx -V

如果没有此模块,需要重新安装,编译命令如下:

# 记得带上原来的模块
./configure –with-http_stub_status_module

具体的使用方法是在执行 ./configure 时,指定 --with-http_stub_status_module,然后通过配置:

server {
        listen 80;
        server_name localhost;
        location /nginx-status {
                stub_status     on;
                access_log      on;
                }
}

2. nginx 状态查看

配置完成后在浏览器中输入192.168.181.129/nginx-status查看
(或者用 curl 192.168.181.129/nginx-status),显示信息如下:

[root@localhost ~]# curl 192.168.181.129/nginx-status
Active connections: 1 
server accepts handled requests
 10 10 9 
Reading: 0 Writing: 1 Waiting: 0 

3. Stub Status 参数说明

正常情况下 waiting 数量是比较多的,并不能说明性能差。如果 reading+writing 数量比较多说明服务并发有问题。

image.png
前面访问显示的信息
Active connections: 1      # 当前nginx处理请求的数目(活跃的连接数)
server accepts handled requests
          10     10       9 
Reading: 0 Writing: 1 Waiting: 0 

nginx总共处理了10个连接,成功创建10次握手,也就是成功的连接数connection.  总共处理了9个请求 

失败连接=(总连接数-成功连接数)(相等表示中间没有失败的),

4. Reqstat 模块监控 ----已经不支持了(需要导入)

  • ngx_http_reqstat_module 模块
  • 这个模块计算定义的变量,根据变量值分别统计 nginx 的运行状况。
  • 可以监视的运行状况有:连接数、请求数、各种响应码范围的请求数、输入输出流量、rt、upstream访问等。
  • 可以指定获取所有监控结果或者一部分监控结果。
  • 利用变量添加自定义监控状态。总的监控状态最大个数为50个。
  • 回收过期的监控数据。
  • 设置输出格式
  • 跟踪请求,不受内部跳转的影响
  • 不要使用与响应相关的变量作为条件,比如"$status"

现在通过 ngx_req_status_module 能够统计Nginx中请求的状态信息。需要安装第三方模块

安装模块:
tengine官方说req-status模块默认安装。但是并没有。从github引入第三方模块解决该问题

yum与编译安装的nginx扩展模块安装:
[root@nginx-server ~]# yum install -y unzip patch

1. 安装,先查看一下当前编译安装nginx的版本
[root@localhost nginx-1.16.0]# nginx -V  

下载或者上传一个和当前的nginx版本一样的nginx的tar包。
[root@nginx-server ~]# tar xzf nginx-1.16.0.tar.gz -C /usr/local/

2.下载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

[root@localhost nginx-1.16.0]# make 
由于原先已有nginx,所以不能执行make install,否则会覆盖掉以前的配置文件及内容

[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   
如果发现编译的配置文件有变化就成功了!
使用模块:
[root@localhost ~]# vim /etc/nginx/nginx.conf
req_status_zone server_name $server_name 256k;
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
在当前位置启用请求状态处理程序
image.png

请求状态信息包括以下字段:

  • zone_name - 利用req_status_zone定义的分组标准。例如,按照服务器名称对请求进行分组后;
  • key - 请求按分组标准分组后的分组标识(即组名)。例如按服务器名称分组时,组名可能是localhost;
  • max_active - 该组的最大并发连接数;
  • max_bw - 该组的最大带宽;
  • traffic - 该组的总流量;
  • requests - 该组的总请求数;
  • active - 该组当前的并发连接数;
  • bandwidth - 该组当前带宽。

5、nginx access log 分析(扩展):

nginx 的 access log 中可以记录很多有价值的信息,通过分析 access log,可以收集到很多指标

1.制作nginx的日志切割,每天凌晨切割并压缩。

PV:PV(访问量): 即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。

UV:UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容

  • 1、nginx的基础监控 进程监控 端口监控注意: 这两个是必须要加在zabbix监控,加触发器有问题及时告警。n...
    胖虎喜欢小红阅读 682评论 0 10
  • Nginx是一个开源、免费、高性能的HTTP和反向代理服务器,也可以用于IMAP/POP3代理服务器。充分利用Ng...
    Deam无限阅读 1,321评论 0 3
  • 在被监控端安装一个nginx 这里是yum安装 1)在浏览器中输入 "域名/nginx_status" 就会显示n...
    魔曦帝天阅读 309评论 0 0
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 1,997评论 0 9
  • 在被监控端安装一个nginx 这里是yum安装 nginx的ngx_http_stub_status_module...
    _str_阅读 710评论 1 11