## ZipKin介绍
Zipkin 是一个开放源代码分布式的跟踪系统,每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图。
Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。为了方便在开发环境我直接采用了In-Memory方式进行存储,生产数据量大的情况则推荐使用Elasticsearch。
本文章为基于rapphp 环境下快速对接 zipKin 的技术方案
## 安装
compose 依赖
[ly_lib/zipkin](http://package.magcloud.net/#ly_lib/zipkin)
docker快速部署zipkin 服务端
### 配置项
~~~
'zipkin' => ['open'=>true, // 开关
'sample' => //取样率,
"http"=>true, //记录对外的 http 请求
"sql"=>true, //记录所有的 sql 请求
'url' => 'http://zipkin:9411/api/v2/spans'] //zipkin 服务端地址
~~~
### 初始化
~~~
class AppInit implements Init
{
public function appInit(AutoFindHandlerMapping $autoMapping, Router $router)
{
ZipKin::init();
}
}
~~~
项目收集一些数据后,就可以在对应的 zipkin web端查看数据了
### 添加自己的调用点
方法前
~~~
$span = ZipKin::span($host);
$span->tag('method', $name);
$span->tag('url', $args[0]);
$span->tag('header', json_encode($args[ 1 ]) );
$span->start();
~~~
方法后
~~~
$current = ZipKin::current();
ZipKin::spanFinish();
~~~
为了对项目没有侵入性,建议使用 aop 的方式添加 对应的调用点
具体参照
lylib\zipkin\wave下的几个aop 文件
