date: 2021-05-12title: Prometheus监控nginx #标题
tags: 监控 #标签
categories: 监控 # 分类
记录下Prometheus如何监控nginx。nginx需要添加第三方模块nginx-module-vts,本文是基于源码编译的方式安装的,如果需要在容器中部署,那么搜索nginx-module-vts,会找到如何在容器中部署的。
nginx添加模块
参考:nginx-module-vts
nginx的安装这里不做展示,自行安装即可,如果你的nginx已经装上了,那么请添加第三方模块后重新编译,过程大概如下:
$ git clone https://github.com/vozlt/nginx-module-vts.git
$ vts=$(readlink -f nginx-module-vts)
$ ./configure --prefix=/apps/usr/nginx-1.18.0 --with-http_ssl_module \
--with-http_addition_module --with-pcre \
--with-http_stub_status_module --with-debug \
--add-module=${vts} --with-stream --with-http_realip_module
# 注,如果你是在现有nginx上添加此模块,请自行进行热升级,不要执行make install
$ make && make install
配置vts模块
$ cat nginx.conf
http {
vhost_traffic_status_zone;
vhost_traffic_status_filter_by_host on; #开启此功能,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个上。
...
server {
...
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
access_log off;
}
}
}
添加 /status
状态页后,请自行重启nginx,使其生效。
访问/status状态页,看到如下页面,即表示成功。
访问IP/status/format/prometheus,可以看到Prometheus格式的监控数据,如下:
接入Prometheus
接入prometheus有两种方式:
- 直接用nginx-vts-exporter数据源;
- nginx-vts-exporter 抓取vts数据传向prometheus。
nginx-vts-exporter数据源
# 修改Prometheus配置文件,增加nginx的job
scrape_configs: # 在此字段中添加如下内容
- job_name: nginx
metrics_path: /status/format/prometheus
static_configs:
- targets:
- 192.168.20.2:80 # 这里的IP是你nginx访问的IP
# 上述配置完成后,metrics_path为:http://192.168.20.2:80/status/format/prometheus
然后可以在Prometheus的target列表中发现新增的nginx即表示成功:
nginx-vts-exporter 抓取vts数据传向prometheus
nginx-vts-exporter方式可参考Github。
猜测是被墙的原因,无法构建二进制,可以下载较老的版本,较老的版本提供了二进制文件。
wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
tar zxf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz -C /opt/
ln -sf /opt/nginx-vts-exporter-0.10.3.linux-amd64 /opt/nginx-vts-exporter-0.10.3
cd /opt/nginx-vts-exporter-0.10.3
nohup ./nginx-vts-exporter -nginx.scrape_uri http://192.168.20.2/status/format/json &
# 可运行./nginx-vts-exporter 查看命令支持的选项
$ ss -lnput | grep 9913 # 确定端口在监听
tcp LISTEN 0 128 [::]:9913 [::]:* users:(("nginx-vts-expor",pid=104751,fd=3))
# 自行修改Prometheus配置文件如下,然后重载Prometheus使其生效
scrape_configs:
- job_name: nginx
metrics_path: /metrics # 此处可省略不写,默认就是/metrics
static_configs:
- targets:
- 192.168.20.2:9913 # 此处是nginx-vts-exporter的监听地址及端口