用cacti監控php-fpm的工作狀態

來源:互聯網
上載者:User

cacti搞營運的人不會陌生,可能是現在使用最多的監控工具了。跟互連網相關的公司可能多少都會用到cacti來監控伺服器運行狀態和一些軟體的負載情況。

現在網站用的最多的後端技術可能就是php了,無論nginx還是lighttpd,如今的負載能力都非常強,在很多牛人的努力下,負載幾萬到十萬並發的都屢見不鮮。但是,這是在完全靜態情況下,加上php就會效率大減。所以其實一個動態網站的負載能力的瓶頸往往都在php上面。

網上很多文章介紹cacti是如何監控nginx並發數的,不過目前還沒有介紹如何監控php的工作狀態的文章,我在Google百度搜了一圈,也沒找到一個中文的監控php的介紹文章,所以不才閑著沒事,簡單改造了一個模板,用來監控php-fpm的工作情況。我相信國內很多人可能早就用上了,只是沒工夫說而已。

所謂改造,即不是我原創的。原作者地址在
http://forums.cacti.net/viewtopic.php?f=12&t=41580
我將這個模板下載下來後嘗試了一下,發現不是那麼簡單易用,需要perl中的FCGI::Client和LWP::UserAgent等模組的支援,這對於不熟悉perl和cpan的人來說,會很頭疼。perl語言的這個指令碼同時具有安全隱患,因為他使用FCGI::Client.pm模組來直接存取php-fpm的9000連接埠,這就需要你的php-fpm監聽在一個除127.0.0.1的其他IP上,這樣,如果你需要跨機房監控,就勢必要把php-fpm監聽在一個外網IP上,除非你指定php-fpm的訪問IP或者做VPN。不過我想大多數公司一來不具備這個技術實力,二來如果跨機房多了,改造配置也是個極麻煩的事情,改錯了就會給人家留一個9000連接埠的漏洞出來,人家直接架一個nginx指向php過來就可以幹壞事了。

所以花了5分鐘將模板稍作修改,並用shell重寫了擷取指令碼。將php-fpm的狀態監控跳轉到nginx上,從網頁擷取,既支援跨機房訪問,無需暴露9000連接埠在任何IP地址上,對php-fpm.conf檔案的改動最小,唯一一個是需要改造一下nginx,加一個類似於監控nginx的配置項。並需要cacti伺服器上有curl支援,不過用yum或者apt-get安裝curl似乎比用cpan安裝模組要簡單多了。原理和用cacti監控nginx是一樣的。所以,如果你做過nginx的監控,用這個模板就非常簡單了。

不過這個指令碼也存在一個問題,就是如果你用一台nginx用upstream後端掛多個php-fpm負載平衡,可能會產生資料不準確問題。這樣的話,你可以訪問上面的串連,採用原版直接存取9000連接埠的方式。

講一下使用這個指令碼需要操作的幾個步驟:

1. 你需要改變php-fpm.conf檔案中的一行
找到pm.status_path = /status,將前面的注釋分號去掉。儲存退出

2. 開啟nginx.conf檔案
在server{}段中加入下面這段話,注意不要和你的nginx狀態監控的重新導向路徑衝突,如果衝突,請同時修改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檔案夾下。並賦予可執行許可權。執行測試一下看是否能擷取到php-fpm的狀態。
./cacti_check_php-fpm.sh 114.xxx.xxx.xxx 80 /status

5. 將附件中的xml模板匯入到cacti中,然後在裝置那裡建立新圖的時候,你會看到一個php-fpm fastcgi status的模板,使用它建立,並填上伺服器IP連接埠和路徑就可以了,參照測試命令列寫就可以。

在實際測試中,支援php 5.3.8及以上版本,5.3.8之前的php版本未測試,如有問題可修改指令碼中的grep部分,一共不超過15行的指令碼,簡單的很,一看就明白。

監控效果。

  
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.