一、概述
由於所有業務只有一個公網IP入口,無法統計到每個業務的流量帶寬,好在nginx上通過域名進行業務區分,可以藉助nginx-module-vts模塊來實現需求。
本文將主要用到以下幾個模塊和工具:
nginx-module-vts: Nginx virtual host traffic status module,nginx的監控模塊,能夠提供json、html、prometheus格式的數據產出。
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對時序數據進行查詢和聚合。
Grafana: 可視化監控數據展示工具
二、基於docker方式部署
由於yum安裝的nginx,默認是沒有nginx-module-vts模塊的。需要下載對應的nginx源碼,進行重新編譯才行。
爲了快速演示,dockerhub已經有鏡像了,包括nginx和nginx-module-vts模塊
https://hub.docker.com/r/gaciaga/nginx-vts
環境介紹
本文采用一臺服務器,來演示。
操作系統:centos 7.6
docker版本:19.03.8
ip地址:192.168.31.150
容器列表:prometheus,grafana,nginx-vts,nginx-vts-exporter
關於基於docker方式搭建prometheus+grafana,請參考鏈接:
https://www.cnblogs.com/xiao987334176/p/9930517.html
nginx-vts
nginx的監控模塊,能夠提供json、html、prometheus格式的數據產出。
下載鏡像
docker pull gaciaga/nginx-vts
運行鏡像
docker run -d -it -p 80:80 gaciaga/nginx-vts:latest
注意:此鏡像,默認已經開啓了status
訪問status頁面
http://192.168.31.150/status
效果如下:
nginx-vts-exporter
主要用於收集nginx的監控數據,並給Prometheus提供監控接口,默認端口號9913。
下載鏡像
docker pull sophos/nginx-vts-exporter
運行鏡像
docker run -d -it -e NGINX_STATUS="http://192.168.31.150/status/format/json" -p 9913:9913 sophos/nginx-vts-exporter
注意:請根據實際情況修改NGINX_STATUS變量,確保能正常訪問。
訪問metrics
http://192.168.31.150:9913/metrics
效果如下:
三、Prometheus配置
修改prometheus.yml,最後一行添加
- job_name: nginx-vts static_configs: - targets: ['192.168.31.150:9913'] labels: instance: localhost
重啓prometheus
docker restart prometheus
查看targets
http://192.168.31.150:9090/targets
效果如下:
確保狀態爲UP
四、Grafana配置
導入nginx vts模板
訪問地址
https://grafana.com/grafana/dashboards/2949/revisions
點擊Download,下載json文件
導入json文件
效果如下:
本文參考鏈接: