Skip to content
在 imi 框架中接入 Swoole Tracker 监控
PHP Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
res
src
.gitattributes
.gitignore
LICENSE
README.md
composer.json

README.md

imi-swoole-tracker

Latest Version Php Version Swoole Version IMI License

介绍

在 imi 框架中接入 Swoole Tracker 监控

Swoole Tracker: https://www.swoole-cloud.com/tracker.html

  • 企业版集成了Facebook的Xhprof工具,可以生成调用堆栈图和火焰图,亦可生成分层分析表格,方便找到程序瓶颈点进行优化。

  • 为解决PHP常驻进程的内存泄漏问题,企业版专门针对PHP的内存泄漏检测工具,方便快速的解决和定位内存持续增长问题。

  • Swoole异步/协程模式以及ReactPHP等众多框架最致命的就是阻塞调用,会让并发大大降低,为此我们开发了毫秒级阻塞检测工具,迅速定位导致阻塞的代码。

  • 自动抓取FPM、CLI进程数量,统计CPU、内存使用情况。

  • 所有工具零部署成本,后台一键开启关闭各种检测,完美支持PHP7。

Swoole Tracker

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

SwooleHttpServerip:prot

其他的Serverip(hostname):prot

即安装好swoole_tracker扩展之后就可以正常使用Swoole Tracker的功能

组件基本使用

  1. 在你的 composer.json 中加入下面的内容:
{
    "require": {
        "imiphp/imi-swoole-tracker": "~1.0"
    }
}
  1. 执行 composer update 安装。

  2. 在项目 config/config.php 中配置:

[
    'components'    =>  [
        // 引入本组件
        'SwooleTracker'       =>  'Imi\SwooleTracker',
    ],
]

Http 服务

在服务器的 config/config.php 中配置:

[
    'beans'    =>    [
        'HttpDispatcher'    =>    [
            'middlewares'    =>    [
                …… // 你的其他中间件
                \Imi\Server\Http\Middleware\RouteMiddleware::class,
                "SwooleTrackerHttpMiddleware", // 放在 RouteMiddlware 后
            ],
        ],
        'SwooleTrackerHttpMiddleware'   =>  [
            'serviceName'   => 'imi-http-example', // 服务名
            // 'serverIp'      => null, // 服务器 IP,默认获取当前网卡 IP
            // 'interface'     => null, // 网卡 interface 名,自动获取当前网卡IP时有效
            // 'successStatusCode' => 200, // 成功的 Http 状态码
        ],
    ],
];

WebSocket 服务

在服务器的 config/config.php 中配置:

[
    'beans'    =>    [
        'WebSocketDispatcher'    =>    [
            'middlewares'    =>    [
                …… // 你的其他中间件
                \Imi\Server\WebSocket\Middleware\RouteMiddleware::class,
                "SwooleTrackerWebSocketMiddleware", // 放在 RouteMiddlware 后
            ],
        ],
        'SwooleTrackerWebSocketMiddleware'  =>  [
            'serviceName'       => 'imi-websocket-example', // 服务名
            // 'serverIp'          => null, // 服务器 IP,默认获取当前网卡 IP
            // 'interface'         => null, // 网卡 interface 名,自动获取当前网卡IP时有效
            // 'successCode'       =>  500, // 当成功时上报的默认code
            // 'exceptionCode'     =>  500, // 当发生异常时上报的默认code
            // 指定获取请求方法名的参数,必须有
            'nameHandler'       =>  function(\Imi\Server\WebSocket\Message\IFrame $frame){
                return $frame->getFormatData()->action ?? 'unknown'; // 代码仅供参考
            },
        ],
    ],
];

TCP 服务

在服务器的 config/config.php 中配置:

[
    'beans'    =>    [
        'TcpDispatcher'    =>    [
            'middlewares'    =>    [
                …… // 你的其他中间件
                \Imi\Server\TcpServer\Middleware\RouteMiddleware::class,
                "SwooleTrackerTCPMiddleware", // 放在 RouteMiddlware 后
            ],
        ],
        'SwooleTrackerTCPMiddleware'  =>  [
            'serviceName'       => 'imi-tcp-example', // 服务名
            // 'serverIp'          => null, // 服务器 IP,默认获取当前网卡 IP
            // 'interface'         => null, // 网卡 interface 名,自动获取当前网卡IP时有效
            // 'successCode'       =>  500, // 当成功时上报的默认code
            // 'exceptionCode'     =>  500, // 当发生异常时上报的默认code
            // 指定获取请求方法名的参数,必须有
            'nameHandler'       =>  function(\Imi\Server\TcpServer\Message\IReceiveData $data){
                return $data->getFormatData()->action ?? 'unknown'; // 代码仅供参考
            },
        ],
    ],
];

UDP 服务

在服务器的 config/config.php 中配置:

[
    'beans'    =>    [
        'UdpDispatcher'    =>    [
            'middlewares'    =>    [
                …… // 你的其他中间件
                \Imi\Server\UdpServer\Middleware\RouteMiddleware::class,
                "SwooleTrackerUDPMiddleware", // 放在 RouteMiddlware 后
            ],
        ],
        'SwooleTrackerUDPMiddleware'  =>  [
            'serviceName'       => 'imi-udp-example', // 服务名
            // 'serverIp'          => null, // 服务器 IP,默认获取当前网卡 IP
            // 'interface'         => null, // 网卡 interface 名,自动获取当前网卡IP时有效
            // 'successCode'       =>  500, // 当成功时上报的默认code
            // 'exceptionCode'     =>  500, // 当发生异常时上报的默认code
            'nameHandler'       =>  function(\Imi\Server\UdpServer\Message\IPacketData $data){
                return $data->getFormatData()->action ?? 'unknown'; // 代码仅供参考
            },
        ],
    ],
];

进阶使用

如果请求产生异常,自动上报失败,错误码为异常 code

你也可以在代码中指定是否成功和错误码,例子:

RequestContext::set('imi.tracker.success', false);
RequestContext::set('imi.tracker.code', 19260817);

免费技术支持

QQ群:17916227 点击加群,如有问题会有人解答和修复。

运行环境

版权信息

imi-swoole-tracker 遵循 MIT 开源协议发布,并提供免费使用。

捐赠

开源不求盈利,多少都是心意,生活不易,随缘随缘……

You can’t perform that action at this time.