即時監控 Nginx 網頁伺服器狀態,啟用 stub_status 模組

這裡說明如何啟用 Nginx 內建的 stub_status 模組,在網頁上顯示伺服器即時的負載狀況,方便管理者即時監控。

Nginx 網頁伺服器本身就有內建一個簡單的即時狀態顯示模組,只要開啟 stub_status 這個模組,就可以看到基本的伺服器狀態統計,其提供的資訊包含了:目前連線數量統計、連線與請求數量統計,以及目前請求數量統計。


以下是啟用 stub_status 模組的步驟。
Step 1
雖然 stub_status 是 Nginx 內建的模組,但是 Nginx 在編譯時並不會自動把它納入,所以在使用前要先檢查自己的 Nginx 編譯版本是否有納入這個功能:

nginx -V 2>&1 | grep -o with-http_stub_status_module
with-http_stub_status_module

若輸出有看到 with-http_stub_status_module 就表示沒問題。若是沒有的話,您可能就要重新安裝有支援 stub_status 的版本,或是自己重新編譯,然後在編譯時加入 --with-http_stub_status_module 選項。

Step 2
在 Nginx 網站的設定檔中,加入一段 location 的設定:

server {

  # ...

  location /nginx_status {
    # 啟用 stub_status 模組
    stub_status on;

    # 關閉紀錄功能
    access_log off;

    # 限制可存取的 IP 位址
    allow 127.0.0.1;
    deny all;
  }
}

除了使用 IP 位址的方式來限制存取之外,也可以使用帳號與密碼的方式:

server {

  # ...

  location /nginx_status {
    # 啟用 stub_status 模組
    stub_status on;

    # 關閉紀錄功能
    access_log off;

    # 設定帳號與密碼
    auth_basic "closed site";
    auth_basic_user_file /path/to/htpasswd;
  }
}

關於 Nginx 帳號與密碼的設定方式,請參考 NGINX 設定密碼認證與限制可存取的 IP 位址

Step 3
設定好之後,檢查 Nginx 的設定檔是否正確:

service nginx configtest
 * Testing nginx configuration                                           [ OK ]

確認無誤後,重新載入新的 Nginx 設定:

service nginx reload

Step 4
打開剛剛設定的網址,就可以看到即時的 Nginx 伺服器狀態了。

nginx-enable-stub_status-module-to-collect-metrics-1

Nginx 伺服器狀態

Active connections: 72 
server accepts handled requests
 606761 606761 3034070 
Reading: 0 Writing: 2 Waiting: 69

以下是各個數值的含意:

  • Active connections:目前連線數,這個值包含 Waiting 的數量。
  • server accepts handled requests:第一個值是伺服器接受的連線數,第二個值是伺服器已經處理的連線數,第三個值則是伺服器已經處理的請求數。若將第三個數值除以第二個數值,就會得到平均每個連線的請求數(3034070 / 606761 = 5.0)。
  • Reading:目前正在讀取請求表頭的請求數。
  • Writing:目前正在讀取請求主體、處理與回應的請求數。
  • Waiting:keep-alive 的連線數,這個值會跟 keepalive_timeout 的設定值有關,這個數值通常不太會影響伺服器效能,可以不用太在意。

參考資料:DATADOGEasyEngine

Linux

1 Comment

  1. vincent

    您好!請問我照著您的步驟,為何會出現『找不到網頁』的錯誤訊息呢?

Leave a Reply