用Prometheus细化Nginx监控

栏目: 数据库 · 发布时间: 6年前

内容简介:国内用Nginx的比较多,Nginx的监控比较老的方案可能是通过跑脚本定期收集nginx的status模块的数据,或者监控nginx的日志;后来阿里的tengine在国内开始流行,于是诞生了很多不错的lua模块;但是这些监控方案在有新的监控需求的时候,可能就需要再修改脚本或者更改nginx conf配置,有时候不是特别的方便。用Prometheus进行nginx的监控可以自动的对相关server_name和upstream进行监控,你也可以自定义Prometheus的数据标签,实现对不同机房和不同项目的n

国内用Nginx的比较多,Nginx的监控比较老的方案可能是通过跑脚本定期收集nginx的status模块的数据,或者监控nginx的日志;后来阿里的tengine在国内开始流行,于是诞生了很多不错的 lua 模块;但是这些监控方案在有新的监控需求的时候,可能就需要再修改脚本或者更改nginx conf配置,有时候不是特别的方便。用Prometheus进行nginx的监控可以自动的对相关server_name和upstream进行监控,你也可以自定义Prometheus的数据标签,实现对不同机房和不同项目的nginx进行监控。

监控Nginx主要用到以下三个模块:

nginx-module-vts:Nginx virtual host traffic status module,Nginx的监控模块,能够提供JSON格式的数据产出。

nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。

Prometheus:监控Nginx-vts-exporter提供的Nginx数据,并存储在时序数据库中,可以使用PromQL对时序数据进行查询和聚合。

一、nginx-module-vts模块的编译

nginx_vts_exporter依赖nginx-module-vts模块,安装此模块无需任何其他依赖。模块与Nginx的版本兼容性如下:

1.11.x (last tested: 1.11.10)

1.10.x (last tested: 1.10.3)

1.8.x (last tested: 1.8.0)

1.6.x (last tested: 1.6.3)

1.4.x (last tested: 1.4.7)

同时适用于tengine,其他nginx早期版本未做验证。

安装步骤:

1.下载模块

shell> git clone git://github.com/vozlt/nginx-module-vts.git

2.编译配置

在nginx编译时添加vts模块

--add-module=/path/to/nginx-module-vts

下载官方的软件包并编译进vts模块,例如:

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_sysguard_module  --add-module=nginx-module-vts

3.安装:

make && make install

二、Nginx Conf配置

更改Nginx Conf的配置,添加监控接口/status/:

http {

vhost_traffic_status_zone;

vhost_traffic_status_filter_by_host on;

...

server {

...

location /status {

vhost_traffic_status_display;

vhost_traffic_status_display_format html;

}

}

}

配置建议:

1.打开vhost过滤:

vhost_traffic_status_filter_by_host on;

开启此功能,在Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上。

2.在不想统计流量的server区域禁用vhost_traffic_status,配置示例:

server {

...

vhost_traffic_status off;

...

}

假如nginx没有规范配置server_name或者无需进行监控的server上,那么建议在此vhost上禁用统计监控功能。否则会出现“127.0.0.1”,hostname等的域名监控信息。

三、监控数据的查看

安装完vts模块后,可以通过nginx status接口进行监控数据的查看,比如:http://127.0.0.1/status:

用Prometheus细化Nginx监控

在页面的最下方可以指定监控页面刷新的时间间隔,点击JSON,可以转为JSON格式输出。

用Prometheus细化Nginx监控

三、nginx-vts-exporter的使用

exporter会收集nginx性能指标的JSON格式数据,并汇总后暴露监控接口给Prometheus。

它的安装使用很简单,开箱即用:

1.下载当前最新版本的软件包:

nginx-vts-exporter-0.9.1.linux-amd64.tar.gz

可以到 Linux 公社资源站下载:

------------------------------------------分割线------------------------------------------

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是 www.linuxidc.com

具体下载目录在/2018年资料/8月/6日/用Prometheus细化Nginx监控/

下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割线------------------------------------------

2.解压后运行:

# nginx-vts-exporter-0.9.1.linux-amd64/nginx-vts-exporter -nginx.scrape_timeout 10 -nginx.scrape_uri http://127.0.0.1/status/format/json

推荐exporter和nginx安装在同一台机器上,如果不在同一台主机,把scrape_uri改为nginx主机的地址。

nginx_vts_exporter的默认端口号:9913,对外暴露监控接口http://xxx:9913/metrics.

四、Nginx的监控数据类型

nginx-vts-exporter的数据类型命名空间默认以“nginx”开头,主要有如下9个:

HELP是对监控条目的解释,TYPE的格式是:监控条目名称+Prometheus数据类型:

# HELP nginx_server_bytes request/response bytes

# TYPE nginx_server_bytes counter

# HELP nginx_server_cache cache counter

# TYPE nginx_server_cache counter

# HELP nginx_server_connections nginx connections

# TYPE nginx_server_connections gauge

# HELP nginx_server_requestMsec average of request processing times in milliseconds

# TYPE nginx_server_requestMsec gauge

# HELP nginx_server_requests requests counter,可以区分状态码

# TYPE nginx_server_requests counter

# HELP nginx_upstream_bytes request/response bytes

# TYPE nginx_upstream_bytes counter

# HELP nginx_upstream_requestMsec average of request processing times in milliseconds

# TYPE nginx_upstream_requestMsec gauge

# HELP nginx_upstream_requests requests counter,可以区分状态码

# TYPE nginx_upstream_requests counter

# HELP nginx_upstream_responseMsec average of only upstream/backend response processing times in milliseconds

# TYPE nginx_upstream_responseMsec gauge

五、Nginx监控在Prometheus的数据汇总

常用监控汇总表达式:

DomainName对应nginx conf里的server_name,这里可以根据不同的server_name和upstream分别进行qps、2xx/3xx/4xx/5xx的状态码监控,另外也可以监控nginx每台后端server的qps和后端接口响应时间。

如果不需要区分server_name,可以把表达式里的$DomainName改为星号,“*****”代表所有;

1.求Nginx的QPS:

sum(irate(nginx_server_requests{code="total",host=~"$DomainName"}[5m]))

2.求4xx万分率(5xx类似,code=“5xx”):

(sum(irate(nginx_server_requests{code="4xx",host=~"$DomainName"}[5m])) / sum(irate(nginx_server_requests{code="total",host=~"$DomainName"}[5m]))) * 10000

3.求upstream的QPS(示例求group1的qps):

sum(irate(nginx_upstream_requests{code="total",upstream="group1"}[5m]))

4.求upstream后端server的响应时间(示例求group1的后端响应时间):

nginx_upstream_responseMsec{upstream=“group1”}

六、Nginx监控的展示

Dashboard的展示当然是使用grafana,自己根据表达式画图即可,监控图类似:

用Prometheus细化Nginx监控

Linux公社的RSS地址: https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-08/153376.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

《Hello Ruby:儿童编程大冒险》(平装)

《Hello Ruby:儿童编程大冒险》(平装)

(芬兰)琳达·刘卡斯 / 窝牛妈 / 浙江人民美术出版社 / 2018

快来认识Ruby——一个想象力丰富,喜欢解决难题的女生。Ruby认识了一群新朋友:聪明的雪豹、友好的狐狸、忙碌的机器人等等。这本书以讲故事的方式向孩子们介绍了基础的计算思维,比如拆分问题,制定分步计划,寻找规律,打破思维定势等等;之后,通过一系列鼓励探索和创造的练习和活动,孩子们对这些关乎编程核心问题的基本概念有了进一步的理解。一起来看看 《《Hello Ruby:儿童编程大冒险》(平装)》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具