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