用Prometheus细化Nginx监控

国内用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

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


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

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

  1. 下载当前最新版本的软件包:
    # wget -c https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.9.1/nginx-vts-exporter-0.9.1.linux-amd64.tar.gz
  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,自己根据表达式画图即可,监控图类似:

原文地址:http://blog.51cto.com/xujpxm/2080146

时间: 2024-10-10 20:02:10

用Prometheus细化Nginx监控的相关文章

Prometheus+Grafana部署监控docker服务

1.环境192.168.244.128 Prometheus 监控服务器192.168.244.129 docker 服务(被监控端)注:都是centos7.5系统 2.下载安装包https://prometheus.io/download/ (需要的安装包都可以下载)wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz 服务端(监控se

使用Helm部署Prometheus和Grafana监控Kubernetes

使用Helm部署Prometheus和Grafana监控Kubernetes [TOC] 1. 环境说明 可用的kubernetes集群 可用的持久化存储 可用的helm 这里我们使用kubeapps管理charts. 2. 安装chart 安装时,适当修改values.yaml里的参数以适应自身的环境.我是设置持久化存储.ingress和证书secret. 安装Prometheus 安装成功后,注意提示页面的提示.同一namespace里,引用域名可只使用前面一段. 同理,安装stable/m

zabbix实现对nginx监控并实现nginx服务自愈

1.zabbix-server端(ubuntu1804) 1)必要的软件包 zabbix-server-mysql zabbix-frontend-php 2)启动的服务 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:10051 0.0.0.0:* users:(("zabbix_server",pid=3991,fd=4),("zabbix_server"

Prometheus 运维监控

Prometheus 运维监控 1.Prometheus 介绍详解 2.Prometheus 安装部署 3.Prometheus 配置文件详解 4.Prometheus PromSQL 常用资源 5.Prometheus 配置采集目标 6.Prometheus 重新标签 7.Prometheus 标签使用示例整合 8.Prometheus 基于文件的服务发现 9.Prometheus 监控linux服务器 10.Prometheus PromSQL 获取系统服务运行状态 11.Prometheu

nginx+tomcat简单反向代理+nginx监控

首先nginx要知道正向代理,反向代理正向代理:访问GG,此时肯定需要一个FQ,然后找到一个可以访问国外的一个代理,然后代理去访问GG,将数据传递给我们.这个时候代理做的位置就是正向代理,反向代理:比如访问某宝,代理的是服务端,nginx接收之后按一地你给规则分发给后端的业务处理服务器进行处理, 环境tomcat8080 tomcat8081nginx 做反向代理nginx配置 这个配置是在http标签里边 upstream myserver { server 192.168.4.4:8080

k8s+Prometheus+Grafana的监控部署

一.安装部署k8s集群 可以参考https://www.cnblogs.com/liugp/p/12115945.html 二.Prometheus+Grafana的监控部署 2.1.master/node节点环境部署 在[master]可以进行安装部署安装git,并下载相关yaml文件 https://gitee.com/liugpwwwroot/k8s-prometheus-grafana.git 在[node]节点下载监控所需镜像(非必须) docker pull prom/node-ex

k8s部署prometheus和grafana监控pod和机器资源(11)

之前咱们有讲过k8s的网络模式,一定要多练习今天我们来讲解一下监控具体的yaml我已经放到百度网盘了,大家可以直接下载使用链接:https://pan.baidu.com/s/16LLvtAM5EJaiy0AnmMTjjQ 提取码:xw54 grafana这个工具是一个图形化的界面,主要负责展示信息,功能非常强大,可以结合prometheus.zabbix.进行收集暂时,另外包括mysql,zk.etcd,nginx这些数据都可以收集展示prometheus是一个时序的数据库,什么是时序的数据库

nginx+keepalived(带nginx监控脚本)

Keepalived+ nginx的安装部署   主机:IP->10.252.3.160  nginx已安装OK(省略) 备机:IP->10.252.3.161   nginx已安装OK(省略) VIP:10.252.3.162   第一步:主备一起安装keepalived     yum installkeepalived –y 第二步:配置/etc/keepalived/keepalived.conf 主机10.252.3.160配置如下: !Configuration File for

360 基于 Prometheus的在线服务监控实践

转自:https://mp.weixin.qq.com/s/lcjZzjptxrUBN1999k_rXw 主题简介: Prometheus基础介绍 Prometheus打点及查询技巧 Prometheus高可用和服务发现经验 初衷 最近参与的几个项目,无一例外对监控都有极强的要求,需要对项目中各组件进行详细监控,如服务端API的请求次数.响应时间.到达率.接口错误率.分布式存储中的集群IOPS.节点在线情况.偏移量等. 比较常见的方式是写日志,将日志采集到远端进行分析和绘图,或写好本地监控脚本进