基于 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 的当前状态,显然指标会更丰富一些。主要是介绍基于 prometheus 使用 nginx-vts-exporter 对 nginx 进行监控。
相关安装文件:
https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.1.18.tar.gz
https://github.com/hnlq715/nginx-vts-exporter/archive/refs/tags/v0.10.7.tar.gz
一、nginx-module-vts安装配置
1、安装nginx-module-vts
# 进入nginx安装目录
cd /usr/local/nginx/nginx-1.20.1/
# 下载nginx-module-vts
wget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.1.18.tar.gz
# 解压nginx-module-vts
tar -zxvf v0.1.18.tar.gz
# 预编译
./configure --add-module=nginx-module-vts-0.1.18
# 编译(这里只make,不要make install,不然会覆盖。如果是新装nginx,可以继续make install)
make
wget --no-check-certificate https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.1.18.tar.gz
2、调整启动脚本
/usr/local/nginx/sbin/
# 停止nginx
./nginx -s stop
# 备份原启动脚本
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
# 替换新的启动脚本
cp /usr/local/nginx/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/
# 启动nginx
cd /usr/local/nginx/sbin/
./nginx
3、查看插件安装成功
./nginx -V
configure arguments: 最后是否有 --add-module=/etc/nginx/modules/nginx-module-vts-0.1.18
4、配置/status
cd /usr/local/nginx/conf/
# 备份原配置文件
cp /usr/local/nginx/conf/nginx.conf /usr/local/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;
}
}
}
配置解析:
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;
...
}
假如nginx没有规范配置server_name或者无需进行监控的server上,那么建议在此vhost上禁用统计监控功能。否则会出现“127.0.0.1”,hostname等的域名监控信息。
5、重启nginx
cd /usr/local/nginx/sbin/
# 校验配置文件
./nginx -t
# 停止nginx
./nginx -s stop
# 启动nginx
./nginx
6、验证
二、nginx-vts-exporter安装配置
1、本地下载后上传到linux服务器
官网下载地址:https://github.com/hnlq715/nginx-vts-exporter/releases/download/
2、直接在linux服务器上wget方式下载
# 进入nginx目录
cd /usr/local/nginx/
# 下载
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 /usr/local/nginx/nginx-vts-exporter-0.10.3.linux-amd64 /usr/local/nginx/nginx-vts-exporter
# 进入目录
cd /usr/local/nginx/nginx-vts-exporter
3、将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/nginx-vts-exporter -nginx.scrape_uri http://39.101.198.57/status/format/json
[Install]
WantedBy=multi-user.target
4、生效系统文件
systemctl daemon-reload
5、设置开机自启
systemctl enable nginx-vts-exporter
6、启动和停止服务命令
# 查看状态
systemctl status nginx-vts-exporter
# 启动
systemctl start nginx-vts-exporter.service
# 停止
systemctl stop nginx-vts-exporter.service
7、验证
三、添加 Prometheus 监控配置
# 进入prometheus目录
/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)'
四、grafana展示
1、导入模板2949
2、nginx监控指标说明
指标 | 说明 |
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 平均响应时长,精确到每个节点 |