如何監(jiān)控 Nginx?

什么是 Nginx?

Nginx("engine-x")是一個 HTTP 和反向代理服務(wù)器绣檬,同時也是一個郵件代理服務(wù)器和通用的 TCP 代理服務(wù)器足陨。作為一個免費(fèi)開源的服務(wù)器,Nginx 具有高性能、穩(wěn)定和較低的資源占用的特點(diǎn)全景。它擁有豐富的特征集综芥,同時配置也很簡單。

Nginx 是少數(shù)幾個可以解決 C10K 問題的服務(wù)器之一飒房。不同于傳統(tǒng)服務(wù)器,它使用可擴(kuò)展的時間驅(qū)動(異步)架構(gòu)替代線程來處理請求媚值。尤為重要的是狠毯,該架構(gòu)占用負(fù)載下的內(nèi)存小,且可預(yù)測褥芒。即便不需要同時處理數(shù)千的網(wǎng)絡(luò)請求嚼松,你仍然能從Nginx 的高性能和低內(nèi)存占用中受益。從最小的VPS到大型集群服務(wù)器锰扶,Nginx 都能適用献酗。

Nginx 還有一個商業(yè)版 Nginx Plus,功能更加豐富坷牛。

監(jiān)控 Nginx 的參數(shù)

Nginx 提供哪些監(jiān)控參數(shù)

下表是 Nginx 提供的監(jiān)控參數(shù)及其簡單釋義罕偎。
<table>

<thead>
<tr>
<th>參數(shù)名稱</th>
<th>參數(shù)描述</th>
</tr>
</thead>

<tbody>
<tr>
<td>Active connections </td>
<td>當(dāng)前活躍的用戶連接(包含Waiting狀態(tài)) </td>
</tr>
<tr>
<td>accepts </td>
<td>接收到的用戶連接總數(shù) </td>
</tr>
<tr>
<td>handled </td>
<td>Nginx處理的用戶連接總數(shù) </td>
</tr>
<tr>
<td>requests </td>
<td>用戶請求總數(shù) </td>
</tr>
<tr>
<td>Reading </td>
<td>當(dāng)前連接中Nginx讀取請求首部的個數(shù) </td>
</tr>
<tr>
<td>Writing </td>
<td>當(dāng)前連接中Nginx寫返回給用戶的個數(shù) </td>
</tr>
<tr>
<td>Waiting </td>
<td>當(dāng)前沒有請求的活躍用戶連接數(shù) </td>
</tr>

</tbody>
</table>

通過下面的圖,可以清晰的看到參數(shù)的具體意義和作用京闰。

nginx數(shù)據(jù)流

當(dāng)用戶請求連接Nginx服務(wù)器時颜及,accepts計數(shù)器會加一。且當(dāng)服務(wù)器處理該連接請求時蹂楣,handled計數(shù)器同樣會加一俏站。一般而言,兩者的值是相等的痊土,除非達(dá)到了某些資源極限(如worker_connection的限制)肄扎。

用戶連接請求被處理,就會進(jìn)入 active 狀態(tài)施戴。如果該連接沒有其他 request反浓,則進(jìn)入 waiting 的子狀態(tài);如果有 request赞哗,nginx 會讀取 request 的 header雷则,計數(shù)器 request 加一,進(jìn)入 reading 的子狀態(tài)肪笋。 reading 狀態(tài)持續(xù)時間非常短月劈,header 被讀取后就會進(jìn)入 writing 狀態(tài)度迂。事實(shí)上,直到服務(wù)器將響應(yīng)結(jié)果返回給用戶之前猜揪,該連接會一直保持 writing 狀態(tài)惭墓。所以說,writing 狀態(tài)一般會被長時間占用而姐。

Nginx提供哪些監(jiān)控參數(shù)

下表是Nginx Plus提供的主要監(jiān)控參數(shù)腊凶、說明以及和Nginx的差異。

<table>

<thead>
<tr>
<th>參數(shù)名稱</th>
<th>參數(shù)描述</th>
<th>與Nginx差異</th>
</tr>
</thead>

<tbody>
<tr>
<td>Active </td>
<td>當(dāng)前活躍的用戶連接(不包含 Idel 狀態(tài)) </td>
<td>等同 Active connections </td>
</tr>
<tr>
<td>Accepted </td>
<td>接收到的用戶連接總數(shù) </td>
<td>等同 accepts </td>
</tr>
<tr>
<td>Dropped </td>
<td>Nginx 丟棄的用戶連接總數(shù) </td>
<td>accepts - handled </td>
</tr>
<tr>
<td>Idle </td>
<td>當(dāng)前沒有請求的活躍用戶連接數(shù) </td>
<td>等同 Waiting </td>
</tr>
<tr>
<td>Total </td>
<td>用戶請求總數(shù) </td>
<td>等同 requests </td>
</tr>
<tr>
<td>Current(Requests) </td>
<td>當(dāng)前有請求的活躍用戶連接數(shù)(等同 Active)</td>
<td>Reading + Writing </td>
</tr>
<tr>
<td>Current(Connections) </td>
<td>當(dāng)前在線用戶數(shù)(Active + Idle) </td>
<td>Reading + Writing + Waiting </td>
</tr>

</tbody>
</table>

主要參數(shù)和開源的Nginx相比較拴念,區(qū)別不大钧萍。主要就是換了名字,以及通過加減法的參數(shù)整合政鼠。同樣风瘦,通過下面的圖也能看清這些參數(shù)的作用。

nginx-plus數(shù)據(jù)流

具體運(yùn)作和Nginx并無不同公般,故不贅述万搔。當(dāng)然,作為商業(yè)版官帘,它提供的參數(shù)還有很多瞬雹,可以在這里看。

怎么利用這些參數(shù)

開源的 Nginx 提供的原始參數(shù)中刽虹,實(shí)時性的會比較有用挖炬,如 Active connections、Reading状婶、Writing 以及 Waiting。這些數(shù)據(jù)能夠反映當(dāng)前 Nginx 的負(fù)載情況馅巷,方便在服務(wù)器出現(xiàn)問題時及時發(fā)現(xiàn)問題膛虫。而另一些數(shù)據(jù)由于不是狀態(tài)量,Nginx 無法計算當(dāng)前的量值而改做其統(tǒng)計數(shù)钓猬,如 accepts稍刀、handled 和 requests。

對于維護(hù)網(wǎng)站人員敞曹,accepts账月、handled 和 requests 的統(tǒng)計值用處是不大的,值得參考的是短時間內(nèi)這三者數(shù)值的增量澳迫。這個短時間可以是一秒局齿,如 accepts_per_second、handled_per_second 和 requests_per_second橄登。一個簡單的做法就是每秒都去讀取這些參數(shù)抓歼,返回一個和上一秒的差值就行讥此。當(dāng)然,handled_per_second 替換成 dropped_per_second=accepts_per_second-handled_per_second 就更完美了谣妻。

通過這七個參數(shù)萄喳,就可以從連接到請求全方位的監(jiān)控起 Nginx 的運(yùn)行狀態(tài)。為了方便檢測蹋半,對每次獲取的參數(shù)保留下來他巨,然后按時間展現(xiàn)出來。下圖展示了 Nginx 在運(yùn)行時的參考數(shù)據(jù)减江。


nginx折線圖

如何獲取 Nginx 性能監(jiān)控參數(shù)

開源的 Nginx 會提供一個子網(wǎng)頁顯示前文提到的監(jiān)控參數(shù)染突。該網(wǎng)頁默認(rèn)時不開啟的,需要開放 ngx_http_stub_status_module 來解鎖您市。默認(rèn)該模塊是開放的觉痛,通過以下命令,可以快速確定該模塊是否已被開放茵休。

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

如過返回 with-http_stub_status_module薪棒,則說明該模塊已被開放,而什么都不返回的話就是沒有被開放榕莺。需要通過原碼構(gòu)建 Nginx 加上配置參數(shù) --with-http_stub_status_module:

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

以上步驟搞定后俐芯,還有需要一個配置 URL 來開啟 Nginx 狀態(tài)頁。打開你的網(wǎng)站對應(yīng) Nginx 的配置文件钉鸯,添加以下修改:

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

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

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

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

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

Nginx Plus 和 Nginx 在前面的設(shè)置差不多岩睁。配置狀態(tài)頁時钞脂,需要在配置文件中加上 server 模塊:

server {
        listen your-website-port;

        location /status {
                status;
        }

        location = /status.html {
        }
}

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

Nginx-plus-example

順便安利一下捕儒,裝一個 Ci冰啃,就能看到前面關(guān)于 Nginx 基于時間的運(yùn)行狀態(tài)的圖了。免費(fèi)注冊免費(fèi)使用刘莹,還能設(shè)置報警策略阎毅。具體,戳這里点弯。

Cloud Insight 集監(jiān)控扇调、管理、計算抢肛、協(xié)作肃拜、可視化于一身痴腌,幫助所有 IT 公司,減少在系統(tǒng)監(jiān)控上的人力和時間成本投入燃领,讓運(yùn)維工作更加高效士聪、簡單。
本文系國內(nèi) ITOM 行業(yè)領(lǐng)軍企業(yè) OneAPM 工程師原創(chuàng)猛蔽。想閱讀更多技術(shù)文章剥悟,請訪問 OneAPM 官方技術(shù)博客
本文轉(zhuǎn)自 OneAPM 官方博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末曼库,一起剝皮案震驚了整個濱河市区岗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毁枯,老刑警劉巖慈缔,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異种玛,居然都是意外死亡藐鹤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門赂韵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娱节,“玉大人,你說我怎么就攤上這事祭示∫蘼” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵质涛,是天一觀的道長稠歉。 經(jīng)常有香客問我,道長汇陆,這世上最難降的妖魔是什么轧抗? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮瞬测,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纠炮。我一直安慰自己月趟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布恢口。 她就那樣靜靜地躺著孝宗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耕肩。 梳的紋絲不亂的頭發(fā)上因妇,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天问潭,我揣著相機(jī)與錄音,去河邊找鬼婚被。 笑死狡忙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的址芯。 我是一名探鬼主播灾茁,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谷炸!你這毒婦竟也來了北专?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旬陡,失蹤者是張志新(化名)和其女友劉穎拓颓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體描孟,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驶睦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了画拾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啥繁。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖青抛,靈堂內(nèi)的尸體忽然破棺而出旗闽,到底是詐尸還是另有隱情,我是刑警寧澤蜜另,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布适室,位于F島的核電站,受9級特大地震影響举瑰,放射性物質(zhì)發(fā)生泄漏捣辆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一此迅、第九天 我趴在偏房一處隱蔽的房頂上張望汽畴。 院中可真熱鬧,春花似錦耸序、人聲如沸忍些。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罢坝。三九已至,卻和暖如春搅窿,著一層夾襖步出監(jiān)牢的瞬間嘁酿,已是汗流浹背隙券。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闹司,地道東北人娱仔。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像开仰,于是被迫代替她去往敵國和親拟枚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx众弓?那么一定聽過它的“同行”Apache吧恩溅!Ngi...
    JokerW閱讀 32,703評論 24 1,002
  • Nginx簡介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,007評論 0 9
  • I/O模型Nginx介紹Nginx的安裝和目錄結(jié)構(gòu)Nginx的配置Nginx的編譯安裝 一、I/O模型 (一)I/...
    哈嘍別樣閱讀 897評論 0 4
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成谓娃,其中脚乡,內(nèi)核的設(shè)計非常微小和簡潔,完成的工作也非常簡單...
    rosekissyou閱讀 10,222評論 5 124
  • 1.簡介: ? Nginx:engine X 滨达,2002年奶稠,開源,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 1,871評論 0 3