用Prometheus细化Nginx监控

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

内容简介:国内用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


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

查看所有标签

猜你喜欢:

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

Essential PHP Security

Essential PHP Security

Chris Shiflett / O'Reilly Media / 2005-10-13 / USD 29.95

Being highly flexible in building dynamic, database-driven web applications makes the PHP programming language one of the most popular web development tools in use today. It also works beautifully wit......一起来看看 《Essential PHP Security》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

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

RGB CMYK 互转工具