prometheus — nginx-vts-exporter


參考文檔:
https://blog.51cto.com/xujpxm/2080146
注: 本文留用自己參考,建議看以上參考文檔,更為細致

prometheus 監控 nginx 使用 nginx-vts-exporter 采集數據。同時,需要 nginx 支持 nginx-module-vts 模塊獲取 nginx 自身的一些數據。

nginx 的模塊支持

進入nginx 安裝包解壓后的目錄,下載模塊文件

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

編譯安裝,只需要在之前的編譯參數中加上 --add-module=/path/to/nginx-module-vts 即可

./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx  --conf-path=/usr/local/nginx/conf/nginx.conf --user=nginx --group=nginx --add-module=./nginx-module-vts
make && make install

修改nginx 配置

http {
    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_host on;   #開啟此功能,會根據不同的server_name進行流量的統計,否則默認會把流量全部計算到第一個上。
    ...
    server {
        listen 1212;
        allow 127.0.0.1;
        allow prometheus_server_ip;  #替換為你的prometheus ip;

      location /nginx-status {
          stub_status on;
          access_log off;
      }
        location /status {
        vhost_traffic_status_display;    
        vhost_traffic_status_display_format html;
        }
                }
        }

在不想統計流量的server 區域(未規范配置server_name或者無需進行監控的server上)可以禁用 vhost_traffic_status:

server {
vhost_traffic_status off;
...
}

數據展示

curl 127.0.0.1:1212/nginx-status

說明:(此處說明參考https://blog.csdn.net/ly_dengle/article/details/78792812)

Active connections: 當前nginx正在處理的活動連接數.
Server accepts handled requests: nginx啟動以來總共處理了52783270 個連接,成功創建52783270 握手(證明中間沒有失敗的),總共處理了136279681 個請求。
Reading: nginx讀取到客戶端的Header信息數.
Writing: nginx返回給客戶端的Header信息數.
Waiting: 開啟keep-alive的情況下,這個值等於 active – (reading + writing),意思就是nginx已經處理完成,正在等候下一次請求指令的駐留連接。
所以,在訪問效率高,請求很快被處理完畢的情況下,Waiting數比較多是正常的.如果reading +writing數較多,則說明並發訪問量非常大,正在處理過程中。

訪問http://127.0.0.1:1212/status,可以得到各種參數

訪問 http://127.0.0.1:1212/status/format/prometheus 可直接獲取prometheus格式的監控數據。
訪問 http://127.0.0.1:1212/status/format/json 可直接獲取json格式的監控數據。

接入prometheus

接入prometheus有兩種方式:
直接用nginx-vts-exporter數據源 和 nginx-vts-exporter 抓取vts數據傳向prometheus

nginx-vts-exporter數據源

將http://127.0.0.1:1212/status/format/prometheus數據源直接接入prometheus

vim /usr/local/prometheus/prometheus.yml
- job_name: 'vts'
  metrics_path: /status/format/prometheus
  file_sd_configs:
  - refresh_interval: 1m
    files:
    - "targets/vts.json"

cat targets/vts.json
[
   {
    "labels": {
      "machine_room": "roomone",
      "job": "proxyone",
      "type": "vts"
    },
    "targets": [
      "1.1.1.1:1212",
      "1.1.1.2:1212"
    ]
  },
  {
    "labels": {
      "machine_room": "roomtwo",
      "job": "proxytwo",
      "type": "vts"
    },
    "targets": [
      "1.1.2.1:1212",
      "1.1.2.2:1212"
    ]
  }
]

nginx-vts-exporter 抓取vts數據傳向prometheus

nginx-vts-exporter 安裝使用

wget -c https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.9.1/nginx-vts-exporter-0.9.1.linux-amd64.tar.gz
tar -xvf nginx-vts-exporter-0.9.1.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/nginx-vts-exporter-0.9.1.linux-amd64/
./nginx-vts-exporter  -nginx.scrape_uri http://127.0.0.1:1212/status/format/json &

端口為9913,查看數據:

curl http://127.0.0.1:9913/metrics > nginx_data

在Prometheus中添加此target 便可接入。

常用監控規則:
求Nginx的QPS:
sum(irate(nginx_server_requests{code="total",host=~"$DomainName"}[5m]))
求4xx萬分率(5xx類似,code=“5xx”):
(sum(irate(nginx_server_requests{code="4xx",host=~"$DomainName"}[5m])) / sum(irate(nginx_server_requests{code="total",host=~"$DomainName"}[5m]))) * 10000
求upstream的QPS(示例求group1的qps):
sum(irate(nginx_upstream_requests{code="total",upstream="group1"}[5m]))
求upstream后端server的響應時間(示例求group1的后端響應時間):
nginx_upstream_responseMsec{upstream=“group1”}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM