tanhaipeng / XAPM

An APM extension for PHP, supporting Trace, Debug and Monitor.

Home Page:http://tanhp.com/index.php/xapm.html

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status

XAPM : An extension for PHP Trace

为了更好的跟踪PHP执行链路开发此扩展,传统跟踪方法需要在代码层加入Log信息从而获得链路信息,而且不同框架之间的Log方法也不一定能有效兼容。我们扩展的优点是代码层无需修改,启用so扩展后可自动获取代码执行链路,实现开发框架与Trace信息获取的解耦。

XAPM架构

扩展端(xapm)负责收集底层性能数据,缓存成文件形式,每隔一段时间通过TCP协议传输到服务端(xserver),服务端解析trace数据,排序组合成结构化信息输出&持久化存储。

Trace数据

  • 类/函数(√)
  • 执行耗时(√)
  • 单机调试(√)
  • 代码文件(√)
  • 代码行号(√)
  • 输入输出(√)
  • 数据压缩(dev)
  • 堆栈信息(dev)
  • 性能损耗测试(dev)
  • SQL慢查询分析(dev)
  • 调用链可视化

使用方式

扩展端

(1)编译源码

cd ext-src
sh build.sh

(2)module目录下的xapm.so文件拷贝到PHP extension目录

(3)php.ini启用扩展,并配置服务端信息

extension=xapm.so
[xapm]
xapm.server_ip=127.0.0.1  # 服务端IP
xapm.server_port=8010     # 服务端PORT
xapm.log_path=/tmp/trace.log   # 缓冲文件路径
xapm.log_remote=1   # 数据是否远程传输

(4)重启php-fpm

服务端

(1)编译源码

go get github.com/go-ozzo/ozzo-log
go get github.com/go-ozzo/ozzo-config
cd srv-src
sh build.sh

(2)修改config.json

"Port": "8010"    # 服务端PORT
"MaxSize": 4096   # 缓冲区大小
"Logpath": "log/xserver.log"   # 日志路径

(3)启动xserver

#推荐使用supervisor,可以用下面方式测试
nohup ./xserver &

Trace效果

单机调试

配置文件php.ini中xapm.log_remote=0时,表示数据不传输到远程,日志存储到xapm.log_path中,可以运行ext_src目录下debug脚本本地调试:

python ext_src/local_debug.py

也可以得到类似上节截图效果

性能损耗测试

http://phpbench.com/

About

An APM extension for PHP, supporting Trace, Debug and Monitor.

http://tanhp.com/index.php/xapm.html

License:Apache License 2.0


Languages

Language:C 92.1%Language:Go 3.4%Language:Python 1.8%Language:M4 1.7%Language:PHP 0.5%Language:JavaScript 0.3%Language:CMake 0.1%Language:Shell 0.1%