如何監控 Nginx?

jopen 8年前發布 | 15K 次閱讀 Nginx Web服務器

什么是 Nginx?

Nginx ("engine-x")是一個 HTTP 和反向代理服務器,同時也是一個郵件代理服務器和通用的 TCP 代理服務器。作為一個免費開源的服務器,Nginx 具有高性能、穩定和較低的資源占用的特點。它擁有豐富的特征集,同時配置也很簡單。

Nginx 是少數幾個可以解決 C10K 問題的服務器之一。不同于傳統服務器,它使用可擴展的時間驅動(異步)架構替代線程來處理請求。尤為重要的是,該架構占用負載下的內存小,且可預測。即便不需要同時處理數千的網絡請求,你仍然能從Nginx 的高性能和低內存占用中受益。從最小的VPS到大型集群服務器,Nginx 都能適用。

Nginx 還有一個商業版 Nginx Plus ,功能更加豐富。

監控 Nginx 的參數

Nginx 提供哪些監控參數

下表是 Nginx 提供的監控參數及其簡單釋義。

參數名稱 參數描述
Active connections 當前活躍的用戶連接(包含Waiting狀態)
accepts 接收到的用戶連接總數
handled Nginx處理的用戶連接總數
requests 用戶請求總數
Reading 當前連接中Nginx讀取請求首部的個數
Writing 當前連接中Nginx寫返回給用戶的個數
Waiting 當前沒有請求的活躍用戶連接數

通過下面的圖,可以清晰的看到參數的具體意義和作用。

當用戶請求連接Nginx服務器時,accepts計數器會加一。且當服務器處理該連接請求時,handled計數器同樣會加一。一般而言,兩者的值是相等的,除非達到了某些資源極限(如worker_connection的限制)。

用戶連接請求被處理,就會進入 active 狀態。如果該連接沒有其他 request,則進入 waiting 的子狀態;如果有 request,nginx 會讀取 request 的 header,計數器 request 加一,進入 reading 的子狀態。 reading 狀態持續時間非常短,header 被讀取后就會進入 writing 狀態。事實上,直到服務器將響應結果返回給用戶之前,該連接會一直保持 writing 狀態。所以說,writing 狀態一般會被長時間占用。

Nginx提供哪些監控參數

下表是Nginx Plus提供的主要監控參數、說明以及和Nginx的差異。

參數名稱 參數描述 與Nginx差異
Active 當前活躍的用戶連接(不包含 Idel 狀態) 等同 Active connections
Accepted 接收到的用戶連接總數 等同 accepts
Dropped Nginx 丟棄的用戶連接總數 accepts - handled
Idle 當前沒有請求的活躍用戶連接數 等同 Waiting
Total 用戶請求總數 等同 requests
Current(Requests) 當前有請求的活躍用戶連接數(等同 Active) Reading + Writing
Current(Connections) 當前在線用戶數(Active + Idle) Reading + Writing + Waiting

主要參數和開源的Nginx相比較,區別不大。主要就是換了名字,以及通過加減法的參數整合。同樣,通過下面的圖也能看清這些參數的作用。

具體運作和Nginx并無不同,故不贅述。當然,作為商業版,它提供的參數還有很多,可以在 這里 看。

怎么利用這些參數

開源的 Nginx 提供的原始參數中,實時性的會比較有用,如 Active connections、Reading、Writing 以及 Waiting。這些數據能夠反映當前 Nginx 的負載情況,方便在服務器出現問題時及時發現問題。而另一些數據由于不是狀態量,Nginx 無法計算當前的量值而改做其統計數,如 accepts、handled 和 requests。

對于維護網站人員,accepts、handled 和 requests 的統計值用處是不大的,值得參考的是短時間內這三者數值的增量。這個短時間可以是一秒,如 accepts per second、handled per second 和 requests per second。一個簡單的做法就是每秒都去讀取這些參數,返回一個和上一秒的差值就行。當然,handled per second 替換成 dropped per second=accepts per second-handled per second 就更完美了。

通過這七個參數,就可以從連接到請求全方位的監控起 Nginx 的運行狀態。為了方便檢測,對每次獲取的參數保留下來,然后按時間展現出來。下圖展示了 Nginx 在運行時的參考數據。

如何獲取Nginx 性能監控參數

開源的 Nginx 會提供一個子網頁顯示前文提到的監控參數。該網頁默認時不開啟的,需要開放 ngx http stub status module 來解鎖。默認該模塊是開放的,通過以下命令,可以快速確定該模塊是否已被開放。

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

如過返回 with-http stub status module ,則說明該模塊已被開放,而什么都不返回的話就是沒有被開放。需要通過原碼構建 Nginx 加上配置參數 --with-httpstub status module :

./configure \
… \
--with-http_stub_status_module
make  
sudo make install  

以上步驟搞定后,還有需要一個配置 URL 來開啟 Nginx 狀態頁。打開你的網站對應 Nginx 的配置文件,添加以下修改:

server{  
    listen your-website-port;
    location /basic_status {
        stub_status;
    }
}

如果 Nginx 版本低于1.7.5,則需要語法指令添加參數(任意參數):

server{  
    listen your-website-port;
    location /basic_status {
        stub_status on;
    }
}

修改完成后,需要重新載入 Nginx,鍵入命令 nginx -s reload ,然后就能在狀態頁(127.0.0.1:your-website-port/basic_status)看見你的監控參數了。大概是這個樣子:

Active connections: 1  
server accepts handled requests  
 38 38 38
Reading: 0 Writing: 1 Waiting: 0  

Nginx Plus 和 Nginx 在前面的設置差不多。配置狀態頁時,需要在配置文件中加上 server 模塊:

server {  
        listen your-website-port;

        location /status {
                status;
        }

        location = /status.html {
        }
}

重載一下Nginx,你會在狀態頁(127.0.0.1:your-website-port/status.html)看到大概這個樣子:

順便安利一下,裝一個Ci,就能看到前面關于 Nginx 基于時間的運行狀態的圖了。免費注冊免費使用,還能設置報警策略。具體,戳這里。

Cloud Insight 集監控、管理、計算、協作、可視化于一身,幫助所有 IT 公司,減少在系統監控上的人力和時間成本投入,讓運維工作更加高效、簡單。 本文系國內 ITOM 行業領軍企業OneAPM 工程師原創。想閱讀更多技術文章,請訪問OneAPM 官方技術博客 。

來自: http://news.oneapm.com/ci-nginx/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!