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