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

栏目: PHP · 发布时间: 6年前

内容简介:Tideways和xhgui打造PHP非侵入式监控平台

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

分析开发环境下执行是否会慢;

如果是代码问题,在开发环境下就能检测出来;

分析预发环境执行是否会慢;

如果是数据库或者第三方扩展问题,在预发环境就能检查出来。

从生产环境摘一台机器,分析代码执行慢的原因;

如果是机器的问题,在生产环境就能检查出来。

1,2,3步骤都需要去分析代码,看哪部分执行时间长。如果人工一句一句代码去排查,不但要耗费大量时间还会导致用户流失。大多时候我们会使用第三方的分析工具tideways或者xhprof来快速发现问题。选择哪一个 工具 比较好呢?xhprof虽然来自facebook但已经很久不更新,官方源已经显示This package is abandoned and no longer maintained(此包已废弃,不再维护)。tideways恰好相反,一直有商业公司在维护,并且积极的支持了 PHP 7。两个扩展都是开源的,综上所述我建议大家选择tideways来分析代码。

tideways扩展能把每条请求生成详细的执行日志,通过对日志做简单的分析就能看到程序哪部分耗时最长,这里可以使用xhprof的UI程序(xhprof生成的日志和tideways生成的日志格式通用),交互虽然不大友好但是够用了。如果想有更好的视觉效果,建议下载xhgui,一款基于Bootstrap的xhprof UI程序。

在开始搭建PHP非侵入式监控平台之前,我需要解释几个问题。

一. Tideways这家公司如何盈利?

Tideways这家公司与Sentry的营销模式一样,都是卖存储服务和数据分析服务。

tideways.so扩展是开源的可以免费使用。但是tideways.so扩展只能生成日志文件,我们获得日志文件后还需要花很长时间去整理和分析。如果你购买了Tideways的服务,就能无缝的将日志存储到他们的服务器,登录他们提供的后台就能看到项目代码和服务器的运行状况。加上各种可视化的图表展示体验非常的好,有很多大公司愿意付费。

二. 安装扩展后代码改动会不会很大?

tideways.so扩展提供的监控方式是非侵入式的监控,不会对当前项目有任何的影响。我们只需要在Nginx配置文件中加上一行配置即可:

fastcgi_paramPHP_VALUE "auto_prepend_file=/home/admin/xhgui/external/header.PHP";

代码的含义:在执行主程序前都运行我们指定的PHP脚本

具体如何安装这个服务,我在文章的下半部分会详细说明。现在仅需要知道『非侵入式的监控』不用改动一行项目代码。

三. 每个请求都生成日志会不会影响服务性能?

用户的每次请求都生成执行日志对服务性能会有轻微的影响。虽然tideways.so扩展提供的监控方式是非侵入式的,但对CPU和内存的消耗是不可忽略的。为了减少对内存和CPU的消耗,我们可以控制生成日志的频率,还能编写生成日志的规则。默认频率为1%(每100个请求生成1条日志,这里的概率非绝对)。

如果有多台服务器,只需要对一台进行监控,机器比较多的话可以每个机房一台。

搭建非侵入式监控环境

安装PHP mongodb扩展;

sudo pecl install mongodb

pecl是PHP自带命令,全局如果找不到,请到PHP的安装目录bin下查看。

安装PHP tideaways扩展;

tideaways的文档写的非常详细,安装tideaways扩展(官方文档) 这里我用Centos举例。

PS: MarkDown的语法转换可能存在问题,容易把中划线转没了,建议安装时从官网COPY命令,安装tideaways扩展

  1. echo "[tideways]

    name = 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

  • 修改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-branch php install.php

    你也可以通过Composer去安装, composer require laynefyc/xhgui-chinese

    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客户端的安装方法第四步有详细说明。

    $ 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,告诉PHP程序在执行前要调用服务:

    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/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

    首页截图

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

    首页截图

    瀑布图

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

    瀑布图

    函数监控图

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

    函数监控图

    最后说说频率如何配置? 配置项在xhgui的config/config.default.PHP文件中,profiler.enable是个bool型变量,表示是否采样。

    '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和xhgui打造PHP非侵入式监控平台》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

    查看所有标签

    猜你喜欢:

    本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

    区块链核心算法解析

    区块链核心算法解析

    【瑞士】Roger Wattenhofer(罗格.瓦唐霍费尔) / 陈晋川、薛云志、林强、祝庆 / 电子工业出版社 / 2017-8 / 59.00

    《区块链核心算法解析》介绍了构建容错的分布式系统所需的基础技术,以及一系列允许容错的协议和算法,并且讨论一些实现了这些技术的实际系统。 《区块链核心算法解析》中的主要概念将独立成章。每一章都以一个小故事开始,从而引出该章节的内容。算法、协议和定义都将以形式化的方式描述,以便于读者理解如何实现。部分结论会在定理中予以证明,这样读者就可以明白为什么这些概念或算法是正确的,并且理解它们可以确保实现......一起来看看 《区块链核心算法解析》 这本书的介绍吧!

    JS 压缩/解压工具
    JS 压缩/解压工具

    在线压缩/解压 JS 代码

    XML、JSON 在线转换
    XML、JSON 在线转换

    在线XML、JSON转换工具

    Markdown 在线编辑器
    Markdown 在线编辑器

    Markdown 在线编辑器