基于prometheus监控nginx可选两个exporter,一个是通过nginx_exporter主要是获取nginx-status中的内建的指标,nginx自身提供status信息,较为简单,promethues中对应的metrics也较少。另外一个是可以通过 nginx-vts-exporter监控更多的指标,但nginx-vts-exporter依赖在编译nginx的时候添加nginx-module-vts模块来实现。vts提供了访问虚拟主机状态的信息,包含server,upstream以及cache的当前状态,指标会更丰富一些。
1.nginx-vts-exporter
-
版本:nginx-module-vts-0.2.1
下载地址:
-
安装步骤
# 进入nginx安装目录
cd /usr/local/nginx
# 上传nginx-module-vts安装包
# 解压nginx-module-vts
tar -zxvf nginx-module-vts-0.2.1.tar.gz
# 预编译
./configure --add-module=nginx-module-vts-0.2.1
# 编译(这里只make,不要make install,不然会覆盖。如果是新装nginx,可以继续make install)
make
- 调整nginx启动脚本
# 进入nginx的sbin目录
cd /usr/local/nginx/sbin/
# 停止nginx
./nginx -s stop
# 备份原启动脚本
mv nginx nginx.old
# 替换新的启动脚本
cp /usr/local/nginx/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/
# 启动nginx
cd /usr/local/nginx/sbin/
./nginx
# 查看插件是否安装成功
./nginx -V
configure arguments: 最后是否有 --add-module=nginx-module-vts-0.2.1
- 修改配置文件
# 进入nginx的conf目录
cd /usr/local/nginx/conf
# 备份原配置文件
cp nginx.conf nginx.conf.bak
# 修改nginx.conf配置,增加以下内容
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;
}
}
}
# 重启nginx
/usr/local/nginx/sbin/nginx -s reload
配置解析:
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;
...
}
- 验证
2.nginx-vts-exporter安装指导
- 版本:nginx-vts-exporter-0.10.7
- 安装步骤
# 进入nginx安装目录
cd /usr/local/nginx
# 上传nginx-vts-exporter安装包
# 解压nginx-vts-exporter
tar -zxvf nginx-vts-exporter-0.10.7.tar.gz
# 查看默认配置
cd /usr/local/nginx/nginx-vts-exporter-0.10.3.linux-amd64
./nginx-vts-exporter -h
# 输出内容如下
Usage of ./nginx-vts-exporter:
-insecure
Ignore server certificate if using https (default true)
-metrics.namespace string
Prometheus metrics namespace. (default "nginx")
-nginx.scrape_timeout int
The number of seconds to wait for an HTTP response from the nginx.scrape_uri (default 2)
-nginx.scrape_uri string
URI to nginx stub status page (default "http://localhost/status")
-telemetry.address string
Address on which to expose metrics. (default ":9913")
-telemetry.endpoint string
Path under which to expose metrics. (default "/metrics")
-version
Print version information.
- 将nginx-vts-exporter配置为系统服务
# 进入systemd目录
cd /usr/lib/systemd/system
# 创建文件
vim nginx-vts-exporter.service
# 添加如下内容
[Unit]
Description=https://github.com/hnlq715/nginx-vts-exporter
After=network-online.target
[Service]
Restart=on-failure
ExecStart=/usr/local/nginx/nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter -nginx.scrape_uri http://10.15.111.15/status/format/json
[Install]
WantedBy=multi-user.target
# 保存退出后生效系统文件
systemctl daemon-reload
# 设置开机自启
systemctl enable nginx-vts-exporter
# 启动nginx-vts-export
systemctl restart nginx-vts-exporter
- 查看nginx-vts-export启动状态
- 验证
- 添加prometheus监控配置并重启
# 进入prometheus目录
cd /usr/local/prometheus
# 修改 prometheus.yml
vim prometheus.yml
# 添加如下内容
- job_name: 'nginx'
scrape_interval: 30s
static_configs:
- targets: ['39.101.198.57:9913']
labels:
instance: '监控(39.101.198.57:9913)'
# 重启prometheus
systemctl restart prometheus
- 查看nginx监控