Tideways和xhgui打造PHP非侵入式监控平台

1.简介

当我们发现生产环境的某个接口执行时间特别长时应该怎么做?直接登录线上机器单步调试?打大量的log然后分析? 一般我们可以把分析流程拆分为如下几步操作:

1.分析开发环境下执行是否会慢;如果是代码问题,在开发环境下就能检测出来;
2.分析预发环境执行是否会慢;如果是数据库或者第三方扩展问题,在预发环境就能检查出来。
3.从生产环境摘一台机器,分析代码执行慢的原因;如果是机器的问题,在生产环境就能检查出来。

如果按照以上步骤排查问题、耗时、耗体、耗心情。

2.环境搭建

1.docker+mongodb:用来存储产生的分析数据
2.tideways扩展
3.安装xhgui:用来展示相应数据
4.利用PHP内部服务器测试
5.配置nginx
6.插入到php文件中

1.docker+mongodb

docker环境的搭建自行百度。

下载镜像

docker pull registry.docker-cn.com/library/mongo

执行sudo docker images 显示,说明镜像已经安装成功

registry.docker-cn.com/library/mongo                           latest              eeeeee        3 weeks ago         393.3 MB

创建本地数据文件夹

/data1/mongodb

创建并启动mongodb容器

docker run --name mymongodb =v /data1/mongodb:/data1/mongodb --net=host -d 镜像id --auth(如果加了--auth 则连接mongo的时候需要账号密码建议不加)

执行命令 sudo docker ps

ddsdfdsfsd        e21e0711c3d2:latest                                                  "docker-entrypoint.s   2 days ago          Up 2 days                               mymongodb

测试一下

sudo docker exec -it mymongodb bash
mongo

MongoDB shell version v4.0.5
connecting to: mongodb:
Implicit session: session { ) }
MongoDB server version: 4.0.5
>

将mongodb加入php.ini

到这里说明mongodb已经安装成功,端口默认为27017

1.安装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

将tideways扩展 加入php.ini

2.xhgui

安装过程

git clone https://github.com/laynefyc/xhgui-branch.git
cd xhgui-branch
composer update
composer install

修改MongoDB的连接ip和域名,路径如下:xhgui-branch/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
> 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 } )
3. 利用PHP内置服务器测试

移动到xhgui-branch目录下的webroot目录

php -S 0.0.0.0:8888
image.png

说明执行成功

4. 配置nginx
server {
    listen       80 ;
    root /xhgui-branch/webroot;
    server_name  www.tuzisir.com;
    fastcgi_param PHP_VALUE auto_prepend_file= /xhgui-branch/external/header.php; # 所有执行此域名都会被收集
     location / {
        index  index.php;
        if (!-e $request_filename) {
            rewrite . /index.php last;
        }
    }
    location   ~ \.php$  {
        set $script_uri "";
        if ( $request_uri ~* "([^?]*)?" ) {
            set $script_uri $1;
        }
        fastcgi_pass 127.0.0.1:9768; # 配置php-fpm
        fastcgi_param  SCRIPT_URL         $script_uri;
        include fastcgi/comm_fastcgi_params;
    }
}

配置php-fpm,主要参数

[www.tuzisir.com]
user = www
group = www
listen = 127.0.0.1:9768

测试

输入域名

4. 单独php使用

<?php
include_once "/xhgui-branch/external/header.php";

3.其它问题

1.如何不收集某域名下的执行数据

修改xhgui-branch/config/config.default.php


'profiler.enable' => function() {
    if($_SERVER['SERVER_NAME'] == 'www.tuzisir.com'){
        return false;
    }else{
        // 100%采样,默认为1%
        return true;//rand(1, 100) === 42;
    }
},

2.默认情况下,MongoDB 运行在一个信任的环境里(是不需要用户名和密码认证的)加 --auth 则需要用户名密码

4.学习地址

http://blog.it2048.cn/article-tideways-xhgui/
https://www.jianshu.com/p/3a8c1904e807
https://www.jianshu.com/p/e1eab7d15b17

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355