用cacti監(jiān)控php-fpm的工作狀態(tài) |
發(fā)布時(shí)間: 2012/9/10 17:26:51 |
cacti搞運(yùn)維的人不會(huì)陌生,可能是現(xiàn)在使用最多的監(jiān)控工具了。跟互聯(lián)網(wǎng)相關(guān)的公司可能多少都會(huì)用到cacti來(lái)監(jiān)控服務(wù)器運(yùn)行狀態(tài)和一些軟件的負(fù)載情況。 現(xiàn)在網(wǎng)站用的最多的后端技術(shù)可能就是php了,無(wú)論nginx還是lighttpd,如今的負(fù)載能力都非常強(qiáng),在很多牛人的努力下,負(fù)載幾萬(wàn)到十萬(wàn)并發(fā)的都屢見(jiàn)不鮮。但是,這是在完全靜態(tài)的情況下,加上php就會(huì)效率大減。所以其實(shí)一個(gè)動(dòng)態(tài)網(wǎng)站的負(fù)載能力的瓶頸往往都在php上面。 網(wǎng)上很多文章介紹cacti是如何監(jiān)控nginx并發(fā)數(shù)的,不過(guò)目前還沒(méi)有介紹如何監(jiān)控php的工作狀態(tài)的文章,我在谷歌百度搜了一圈,也沒(méi)找到一個(gè)中文的監(jiān)控php的介紹文章,所以不才閑著沒(méi)事,簡(jiǎn)單改造了一個(gè)模板,用來(lái)監(jiān)控php-fpm的工作情況。我相信國(guó)內(nèi)很多人可能早就用上了,只是沒(méi)工夫說(shuō)而已。 所謂改造,即不是我原創(chuàng)的。原作者地址在 http://forums.cacti.net/viewtopic.php?f=12&t=41580 我將這個(gè)模板下載下來(lái)后嘗試了一下,發(fā)現(xiàn)不是那么簡(jiǎn)單易用,需要perl中的FCGI::Client和LWP::UserAgent等模塊的支持,這對(duì)于不熟悉perl和cpan的人來(lái)說(shuō),會(huì)很頭疼。perl語(yǔ)言的這個(gè)腳本同時(shí)具有安全隱患,因?yàn)樗褂肍CGI::Client.pm模塊來(lái)直接訪問(wèn)php-fpm的9000端口,這就需要你的php-fpm監(jiān)聽(tīng)在一個(gè)除127.0.0.1的其他IP上,這樣,如果你需要跨機(jī)房監(jiān)控,就勢(shì)必要把php-fpm監(jiān)聽(tīng)在一個(gè)外網(wǎng)IP上,除非你指定php-fpm的訪問(wèn)IP或者做VPN.不過(guò)我想大多數(shù)公司一來(lái)不具備這個(gè)技術(shù)實(shí)力,二來(lái)如果跨機(jī)房多了,改造配置也是個(gè)極麻煩的事情,改錯(cuò)了就會(huì)給人家留一個(gè)9000端口的漏洞出來(lái),人家直接架一個(gè)nginx指向php過(guò)來(lái)就可以干壞事了。 所以花了5分鐘將模板稍作修改,并用shell重寫(xiě)了獲取腳本。將php-fpm的狀態(tài)監(jiān)控跳轉(zhuǎn)到nginx上,從網(wǎng)頁(yè)獲取,既支持跨機(jī)房訪問(wèn),無(wú)需暴露9000端口在任何IP地址上,對(duì)php-fpm.conf文件的改動(dòng)最小,唯一一個(gè)是需要改造一下nginx,加一個(gè)類似于監(jiān)控nginx的配置項(xiàng)。并需要cacti服務(wù)器上有curl支持,不過(guò)用yum或者apt-get安裝curl似乎比用cpan安裝模塊要簡(jiǎn)單多了。原理和用cacti監(jiān)控nginx是一樣的。所以,如果你做過(guò)nginx的監(jiān)控,用這個(gè)模板就非常簡(jiǎn)單了。 不過(guò)這個(gè)腳本也存在一個(gè)問(wèn)題,就是如果你用一臺(tái)nginx用upstream后端掛多個(gè)php-fpm負(fù)載均衡,可能會(huì)產(chǎn)生數(shù)據(jù)不準(zhǔn)確問(wèn)題。這樣的話,你可以訪問(wèn)上面的連接,采用原版直接訪問(wèn)9000端口的方式。 講一下使用這個(gè)腳本需要操作的幾個(gè)步驟: 1. 你需要改變php-fpm.conf文件中的一行 找到pm.status_path = /status,將前面的注釋分號(hào)去掉。保存退出 2. 打開(kāi)nginx.conf文件 在server{}段中加入下面這段話,注意不要和你的nginx狀態(tài)監(jiān)控的重定向路徑?jīng)_突,如果沖突,請(qǐng)同時(shí)修改php-fpm中的設(shè)置和nginx中的設(shè)置 include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; } 保存退出 3. 重啟php-fpm,重啟nginx 嘗試訪問(wèn)http://yourserver/status看是否能獲取到php-fpm信息,正常的話,應(yīng)該顯示如下 pool: www process manager: dynamic start time: 16/Jun/2012:01:28:33 +0800 start since: 67269 accepted conn: 4526202 listen queue: 0 max listen queue: 0 listen queue len: 0 idle processes: 174 active processes: 1 total processes: 175 max active processes: 23 max children reached: 0 4. 將附件中解壓縮出來(lái)的的shell腳本上傳至cacti服務(wù)器的cacti/scripts文件夾下。并賦予可執(zhí)行權(quán)限。執(zhí)行測(cè)試一下看是否能獲取到php-fpm的狀態(tài)。 ./cacti_check_php-fpm.sh 114.xxx.xxx.xxx 80 /status 5. 將附件中的xml模板導(dǎo)入到cacti中,然后在設(shè)備那里創(chuàng)建新圖的時(shí)候,你會(huì)看到一個(gè)php-fpm fastcgi status的模板,使用它創(chuàng)建,并填上服務(wù)器IP端口和路徑就可以了,參照測(cè)試命令行寫(xiě)就可以。 在實(shí)際測(cè)試中,支持php 5.3.8及以上版本,5.3.8之前的php版本未測(cè)試,如有問(wèn)題可修改腳本中的grep部分,一共不超過(guò)15行的腳本,簡(jiǎn)單的很,一看就明白。 本文出自:億恩科技【www.allwellnessguide.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |