Swoole Tracker

Swoole Tracker是Swoole官方出品的一整套企业级PHP和Swoole分析调试工具,全面支持协程/非协程环境,数据实时可视化,并全面分析报告服务状况,快速发现及精准定位问题和性能瓶颈。 在安装好swoole_tracker扩展后,我们可以在EasySwoole中提供的各个事件当中埋点,进行应用监控。

安装swoole_tracker扩展的方法见安装文档 https://www.kancloud.cn/swoole-inc/ee-base-wiki/1214079#_24 ,并且可以在 https://www.swoole-cloud.com/ 得到支持,若需要进行定制化本地部署,请联系框架作者或者是Swoole官方客服。

效果图

应用监控

Swoole Tracker - 图1

调试器-进程列表

Swoole Tracker - 图2

以下为企业版中的调试工具链功能,通过PID远程开启调试,支持检测阻塞IO、内存泄漏和代码性能分析

调试器-阻塞检测

Swoole Tracker - 图3

调试器-内存泄漏检测

Swoole Tracker - 图4

调试器-性能分析

Swoole Tracker - 图5

接口监控

Swoole Tracker - 图6

启动

在安装好swoole_tracker扩展后,我们执行:

  1. /opt/swoole/script/php/swoole_php /opt/swoole/node-agent/src/node.php & php easyswoole start

即可对EasySwoole进行监控。

使用

无需修改代码

Swoole Tracker的v2.5.0版本支持自动生成应用名称并创建应用,无需修改任何代码,生成的应用名称格式为:

SwooleHttpServerip:prot

其他的Serverip(hostname):prot

修改代码

当你需要自定义应用名称时则需要修改代码:

Http服务监控

全局监控

EasySwooleEvent.php中,分别对onRequestafterResponse两个事件进行注册

  • onRequest事件
    1. public static function onRequest(Request $request, Response $response): bool
    2. {
    3. $tick = \SwooleTracker\Stats::beforeExecRpc($request->getUri()->getPath(), 'serviceName', "192.168.0.1");
    4. /*
    5. 把该次请求生成的tick托管给上下文管理器
    6. */
    7. ContextManager::getInstance()->set("SWOOLE_TRACKER_TICK",$tick);
    8. return true;
    9. }
  • afterRequest事件
    1. public static function afterRequest(Request $request, Response $response): void
    2. {
    3. $tick = ContextManager::getInstance()->get('SWOOLE_TRACKER_TICK');
    4. if($response->getStatusCode() != 200){
    5. $ret = false;
    6. }else{
    7. $ret = true;
    8. }
    9. \SwooleTracker\Stats::afterExecRpc($tick, $ret, $response->getStatusCode());
    10. }
    注册完以上事件后,即可自动的把Http服务的全部链路信息自动上报至Swoole Tracker服务端。

Http分组监控

若需要对Http服务做细化的分组监控,我们可以定义一个Base控制器。

  1. class Base extends Controller
  2. {
  3. public $tick;
  4. function onRequest(?string $action): ?bool
  5. {
  6. $this->tick = \SwooleTracker\Stats::beforeExecRpc($request->getUri()->getPath(), 'myGroupName', "192.168.0.1");
  7. return true;
  8. }
  9. function afterAction(?string $actionName): void
  10. {
  11. \SwooleTracker\Stats::afterExecRpc($tick, true, 200);
  12. $this->tick = null;
  13. }
  14. }

例如全部的Api控制器需要监控,那么对于的控制器继承对应的Base控制器即可。

Rpc、Tcp、WebSocket服务监控

Easyswoole的Rpc、Tcp、WebSocket服务也同理提供了onRequest,afterAction方法,对两个方法进行埋点,即可实现对应的监控。