Prometheus监控nginx有两种方式。
一种是通过nginx-exporter监控,需要开启nginx_stub_status,主要是nginx自身的status信息,metrics数据相对较少;
另一种是使用nginx-vts-exporter监控,但是需要在编译nginx的时候添加nginx-module-vts模块,监控数据较多,提供了包含server、upstream以及cache的相关监控指标,指标更加丰富
综合上述两种优缺点,我采用nginx-vts-exporter实现对nginx的监控。
0.实验环境
版本 | 地址 | |
nginx | 1.26.0 | https://blog.csdn.net/liulunan_lln/article/details/140295547 |
nginx-module-vts | 0.2.2 | https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.1.tar.gz |
nginx-vts-exporter | 0.10.3 | https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz |
1.对现有nginx升级
1.1 安装nginx-module-vts
# 进入nginx安装目录
cd /root/nginx/nginx-1.26.0
# 下载新的nginx-module-vts
wget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.2.tar.gz
# 解压
tar -zxvf v0.2.2.tar.gz
# 预编译 需要新增--add-module=nginx-module-vts-0.2.2 --prefix是nginx的安装目录,需要跟现有的nginx保持一致
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --add-module=nginx-module-vts-0.2.2
# 编译(这里只make,不要make install,不然会覆盖。如果是新装nginx,可以继续make install)
make
make install
1.2 调整配置文件
cd /usr/local/nginx/conf/
# 备份原配置文件
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
vi /usr/local/nginx/conf/nginx.conf
# 修改nginx.conf配置,增加以下内容
http {
# 需要配置
vhost_traffic_status_zone;
vhost_traffic_status_filter_by_host on;
server {
listen 80; #端口任意
server_name localhost;
# 主要是这个location配置
location /status/ {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}
添加在nginx.conf中的http段落下。
开启基础监控
vhost_traffic_status_zone;
开启详细状态码统计
vhost_traffic_status_filter on;
vhost_traffic_status_filter_by_set_key $status $server_name;
开启URL统计
vhost_traffic_status_filter on;
vhost_traffic_status_filter_by_set_key
u
r
i
u
r
i
s
:
:
uri uris::
uriuris::server_name;
配置建议:
- 打开vhost过滤vhost_traffic_status_filter_by_host on;
开启此功能,在Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上。 - 在不想统计流量的server区域禁用vhost_traffic_status,在sever中添加vhost_traffic_statusoff;假如nginx没有规范配置server_name或者无需进行监控的server上,那么建议在此vhost上禁用统计监控功能。否则会出现“127.0.0.1”,hostname等的域名监控信息。
1.3 重启nginx
# 停止旧nginx
/usr/local/nginx/sbin/nginx -s stop
# 启动nginx
/usr/local/nginx/sbin/nginx
# 查看nginx是否包含nginx-module-vts-0.2.2
# configure arguments: 最后是否有 --add-module=nginx-module-vts-0.2.2
[root@master nginx]# ./sbin/nginx -V
nginx version: nginx/1.26.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --add-module=nginx-module-vts-0.2.2
1.4 验证
浏览器访问:http://ip:port/status
2.指标采集器nginx-vts-exporter
2.1 下载
wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
tar -zxvf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
mv nginx-vts-exporter-0.10.3.linux-amd64 /root/exporter/nginx_exporter/
rm -rf nginx-vts-exporter-0.10.3.linux-amd64 nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
2.2 启动采集器
nohup /root/exporter/nginx_exporter/nginx-vts-exporter -nginx.scrape_uri https://192.168.56.110/status/format/json -telemetry.address=:49148 >> /root/exporter/nginx_exporter/nginx_vts_exporter.log 2>&1 &
2.3 查看效果
3.配置到prometheus
打开prometheus配置文件prometheus.yml
,然后使配置生效执行curl -X POST http://192.168.56.110:9090/-/reload
4.grafana添加nginx看板
面板地址:https://grafana.com/grafana/dashboards/2949-nginx-vts-stats/
导入模板编号:2949
5.监控指标说明
- nginx_server_requests:统计nginx各个host 各个请求的总数,精确到状态码
- nginx_upstream_requests:统计各个upstream 请求总数,精确到状态码
- nginx_server_connections:统计nginx几种连接状态type的连接数
- nginx_server_cache:统计nginx缓存计算器,精确到每一种状态和转发type
- nginx_server_bytes: 统计nginx进出的字节计数可以精确到每个host,in进,out出
- nginx_upstream_bytes: 统计nginx各个 upstream 分组的字节总数,细分到进出
- nginx_upstream_responseMsec:统计各个upstream 平均响应时长,精确到每个节点
- nginx_server_info:可以用于判断nginx是否存活
- nginx_vts_exporter_build_info:可以用于判断nginx vts exporter是否存活
参考
- prometheus通过nginx-vts-exporter监控nginx
- Prometheus nginx-vts-exporter 监控 Nginx