date: 2021-05-12title: Prometheus监控nginx #标题
tags: 监控 #标签
categories: 监控 # 分类

记录下Prometheus如何监控nginx。nginx需要添加第三方模块nginx-module-vts,本文是基于源码编译的方式安装的,如果需要在容器中部署,那么搜索nginx-module-vts,会找到如何在容器中部署的。

nginx添加模块

参考:nginx-module-vts
nginx的安装这里不做展示,自行安装即可,如果你的nginx已经装上了,那么请添加第三方模块后重新编译,过程大概如下:

  1. $ git clone https://github.com/vozlt/nginx-module-vts.git
  2. $ vts=$(readlink -f nginx-module-vts)
  3. $ ./configure --prefix=/apps/usr/nginx-1.18.0 --with-http_ssl_module \
  4. --with-http_addition_module --with-pcre \
  5. --with-http_stub_status_module --with-debug \
  6. --add-module=${vts} --with-stream --with-http_realip_module
  7. # 注,如果你是在现有nginx上添加此模块,请自行进行热升级,不要执行make install
  8. $ make && make install

配置vts模块

  1. $ cat nginx.conf
  2. http {
  3. vhost_traffic_status_zone;
  4. vhost_traffic_status_filter_by_host on; #开启此功能,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个上。
  5. ...
  6. server {
  7. ...
  8. location /status {
  9. vhost_traffic_status_display;
  10. vhost_traffic_status_display_format html;
  11. access_log off;
  12. }
  13. }
  14. }

添加 /status 状态页后,请自行重启nginx,使其生效。

访问/status状态页,看到如下页面,即表示成功。

Prometheus监控nginx - 图1

访问IP/status/format/prometheus,可以看到Prometheus格式的监控数据,如下:

Prometheus监控nginx - 图2

接入Prometheus

接入prometheus有两种方式:

  • 直接用nginx-vts-exporter数据源;
  • nginx-vts-exporter 抓取vts数据传向prometheus。

nginx-vts-exporter数据源

  1. # 修改Prometheus配置文件,增加nginx的job
  2. scrape_configs: # 在此字段中添加如下内容
  3. - job_name: nginx
  4. metrics_path: /status/format/prometheus
  5. static_configs:
  6. - targets:
  7. - 192.168.20.2:80 # 这里的IP是你nginx访问的IP
  8. # 上述配置完成后,metrics_path为:http://192.168.20.2:80/status/format/prometheus

然后可以在Prometheus的target列表中发现新增的nginx即表示成功:

Prometheus监控nginx - 图3

nginx-vts-exporter 抓取vts数据传向prometheus

nginx-vts-exporter方式可参考Github

猜测是被墙的原因,无法构建二进制,可以下载较老的版本,较老的版本提供了二进制文件。

  1. wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
  2. tar zxf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz -C /opt/
  3. ln -sf /opt/nginx-vts-exporter-0.10.3.linux-amd64 /opt/nginx-vts-exporter-0.10.3
  4. cd /opt/nginx-vts-exporter-0.10.3
  5. nohup ./nginx-vts-exporter -nginx.scrape_uri http://192.168.20.2/status/format/json &
  6. # 可运行./nginx-vts-exporter 查看命令支持的选项
  7. $ ss -lnput | grep 9913 # 确定端口在监听
  8. tcp LISTEN 0 128 [::]:9913 [::]:* users:(("nginx-vts-expor",pid=104751,fd=3))
  9. # 自行修改Prometheus配置文件如下,然后重载Prometheus使其生效
  10. scrape_configs:
  11. - job_name: nginx
  12. metrics_path: /metrics # 此处可省略不写,默认就是/metrics
  13. static_configs:
  14. - targets:
  15. - 192.168.20.2:9913 # 此处是nginx-vts-exporter的监听地址及端口

Prometheus监控nginx - 图4