05 . Prometheus監控Nginx

men發表於2020-06-21

List

  CentOS7.3
  prometheus-2.2.1.linux-amd64.tar.gz
  nginx-module-vts
節點名 IP 軟體版本 硬體 網路 說明
Prometheus 192.168.0.106 list 裡面都有 2C4G Nat,內網 測試環境
Nginx 192.168.0.107 list 裡面都有 2C4G Nat,內網 測試環境

部署Prometheus

部署Promehteus請看我前面寫的文章

https://www.cnblogs.com/you-men/p/12839535.html

部署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對時序資料進行查詢和聚合。
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)
部署nginx-module-vts
# 下載編譯模組
git clone git://github.com/vozlt/nginx-module-vts.git
  
# 編譯配置
--add-module=/path/to/nginx-module-vts
# 下載官方的軟體包並編譯進vts模組,例如:
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_sysguard_module  --add-module=nginx-module-vts

# 安裝Nginx
#!/usr/bin/env bash
version="nginx-1.14.2.tar.gz"
user="nginx"
nginx=${version%.tar*}
path=/usr/local/src/$nginx
echo $path
if ! ping -c2 www.baidu.com &>/dev/null
then
	echo "網路不通,無法安裝"
	exit
fi

yum install -y gcc gcc-c++ openssl-devel pcre-devel make zlib-devel wget psmisc
if [ ! -e $version ];then
	wget http://nginx.org/download/$version
fi
if ! id $user &>/dev/null
then
	useradd $user -M -s /sbin/nologin
fi

if [ ! -d /var/tmp/nginx ];then
	mkdir -p /var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
fi
tar xf $version -C /usr/local/src
cd $path
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx   --add-module=/usr/local/src/nginx-1.14.0/nginx-module-vts/ && make && make install
配置nginx.conf
http {
    	vhost_traffic_status_zone;
    	vhost_traffic_status_filter_by_host on;
 
server {
  		location /status {
        		vhost_traffic_status_display;
        		vhost_traffic_status_display_format html;
      }
   }
}
配置建議

1 . 開啟vhost過濾:
vhost_traffic_status_filter_by_host on;
開啟此功能,在Nginx配置有多個server_name的情況下,會根據不同的server_name進行流量的統計,否則預設會把流量全部計算到第一個server_name上

2 . 在不想統計流量的server區域禁用vhost_traffic_status,配置示例:

server {
...
vhost_traffic_status off;
...
}

假如nginx沒有規範配置server_name或者無需進行監控的server上,那麼建議在此vhost上禁用統計監控功能。否則會出現“127.0.0.1”,hostname等的域名監控資訊。

檢視監控資料

安裝完vts模組後,可以通過nginx status介面進行監控資料的檢視,比如:http://127.0.0.1/status:

配置Nginx-vts-exporter

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

它的安裝使用很簡單,開箱即用

下載軟體包
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 
nginx-vts-exporter-0.9.1.linux-amd64/nginx-vts-exporter -nginx.scrape_timeout 10 -nginx.scrape_uri http://127.0.0.1/status/format/json
  
# 推薦exporter和nginx安裝在同一臺機器上,如果不在同一臺主機,把scrape_uri改為nginx主機的地址。
# nginx_vts_exporter的預設埠號:9913,對外暴露監控介面http://xxx:9913/metrics.

# 我們可以訪問瀏覽器 IP:9913

將node exporter配置到prometheus裡
# 配置Prometheus,收集node exporter的資料
# 可以看到node exporter啟動後也就是暴露了9100埠,並沒有把資料傳到prometheus,
# 我們還需要在prometheus中配置,讓prometheus去pull這個介面的資料。
# 我們去監控主機編輯prometheus.yml檔案,修改最後幾行,然後重啟服務
vim /usr/local/prometheus/prometheus.yml
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'nginx'
    static_configs:
    - targets: ['192.168.0.107:9913']

# node節點的targets處的IP填寫你要監控的node的IP.        
systemctl restart prometheus
# 我們登入到Prometheus主機,看下這個節點是不是up狀態

Grafana安裝

此處我們拿prometheus做例子,雖然說prometheus能展示一些圖表,但對比Grafana,那只是過家家,接下來我們在同一個伺服器安裝Grafana服務,用來展示prometheus收集到的資料

下載並解壓安裝包
wget https://dl.grafana.com/oss/release/grafana-6.4.2.linux-amd64.tar.gz
tar xvf grafana-6.4.2.linux-amd64.tar.gz -C /usr/local/
ln -s /usr/local/grafana-6.4.2/ /usr/local/grafana
建立grafana使用者及資料存放目錄
useradd -s /sbin/nologin -M grafana
mkdir /data/grafana
mkdir /data/grafana/plugins
mkdir /data/grafana/provisioning
mkdir /data/grafana/data
mkdir /data/grafana/log
chown -R grafana:grafana /usr/local/grafana/  
chown -R grafana:grafana  /data/grafana/
修改配置檔案
vim /usr/local/grafana/conf/defaults.ini
data = /data/grafana/data
logs = /data/grafana/log
plugins = /data/grafana/plugins
provisioning = /data/grafana/conf/provisioning
把grafana-server新增到systemd中
vim /usr/lib/systemd/system/grafana-server.service
[Unit]
Description=Grafana
After=network.target
[Service]
User=grafana
Group=grafana
Type=notify
ExecStart=/usr/local/grafana/bin/grafana-server -homepath /usr/local/grafana
Restart=on-failure
[Install]
WantedBy=multi-user.target


systemctl start grafana-server && systemctl enable graana-server

啟動服務,並用web訪問http://IP:3000,預設3000埠,admin/admin

新增資料來源
# grafana雖然已經安裝好了,但是這個時候還沒有資料,沒辦法作圖。
# 下面我們把grafana和prometheus關聯起來,也就是在grafana中新增新增資料來源。
# 在配置頁面點選新增資料來源,然後選擇prometheus,輸入prometheus服務的引數即可。

新增nginx模板

相關文章