prometheus监控nginx的实现步骤

 更新时间:2026年05月09日 09:40:48   作者:**Cara**  
本文主要介绍了prometheus监控nginx的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

方式一:nginx-module-vts 方式(推荐,无需额外 exporter)

1. 环境准备与依赖安装

# 1. 安装基础依赖
yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel git wget
# 2. 创建工作目录
mkdir -p /opt/nginx-install && cd /opt/nginx-install
# 3. 下载 Nginx 1.24.0 和 nginx-module-vts 模块
wget http://nginx.org/download/nginx-1.24.0.tar.gz
git clone git://github.com/vozlt/nginx-module-vts.git
# 4. 解压 Nginx 源码包
tar -zxvf nginx-1.24.0.tar.gz
mv nginx-module-vts /usr/local/nginx-module-vts

GitHub 的 git 协议(git://)可能被防火墙拦截,换成 HTTPS 协议,同时使用国内镜像源(如 GitHub 镜像站):

# 1. 先删除失败的空目录(如果有)
rm -rf nginx-module-vts
# 2. 使用 HTTPS 协议克隆(优先)
git clone https://github.com/vozlt/nginx-module-vts.git
# 如果依然失败,使用国内镜像站(如 gitee 镜像)
git clone https://gitee.com/mirrors/nginx-module-vts.git

2. 编译安装 Nginx(带 vts 模块)

# 进入 Nginx 源码目录
cd /opt/nginx-install/nginx-1.24.0
# 配置编译参数(指定安装路径 + 加载 vts 模块)
./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-module-vts/
# 编译并安装(-j 后接CPU核心数,加快编译速度,比如 -j4)
make -j4 && make install
# 验证模块是否加载成功
/usr/local/nginx/sbin/nginx -V | grep nginx-module-vts
# 输出包含 --add-module=/usr/local/nginx-module-vts/ 即表示成功

3. 配置 Nginx 开启状态监控

# 备份原有配置文件
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
# 编辑 Nginx 主配置文件
cat > /usr/local/nginx/conf/nginx.conf << 'EOF'
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    # 开启 vts 状态监控区域
    vhost_traffic_status_zone;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        # 配置状态监控接口
        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
EOF
# 启动/重启 Nginx
/usr/local/nginx/sbin/nginx -t  # 验证配置文件
/usr/local/nginx/sbin/nginx     # 启动
# 如果已启动,执行重启:/usr/local/nginx/sbin/nginx -s reload
# 验证状态页面是否可访问
curl http://172.16.213.29/status          # 查看 HTML 格式状态
curl http://172.16.213.29/status/format/prometheus  # 查看 Prometheus 格式指标

4. 配置 Prometheus 采集 Nginx 指标

# 备份 Prometheus 配置文件
cp /usr/local/prometheus/prometheus.yml /usr/local/prometheus/prometheus.yml.bak
# 编辑 Prometheus 配置,添加 Nginx 采集任务
sed -i '/scrape_configs:/a\  - job_name: "nginx"\n    metrics_path: /status/format/prometheus\n    static_configs:\n      - targets: ["172.16.213.29"]' /usr/local/prometheus/prometheus.yml
# 验证配置文件
/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
# 重启 Prometheus(根据你的启动方式选择,以下是 systemd 方式示例)
systemctl restart prometheus
# 如果是直接启动,先杀死进程再重启:
# ps -ef | grep prometheus | grep -v grep | awk '{print $2}' | xargs kill
# /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml &

方式二:nginx-prometheus-exporter 方式(官方推荐,更简单)

1. 确保 Nginx 已开启 stub_status 模块

# 编辑 Nginx 配置,开启 stub_status
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
sed -i '/server {/a\        location /basic_status {\n            stub_status on;\n            allow 127.0.0.1;\n            allow 172.16.213.0/24;\n            deny all;\n        }' /usr/local/nginx/conf/nginx.conf
# 验证配置并重启
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
# 验证 stub_status 是否可用
curl http://172.16.213.29/basic_status
# 正常输出示例:
# Active connections: 1 
# server accepts handled requests
#  1 1 1 
# Reading: 0 Writing: 1 Waiting: 0

2. 用 Docker 运行 nginx-prometheus-exporter

# 拉取官方镜像
docker pull nginx/nginx-prometheus-exporter:latest
# 启动 exporter(关联 Nginx 的 stub_status 地址)
docker run -d --name nginx-exporter \
  -p 9113:9113 \
  nginx/nginx-prometheus-exporter:latest \
  --nginx.scrape-uri=http://172.16.213.29/basic_status
# 验证 exporter 是否正常输出指标
curl http://172.16.213.29:9113/metrics

3. 配置 Prometheus 采集 exporter 指标

# 编辑 Prometheus 配置,添加 exporter 采集任务
sed -i '/scrape_configs:/a\  - job_name: "nginx-exporter"\n    static_configs:\n      - targets: ["172.16.213.29:9113"]' /usr/local/prometheus/prometheus.yml
# 验证配置并重启 Prometheus
/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
systemctl restart prometheus

总结

  1. nginx-module-vts 方式:无需额外运行 exporter,直接通过 Nginx 自身模块暴露 Prometheus 格式指标,指标更丰富(支持虚拟主机、upstream 等)。
  2. nginx-prometheus-exporter 方式:官方维护,部署更简单,仅依赖 Nginx 原生的 stub_status 模块,适合基础监控需求。
  3. 核心验证步骤:确保 Nginx 状态接口可访问 → Prometheus 配置正确 → Prometheus 页面能看到 nginxnginx-exporter 任务状态为 UP

执行完上述命令后,你可以在 Prometheus Web UI(默认 http://prometheus服务器IP:9090)的「Targets」页面查看 Nginx 采集任务是否正常,也可以通过「Graph」页面查询 Nginx 相关指标(如 nginx_connections_activenginx_requests_total 等)。

正确的验证操作

1. 用浏览器访问 Prometheus UI

在你的电脑(能访问 192.168.52.129 的机器)上打开浏览器,输入:http://192.168.52.129:9090/targets

  • 你会看到 Prometheus 的 Targets 页面,里面会列出 3 个采集任务:prometheusredisnginx_vts
  • 检查nginx_vts的状态:
    • 如果显示UP:说明采集成功
    • 如果显示DOWN:大概率是 Prometheus 访问 Nginx 时的网络问题(但你 curl 能通,大概率是 UP)

2. 验证是否采集到 Nginx 指标

在浏览器中访问:http://192.168.52.129:9090/graph

  • 在输入框中输入指标名:nginx_vts_main_connections
  • 点击Execute按钮,就能看到 Nginx 的连接数指标数据(如果能看到,说明采集成功)

到此这篇关于prometheus监控nginx的实现步骤的文章就介绍到这了,更多相关prometheus监控nginx内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx 查看版本号的方法实现

    nginx 查看版本号的方法实现

    本文主要介绍了nginx 查看版本号的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Nginx会话保持的具体实现

    Nginx会话保持的具体实现

    会话保持是指在会话持续或会话完成一个任务或一个事务的时间段内,将客户端请求引导至同一个后端Web服务器或应用服务器,本文主要介绍了Nginx会话保持的具体实现,感兴趣的可以了解一下
    2024-07-07
  • 配置ab来为Nginx服务器做压力测试的方法

    配置ab来为Nginx服务器做压力测试的方法

    这篇文章主要介绍了配置ab来为Nginx服务器做压力测试的方法,ab是针对Apache的测试工具但本文讲解其测试Nginx的过程,需要的朋友可以参考下
    2016-01-01
  • 解决Nginx location中配置proxy_pass转发时斜线‘/‘导致404问题

    解决Nginx location中配置proxy_pass转发时斜线‘/‘导致404问题

    这篇文章主要介绍了解决Nginx location中配置proxy_pass转发时斜线‘/‘导致404问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Nginx location / 、/a、/a/ 的区别

    Nginx location / 、/a、/a/ 的区别

    Nginx 的location指令匹配遵循一套优先级规则,本文就来详细的介绍Nginx localtion / 、/a、/a/ 的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • 详解nginx服务器绑定域名和设置根目录的方法

    详解nginx服务器绑定域名和设置根目录的方法

    这篇文章主要介绍了详解nginx服务器绑定域名和设置根目录的方法,nginx服务器绑定域名以及设置根目录非常方便,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Nginx配置图片服务器(极简配置)

    Nginx配置图片服务器(极简配置)

    本文主要介绍了主要是Nginx做静态图片服务器的详情配置说明,还包括做反向代理、动静分离、负载均衡的极简配置,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Nginx中if语句的判断条件与多条件判断详解

    Nginx中if语句的判断条件与多条件判断详解

    这篇文章主要介绍了关于Nginx中if语句的判断条件与多条件判断的相关资料,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Nginx搭建高可用的实现

    Nginx搭建高可用的实现

    高可用HA是分布式系统架构设计中必须考虑的因素之一,本文主要介绍了Nginx搭建高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • nginx指定conf文件路径的方法详解

    nginx指定conf文件路径的方法详解

    在使用 Nginx 时,有时需要指定配置文件(nginx.conf)的路径,这篇文章为大家整理了一些常用的方法,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11

最新评论