Tideways和xhgui打造PHP非侵入式監控平臺
當我們發現生產環境的某個介面執行時間特別長時應該怎麼做?是不是直接登入線上機器單步除錯?或者打大量的log然後分析? 一般我們可以把分析流程分為如下幾步操作:
雲棲社群的MarkDown渲染做的太差了,編號都錯位,大家還是到我的部落格看吧 Tideways和xhgui打造PHP非侵入式監控平臺
-
分析開發環境下執行是否會慢;
如果是程式碼問題,在開發環境下就能檢測出來;
-
分析預發環境執行是否會慢;
如果是資料庫或者第三方擴充套件問題,在預發環境就能檢查出來。
-
從生產環境摘一臺機器,分析程式碼執行慢的原因;
如果是機器的問題,在生產環境就能檢查出來。
1,2,3步驟都需要去分析程式碼,看哪部分執行時間長。如果人工一句一句程式碼去排查,很容易導致使用者流失。大多時候我們會使用第三方的分析工具tideways或者xhprof來快速發現問題。選擇哪一個工具比較好呢?xhprof雖然來自facebook但已經很久不更新,官方源已經顯示This package is abandoned and no longer maintained(此包已廢棄,不再維護)。tideways恰好相反,一直有商業公司在維護,並且積極的支援了PHP7。兩個擴充套件都是開源的,綜上所述我建議大家選擇tideways來分析程式碼。
tideways擴充套件能把每條請求生成詳細的執行日誌,我們通過對日誌做簡單的分析就能看到程式哪部分耗時最長,這裡可以使用xhprof的UI程式(xhprof生成的日誌和tideways生成的日誌格式通用),互動雖然不大友好但是夠用了。如果想有更好的視覺效果,建議下載xhgui,一款基於Bootstrap的xhprof UI程式。
在開始搭建PHP非侵入式監控平臺之前,我需要解釋幾個問題。
一. Tideways這家公司如何盈利?
Tideways這家公司與Sentry的營銷模式一樣,都是賣儲存服務+資料分析服務。
tideways.so擴充套件是開源的,可以免費使用。但是tideways.so擴充套件只能生成日誌檔案,我們獲得日誌檔案後還需要花很長時間去整理和分析。如果你購買了Tideways的服務,就能無縫的將日誌儲存到他們的伺服器,登入他們提供的後臺就能看到專案程式碼和伺服器的執行狀況。加上各種視覺化的圖表展示,體驗非常的好,有很多大公司願意付費。
二. 安裝擴充套件後程式碼改動會不會很大?
tideways.so擴充套件提供的監控方式是非侵入式的監控,不會對當前專案有任何的影響。我們只需要在Nginx配置檔案中加上一行配置即可:
fastcgi_param PHP_VALUE “auto_prepend_file=/home/admin/xhgui-branch/external/header.php”;
程式碼的含義:在執行主程式前都執行我們指定的PHP指令碼
具體如何安裝這個服務,我在文章的下半部分會詳細說明。現在我們需要知道『非侵入式的監控』就是不用改動一行專案程式碼。
三. 每個請求都生成日誌會不會影響服務本身?
使用者的每次請求都生成執行日誌對服務會有輕微的影響。雖然tideways.so擴充套件提供的監控方式是非侵入式的不會影響線上專案,但對CPU和記憶體的消耗是不可忽略的。為了減少對記憶體和CPU的消耗,我們可以控制生成日誌的頻率,還能編寫生成日誌的規則。預設頻率為1%(每100個請求生成1條日誌,這裡的概率非絕對)。
如果有多臺伺服器,只需要對一臺進行監控,機器比較多的話可以每個機房一臺。
搭建非侵入式監控環境
-
安裝PHP mongodb擴充套件;
>sudo pecl install mongodb
-
安裝PHP tideaways擴充套件;
tideaways的文件寫的非常詳細,[安裝tideaways擴充套件(官方文件)](https://tideways.io/profiler/docs/setup/installation) 這裡我用Centos舉例。 > 1. echo "[tideways]
- = Tideways
baseurl = https://s3-eu-west-1.amazonaws.com/qafoo-profiler/rpm” > /etc/yum.repos.d/tideways.repo
>
> 2. rpm --import https://s3-eu-west-1.amazonaws.com/qafoo-profiler/packages/EEB5E8F4.gpg
>
>3. yum makecache --disablerepo=* --enablerepo=tideways
>
>4. yum install tideways-php tideways-cli tideways-daemon
PS: MarkDown的語法轉換可能有部分問題,容易把中劃線轉沒了,這裡建議安裝時從官網COPY命令,[安裝tideaways擴充套件](https://tideways.io/profiler/docs/setup/installation#redhatfedoracentos)
-
修改php.ini檔案;
我們需要在php.ini檔案中引入擴充套件
[mongodb] extension=mongodb.so [tideways] extension=tideways.so ;不需要自動載入,在程式中控制就行 tideways.auto_prepend_library=0 ;頻率設定為100,在程式呼叫時能改 tideways.sample_rate=100
-
安裝mongodb-server(可選擇安裝mongodb客戶端);
我們需要在系統中安裝mongodb-server,用來儲存tideways擴充套件生成的日誌。多臺伺服器也只需要安裝一個mongodb-server,用來做日誌歸攏。如果有單獨的mongodb機器,可以跳過這一步。
Centos下安裝MongoDB服務:
sudo yum install mongodb-server
啟動服務:
sudo service mongod start
Centos下安裝MongoDB客戶端:
sudo yum install mongodb -
安裝xhgui;
git clone https://github.com/laynefyc/xhgui-branch.git cd xhgui php install.php
PS: xhgui官方版本已經很久不更新,很多符號和單位都不適合中國使用者。為了方便自己,我單獨維護了一個版本,不斷的在更新中。安裝這個版本,將有更好的體驗。需要安裝原版的請執行下面的命令
git clone https://github.com/perftools/xhgui cd xhgui php install.php
如果你的MongoDB安裝在當前機器,可以不用修改xhgui的配置檔案,如果不是你需要在配置檔案中修改MongoDB的連線ip和域名,xhgui/config/config.default.php。當然你也可以選擇直接存為檔案。
// Can be either mongodb or file. /* `save.handler` => `file`, `save.handler.filename` => dirname(__DIR__) . `/cache/` . `xhgui.data.` . microtime(true) . `_` . substr(md5($url), 0, 6), */ `save.handler` => `mongodb`, // Needed for file save handler. Beware of file locking. You can adujst this file path // to reduce locking problems (eg uniqid, time ...) //`save.handler.filename` => __DIR__.`/../data/xhgui_`.date(`Ymd`).`.dat`, `db.host` => `mongodb://127.0.0.1:27017`, `db.db` => `xhprof`,
-
測試MongoDB連線情況並優化索引;
你在當前機器安裝過mongo客戶端才能呼叫mongo命令。
$ mongo > use xhprof > db.results.ensureIndex( { `meta.SERVER.REQUEST_TIME` : -1 } ) > db.results.ensureIndex( { `profile.main().wt` : -1 } ) > db.results.ensureIndex( { `profile.main().mu` : -1 } ) > db.results.ensureIndex( { `profile.main().cpu` : -1 } ) > db.results.ensureIndex( { `meta.url` : 1 } )
-
配置Nginx;
Nginx需要加入兩處配置,一個是PHP_VALUE:
server { listen 80; server_name site.localhost; root /Users/markstory/Sites/awesome-thing/app/webroot/; fastcgi_param PHP_VALUE "auto_prepend_file=/Users/markstory/Sites/xhgui/external/header.php"; }
另一個是需要配置一個路徑指向5中安裝的xhgui的webroot目錄,如下配置為單獨申請了一個域名:
server { listen 80; server_name blog110.it2048.cn; root /home/admin/xhgui-branch/webroot; location / { index index.php; if (!-e $request_filename) { rewrite . /index.php last; } } location ~ .php$ { fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
如果安裝很順利,此時訪問 http://blog110.it2048.cn 能看到效果。詳細的效果圖可以看這裡 https://github.com/laynefyc/xhgui-branch
首頁截圖
瀑布圖
函式監控圖
最後我們來說說頻率如何配置,還是在xhgui的config/config.default.php檔案中
`profiler.enable` => function() {
// 如果域名為我們新建的域名則不捕獲
if($_SERVER[`SERVER_NAME`] == `blog110.it2048.cn`){
return False;
}else{
// 100%取樣,預設為1%
return True;//rand(1, 100) === 42;
}
}
資料儲存到MongoDB之後,UI如何展示需要我們自己探究。比如將英文換成中文,新增曲線圖和餅圖等等。至此已經能實時監控我們專案的CPU、記憶體的消耗情況。哪些介面執行慢也能一目瞭然。https://github.com/laynefyc/xhgui-branch 這是我維護的一個xhpui漢化版本,歡迎使用和 提建議
我的部落格地址:Tideways和xhgui打造PHP非侵入式監控平臺
相關文章
- Tideways、xhprof 和 xhgui 打造 PHP 非侵入式監控平臺IDEGUIPHP
- PHP 效能分析平臺搭建 (tideways + xhgui+ nginx + PHP7)PHPIDEGUINginx
- 使用 tideways_xhprof + xhgui 分析 PHP 執行情況IDEGUIPHP
- 使用phpAnalysis打造PHP應用非侵入式效能分析器PHP
- 智和網管平臺打造“海量接入 智慧監控”的統一運維監控中心運維
- RestCloud監控平臺,專為微服務API打造的實時監控中心RESTCloud微服務API
- zabbix監控平臺
- 使用Prometheus+Grafana快速打造高逼格監控平臺PrometheusGrafana
- 分散式監控平臺Centreon實踐真傳分散式
- 【一】從0開始,用flask+mongo打造分散式伺服器監控平臺FlaskGo分散式伺服器
- linux監控平臺搭建Linux
- Laradock 下使用 Tideways_xhprof+Xhgui 進行效能分析 —— 安裝篇IDEGUI
- Zabbix監控平臺的搭建
- Prometheus + Grafana 監控平臺搭建PrometheusGrafana
- 一個非侵入式跟蹤分析程式
- 輕量級非侵入式埋點方案
- 最佳實踐【二】從 0 開始,用 flask+mongodb 打造分散式伺服器監控平臺FlaskMongoDB分散式伺服器
- 360容器平臺監控實踐
- Debian9.3上安裝和配置Observium監控平臺
- 北京智和信通網路流量監控分析平臺
- php效能監控PHP
- DIY一個前端監控平臺(上)前端
- Prometheus 監控平臺元件深度講解Prometheus元件
- jmeter+influxdb+grafana監控平臺搭建JMeterUXGrafana
- Cacti+Nagios監控平臺完美整合iOS
- linux下cacti監控平臺的搭建Linux
- 多品牌攝像機影片平臺EasyCVR影片融合平臺+應急布控球:打造城市安全監控新體系VR
- 從Fresco原始碼中找到非侵入式的答案原始碼
- mockjs 實現前端非侵入式 mock 解決方案MockJS前端
- 打造前端監控系統前端
- Telegraf+Influxdb+Grafana構建監控平臺UXGrafana
- Samsara:車隊物流監控平臺簡介
- 得物App ANR監控平臺設計APP
- Jmeter監控平臺搭建:JMeter+InfluxDB+GrafanaJMeterUXGrafana
- Zabbix+Grafana從零設計自己的監控平臺-監控效果展示Grafana
- 基於Prometheus和Grafana打造業務監控看板PrometheusGrafana
- EHOME影片平臺EasyCVR影片分析裝置平臺電梯監控攝像機如何接入實現影片監控VR
- FastHook——巧妙利用動態代理實現非侵入式AOPASTHook
- 非侵入式入侵 —— Web快取汙染與請求走私Web快取