##Tideways+Xhgui搭建非侵入式php监控平台
###参考文档:
windows平台可以参考:
www.drupalonwindows.com/en/blog/pro…
###搭建流程:
####1. 安装mongodb,以及php-mongodb拓展
参考:www.haorooms.com/post/linux_…
mongodb版本需要为3.4,否则会有bug
#####安装mongodb
下载安装包:mongodb-linux-x86_64-rhel62-v3.4-latest.tgz
安装:
tar zxf mongodb-linux-x86_64-rhel62-v3.4-latest.tgz
mv mongodb-linux-x86_64-rhel62-3.4.14-17-ge7da78c3b6 /usr/local/mongodb
mkdir /usr/local/mongodb/data
mkdir /usr/local/mongodb/logs
复制代码
启动mongod:
cd /usr/local/mongodb/bin
./mongod --fork --dbpath=/usr/local/mongodb/data --logpa th=/usr/local/mongodb/logs/mongodb2.log --logappend
复制代码
#####安装mongodb的php拓展
参考:www.cnblogs.com/ghjbk/p/679…
下载源码包:mongodb-1.1.9.tgz
下载地址:pecl.php.net/get/mongodb…
下载页面:pecl.php.net/package/mon…
解压:
tar -zxf mongodb-1.1.9.tgz
复制代码
进入mongodb拓展目录,编译安装拓展
cd mongodb-1.1.9/
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
复制代码
修改php.ini文件
vi /usr/local/php/lib/php.ini
复制代码
添加mongodb.so扩展配置,保存退出
extension=mongodb.so
复制代码
####2. 安装tideways扩展
下载安装包:
wget -Otideways-php.tar.gz "https://s3-eu-west-1.amazonaws.com/tideways/extension/4.1.5/tideways-php-4.1.5-x86_64.tar.gz"
复制代码
安装扩展:
tar xzvf tideways-php.tar.gz
cd tideways-php
bash install.sh
复制代码
修改php.ini
vi /usr/local/php/lib/php.ini
复制代码
添加tideways扩展
extension=tideways.so
复制代码
####3. 安装tideways-daemon
下载安装包:
wget -Otideways-daemon.tar.gz "https://s3-eu-west-1.amazonaws.com/tideways/daemon/1.5.19/tideways-daemon_linux_amd64-1.5.19.tar.gz"
复制代码
安装:
tar xzvf tideways-daemon.tar.gz
cd tideways-daemon
bash install.sh
复制代码
####4. 安装xhgui
在有网络的情况下从git拉取xhgui源代码,并且进行安装
git clone https://github.com/laynefyc/xhgui-branch.git
cd xhgui-branch
php install.php
复制代码
安装会使用composer,如果没有网络的情况下,需要将带有vender文件夹的所有代码文件拷贝到对应的web目录。
有可能需要修改文件夹权限使其能够被访问
修改 $webroot/xhgui-branch/config/config.default.php 文件的配置
配置扩展类型修改为tideways
/*
* support extension: uprofiler, tideways_xhprof, tideways, xhprof
* default: xhprof
*/
'extension' => 'tideways',
复制代码
配置需要抓取的server,port等参数来过滤不同的站点
// Profile 1 in 100 requests.
// You can return true to profile every request.
'profiler.enable' => function() {
if($_SERVER['SERVER_NAME'] == 'localhost') {
return false;
}
return true;//rand(1, 100) === 42;
},
复制代码
上方代码中返回false表示不抓取信息,否则抓取请求信息
####5. 测试MongoDB连接情况并优化索引
进入mongodb命令环境:
cd /usr/local/mongodb/bin
./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 } )
复制代码
####6. 配置nginx
nginx配置主要是配置xhgui的虚拟服务器,配置可以参考:
server {
listen 9066;
server_name 192.168.202.106;
fastcgi_buffer_size 8k;
fastcgi_buffers 8 32k;
proxy_buffer_size 8k;
proxy_buffers 8 32k;
root /var/www/html/xhgui-branch/webroot;
location / {
index index.php;
if (!-e $request_filename) {
rewrite . /index.php last;
}
}
location ~ ^(.+\.php)(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
复制代码
端口,服务名,web路径等可以根据实际修改
####7. 配置tideways参数
可以通过两种方式配置tideways参数,这里采用配置php.ini文件的方式
打开php.ini文件
vi /usr/local/php/lib/php.ini
复制代码
在末尾添加
;不需要自动加载,在程序中控制就行
tideways.auto_prepend_library=0
;频率设置为100,在程序调用时能改
tideways.sample_rate=100
;设置调用时预加载的文件
auto_prepend_file="/var/www/html/xhgui-branch/external/header.php"
复制代码
上述设置预加载文件为全局设置,站点的过滤需要通过第4步中的配置文件来进行配置。如果需要针对站点进行设置,可以再nginx的配置文件中找到需要进行性能分析的站点,对配置进行如下修改:
server {
listen 80;
server_name site.xxx;
root /var/www/html/xxx;
#新增一条配置
fastcgi_param PHP_VALUE "/var/www/html/xhgui-branch/external/header.php";
...
...
...
}
复制代码
这个方法对共用同一个php-fpm时可能会产生问题,具体可以参考
segmentfault.com/a/119000001…以及github.com/laynefyc/xh…
####8. 重启php-fpm和nginx
service php-fpm reload
/usr/bin/nginx -s reload
复制代码