PHPackages                             extraswoft/zipkin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. extraswoft/zipkin

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

extraswoft/zipkin
=================

zipkin-sdk for swoft

v0.0.0.1(7y ago)145624[2 issues](https://github.com/masixun71/swoft-zipkin/issues)Apache-2.0PHP

Since Oct 16Pushed 7y ago3 watchersCompare

[ Source](https://github.com/masixun71/swoft-zipkin)[ Packagist](https://packagist.org/packages/extraswoft/zipkin)[ RSS](/packages/extraswoft-zipkin/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependencies (2)Versions (2)Used By (0)

[![](https://camo.githubusercontent.com/cfa8ed50f909186bfd167f385de42578764483ce77585febead4a56d496e50a5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d76302e302e302e312d7265642e737667)](https://camo.githubusercontent.com/cfa8ed50f909186bfd167f385de42578764483ce77585febead4a56d496e50a5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d76302e302e302e312d7265642e737667)[![](https://camo.githubusercontent.com/40132ea396da1fc0c9f978249f670b77aef6e66ffb0f44987e0e2ba3113a175d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d2533453d372e312d6f72616e67652e737667)](https://camo.githubusercontent.com/40132ea396da1fc0c9f978249f670b77aef6e66ffb0f44987e0e2ba3113a175d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d2533453d372e312d6f72616e67652e737667)[![](https://camo.githubusercontent.com/6111524cc44700e3d9915944f83dcb7e7b4ee92d35ff93b17a8c5a0957d3120a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73776f6f6c652d2533453d342e302d626c75652e737667)](https://camo.githubusercontent.com/6111524cc44700e3d9915944f83dcb7e7b4ee92d35ff93b17a8c5a0957d3120a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73776f6f6c652d2533453d342e302d626c75652e737667)

简介
==

[](#简介)

本项目属于swoft的zipkin client,非侵入式地对项目环境进行跟踪并且异步上报到zipkin server,可以和其他的swoft项目或者其他语言（java，go）进行全链路监控。

配置步骤
====

[](#配置步骤)

1.composer
----------

[](#1composer)

```
        "jcchavezs/zipkin-opentracing": "^0.1.2",
        "opentracing/opentracing": "1.0.0-beta5",
        "extraswoft/zipkin": "*"
```

因为opentracing/opentracing的最新版本是一个dev版本，所以外部项目comoposer引入是会报错的，所以需要显示的把配置放入**composer.json**,然后 *composer update*。

2.config/properties/app.php 添加
------------------------------

[](#2configpropertiesappphp-添加)

#### 需要在app文件，beanScan里加上扫描我们的命名空间

[](#需要在app文件beanscan里加上扫描我们的命名空间)

```
      'beanScan' => [
        "ExtraSwoft\\Zipkin\\"
    ],
```

3.config/beans/base.php添加我们的中间件
-------------------------------

[](#3configbeansbasephp添加我们的中间件)

```
    'serverDispatcher' => [
        'middlewares' => [
            \Swoft\View\Middleware\ViewMiddleware::class,
            ZipkinMiddleware::class
//             \Swoft\Devtool\Middleware\DevToolMiddleware::class,
            // \Swoft\Session\Middleware\SessionMiddleware::class,
        ]
    ],
```

4.在.env配置文件中添加以下配置
------------------

[](#4在env配置文件中添加以下配置)

##### ZIPKIN\_HOST: zipkin server 的地址

[](#zipkin_host--zipkin-server-的地址)

##### ZIPKIN\_RAND: 采样率，100为100%

[](#zipkin_rand--采样率100为100)

```
  #Zipkin
ZIPKIN_HOST=http://0.0.0.0:9411
ZIPKIN_RAND=100
```

5.httpClient 的修改
----------------

[](#5httpclient-的修改)

当我们使用swoft官方的httpClient的时候，需要使用我们客户端的adapter

```
$client = new Client(['adapter' => new AddZipkinAdapter()]);
```

当然，你也可以看下我们适配器的源码放到自己的适配器里，比较简单

源码修改
====

[](#源码修改)

因为在mysql，redis和http的请求上没有钩子函数，所以我们需要自己实现，只要在请求开始和结束加上事件触发即可。建议自己或者公司项目直接fork官方的[swoft-component](https://github.com/swoft-cloud/swoft-component),然后根据自己需要开发，并且隔一段时间同步最新代码，在swoft里面composer使用component这个仓库。

1.mysql（协程）
-----------

[](#1mysql协程)

### src/db/src/Db.php中，在$connection-&gt;prepare($sql);前添加(注意命名空间加入)

[](#srcdbsrcdbphp中在connection-preparesql前添加注意命名空间加入)

```
         Log::profileStart($profileKey);
+        App::trigger('Mysql', 'start', $profileKey, $sql);
         $connection->prepare($sql);
         $params = self::transferParams($params);
         $result = $connection->execute($params);
```

### src/db/src/DbCoResult.php中，在Log::profileEnd($this-&gt;profileKey);后添加(注意命名空间加入)

[](#srcdbsrcdbcoresultphp中在logprofileendthis-profilekey后添加注意命名空间加入)

```
         $this->release();

         Log::profileEnd($this->profileKey);
+        App::trigger('Mysql', 'end', $this->profileKey);
         return $result;
```

2.redis (非协程),协程可以根据自己需要添加
--------------------------

[](#2redis-非协程协程可以根据自己需要添加)

### src/redis/src/Redis.php(注意命名空间加入)

[](#srcredissrcredisphp注意命名空间加入)

### 在 $result = $connection-&gt;$method(...$params);前后添加

[](#在-result--connection-methodparams前后添加)

```
         $connectPool = App::getPool($this->poolName);
         /* @var ConnectionInterface $client */
         $connection = $connectPool->getConnection();
+        App::trigger('Redis', 'start', $method, $params);
         $result     = $connection->$method(...$params);
         $connection->release(true);
+        App::trigger('Redis', 'end');

         return $result;
```

3.httpClient (协程)
-----------------

[](#3httpclient-协程)

### src/http-client/src/Adapter/CoroutineAdapter.php

[](#srchttp-clientsrcadaptercoroutineadapterphp)

### 在 $client-&gt;execute($path);前添加

[](#在-client-executepath前添加)

```
 if ($query !== '') $path .= '?' . $query;

         $client->setDefer();
+        App::trigger('HttpClient', 'start', $request, $options);
         $client->execute($path);

         App::profileEnd($profileKey);
```

### src/http-client/src/HttpCoResult.php

[](#srchttp-clientsrchttpcoresultphp)

### 在 $client-&gt;close();后添加

[](#在-client-close后添加)

```
         $this->recv();
         $result = $client->body;
         $client->close();
+        App::trigger('HttpClient', 'end');
         $headers = value(function () {
             $headers = [];
```

完成
==

[](#完成)

完成以上修改后，重新composer引入新的包，然后重启项目就可以了
----------------------------------

[](#完成以上修改后重新composer引入新的包然后重启项目就可以了)

使用zipkin server
===============

[](#使用zipkin-server)

```
   docker run -d -p 9411:9411 openzipkin/zipkin
```

效果图
===

[](#效果图)

每个swoft项目通过这些步骤后都可以进行监控了，下面是两个swoft采用之后的全链路效果图 [![zipkin httpClient](https://camo.githubusercontent.com/7274b949dea3e329ccee8298d1fc85bbd1fd2b356169c3e0b15c48f827c8e605/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31323839303338332d383835363864396438636330326431352e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430)](https://camo.githubusercontent.com/7274b949dea3e329ccee8298d1fc85bbd1fd2b356169c3e0b15c48f827c8e605/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31323839303338332d383835363864396438636330326431352e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430)

[![zipkin httpClient2](https://camo.githubusercontent.com/5ee5becc638e57614c8ae00c3bc07bb30e7f5ca0c67ffa8f18d4669bba8e8016/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31323839303338332d333030323639323636646366393462622e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430)](https://camo.githubusercontent.com/5ee5becc638e57614c8ae00c3bc07bb30e7f5ca0c67ffa8f18d4669bba8e8016/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31323839303338332d333030323639323636646366393462622e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430)

后记
==

[](#后记)

如果你想对全链路有更深的了解或者对我的项目实现有所了解，甚至想应用到其他php框架或者其他语言上去，可以看下我写的这篇文章[php全链路监控完全实现（swoft举例）](https://www.jianshu.com/p/7aace43ea2a1)

###  Health Score

28

—

LowBetter than 52% of packages

Maintenance17

Infrequent updates — may be unmaintained

Popularity22

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2814d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/18737991?v=4)[masixun71](/maintainers/masixun71)[@masixun71](https://github.com/masixun71)

---

Tags

phpswooleopentracingzipkinswoft

### Embed Badge

![Health badge](/badges/extraswoft-zipkin/health.svg)

```
[![Health](https://phpackages.com/badges/extraswoft-zipkin/health.svg)](https://phpackages.com/packages/extraswoft-zipkin)
```

###  Alternatives

[extraswoft/jaeger

jaeger-sdk for swoft

204.9k](/packages/extraswoft-jaeger)[renoki-co/octane-exporter

Export Laravel Octane metrics using this Prometheus exporter.

30128.9k](/packages/renoki-co-octane-exporter)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
