最近我们想要用 Prometheus 来监控 Nginx 的状态,所以看了一下有个 module 可以支持。项目地址在:https://github.com/vozlt/nginx-module-vts.git

重新编译 Nginx

首先执行 nginx -V 查看编译参数,记录一下, 比如

1
--prefix=/usr/local/nginx --user=www --group=www --with-stream --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.1.1k --with-pcre=../pcre-8.45 --with-pcre-jit --with-ld-opt=-ljemalloc

然后需要 Nginx 源码包和当前安装的 Nginx 版本相同

下载 nginx_module_vts

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

进入 nginx 源码目录

1
cd nginx-1.20.2

开始编译,编译时增加一条参数

1
--add-module=../nginx-module-vts

结合上面记录的编译参数,完整的编译参数是:

1
./configure --prefix=/usr/local/nginx --user=www --group=www --with-stream --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.1.1k --with-pcre=../pcre-8.45 --with-pcre-jit --with-ld-opt=-ljemalloc --add-module=../nginx-module-vts

开始编译

1
make

然后将编译好的二进制文件替换现有的 nginx

1
cp /data/server/nginx-1.20.2/objs/nginx /usr/local/nginx/sbin/nginx

注:nginx-module-vts 模块从 0.1.17+ 版本之后原生支持 prometheus 数据格式,可跳过 nginx-vts-exporter 的安装。

之前没安装过 nginx 的可以直接 make && make install

开启监控

1
2
3
4
5
6
7
8
9
10
11
12
# 在 http 和 server 块中加入如下信息
http {
vhost_traffic_status_zone;
...
server {
...
location /metrics {
vhost_traffic_status_display;
vhost_traffic_status_display_format prometheus;
}
}
}

监控接口为:

1
2
3
4
5
支持的输出格式有json html和 Prometheus

localhost/metrics
localhost/metrics/format/json
localhost/metrics/format/prometheus