1. 程式人生 > >prometheus+grafana監控nginx

prometheus+grafana監控nginx

概述:

國內用Nginx的比較多,Nginx的監控比較老的方案可能是通過跑指令碼定期收集nginx的status模組的資料,或者監控nginx的日誌;後來阿里的tengine在國內開始流行,於是誕生了很多不錯的lua模組;但是這些監控方案在有新的監控需求的時候,可能就需要再修改指令碼或者更改nginx conf配置,有時候不是特別的方便。用Prometheus進行nginx的監控可以自動的對相關server_name和upstream進行監控,你也可以自定義Prometheus的資料標籤,實現對不同機房和不同專案的nginx進行監控。
監控Nginx主要用到以下三個模組:
nginx-module-vts

:Nginx virtual host traffic status module,Nginx的監控模組,能夠提供JSON格式的資料產出。
nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用於收集Nginx的監控資料,並給Prometheus提供監控介面,預設埠號9913。
Prometheus:監控Nginx-vts-exporter提供的Nginx資料,並存儲在時序資料庫中,可以使用PromQL對時序資料進行查詢和聚合

 

1.nginx-module-vts模組編譯

nginx_vts_exporter依賴nginx-module-vts模組,安裝此模組無需任何其他依賴。模組與Nginx的版本相容性如下:

1.11.x (last tested: 1.11.10)
1.10.x (last tested: 1.10.3)
1.8.x (last tested: 1.8.0)
1.6.x (last tested: 1.6.3)
1.4.x (last tested: 1.4.7)

同時適用於tengine,其他nginx早期版本未做驗證。
安裝步驟

1.1下載模組

cd /server/tool/prometheus
git clone git://github.com/vozlt/nginx-module-vts.git

1.2 .編譯配置

在nginx編譯時新增vts模組

--add-module=/path/to/nginx-module-vts

檢視nginx編譯模組

加入需要安裝的模組,重新編譯,如這裡新增–add-module=/root/mapr/nginx-module-vts

./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/run/nginx/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/usr/local/nginx/client/ --http-proxy-temp-path=/usr/local/nginx/proxy/ --http-fastcgi-temp-path=/usr/local/nginx/fcgi/ --http-uwsgi-temp-path=/usr/local/nginx/uwsgi --http-scgi-temp-path=/usr/local/nginx/scgi --with-pcre --with-file-aio --with-http_image_filter_module --add-module=/server/tool/prometheus/nginx-module-vts

make編譯 不要make install, 不然會覆蓋

替換nginx二進位制檔案

cp ./objs/nginx /usr/local/nginx/sbin/

修改配置檔案

重新載入nginx配置

訪問http://IP/status出現數據頁面

 

2. 安裝nginx-vts-exporter

exporter會收集nginx效能指標的JSON格式資料,並彙總後暴露監控介面給Prometheus。

2.1 下載安裝

wget -c https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.9.1/nginx-vts-exporter-0.9.1.linux-amd64.tar.gz     
或
wget -O nginx-vts-exporter-0.5.zip https://github.com/hnlq715/nginx-vts-exporter/archive/v0.5.zip
安裝
tar xf nginx-vts-exporter-0.9.1.linux-amd64.tar.gz -C /server/prometheus/

2.2 後臺執行

/server/prometheus/nginx-vts-exporter-0.9.1.linux-amd64/nginx-vts-exporter -nginx.scrape_timeout 10 -nginx.scrape_uri https://IP/status/format/json

推薦exporter和nginx安裝在同一臺機器上,如果不在同一臺主機,把scrape_uri改為nginx主機的地址。nginx_vts_exporter的預設埠號:9913,對外暴露監控介面http://xxx:9913/metrics.

2.2.1 配置systemd服務

 vim /etc/systemd/system/nginx_vts_exporter.service

[Unit]
Description=nginx_exporter
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/server/prometheus/nginx-vts-exporter-0.9.1.linux-amd64/nginx-vts-exporter  -nginx.scrape_uri=https://IP/status/format/json
Restart=on-failure
[Install]
WantedBy=multi-user.target

2.2.2 啟動nginx-vts-expoerter

systemctl start nginx-vts-exporter.service
systemctl status nginx-vts-exporter.service

2.3 修改peometheus.yml, 加入下面的監控目標:

nginx-vts-exporter預設的抓取地址為http://IP:9913/metrics

$ vim  /server/prometheus/prometheus.yml
  - job_name: nginx
    static_configs:
      - targets: ['192.168.2.210:9913']
        labels:
          instance: card-web02

重啟prometheus

$ systemctl restart prometheus

3.匯入nginx stats 模板

由於是官方平臺提供的模板,直接在匯入頁面填入模板id即可匯入

  • 訪問Dashboards

在Dashboards上選Nginx Stats模板,就可以看到被監控Nginx伺服器的各項狀態。