icovn / laravel-zipkin
Laravel 的 Zipkin 库。
1.0.4.0
2020-07-02 10:07 UTC
Requires
- php: ^7.1
- openzipkin/zipkin: ^1.3.6
README
一个库,旨在帮助 Laravel 使用 Openzipkin。
目录
安装
Laravel 版本兼容性
要求
无需任何要求。
安装
- 使用 composer 安装
composer require mts88/laravel-zipkin
- 并将服务提供者在
config/app.php
中添加
Mts88\LaravelZipkin\Providers\LaravelZipkinServiceProvider::class
- 您还可以通过在
config/app.php
中的别名数组中添加以下内容来为 ZipkinService 注册别名
'Zipkin' => Mts88\LaravelZipkin\Facades\Zipkin,
配置
运行以下命令以发布包配置文件 config/zipkin.php
php artisan vendor:publish
在您的 .env
文件中定义这些参数并设置您的配置
ZIPKIN_HOST=http:// ZIPKIN_PORT=9411
自动 API 追踪
该库提供对请求的自动追踪,特别是关于您的 API。要使用此自动追踪,您需要
- 将中间件插入您的
app/Kernel.php
中您希望自动追踪的位置。例如,您可以在 API 块中使用它
'api' => [ 'throttle:60,1', 'bindings', // Others middleware \Mts88\LaravelZipkin\Middlewares\ZipkinRequestLogger::class, ],
- 每个 Api 控制器 必须扩展
ZipkinBaseController
(请参阅BaseController)
class MyApiController extends ZipkinBaseController{ // My Api Methods }
用法
依赖
您可以通过依赖注入轻松访问 ZipkinService。在您的 Controller
中,您可以通过这种方式访问
use Mts88\LaravelZipkin\Services\ZipkinService; class MyAwesomeController extends Controller{ public function __construct(ZipkinService $zipkinService) { // Do something with $zipkinService } }
BaseController
如果您想在控制器和方法之间自动化子 Span,您可以使用 ZipkinBaseController
,并在控制器中调用的每个方法中,它将自动为当前的根 Span 实例创建一个 Span。注意:ZipkinBaseController 不会创建根 Span,因此您必须在方法调用之前创建它。例如在中间件中。
use Mts88\LaravelZipkin\Controllers\ZipkinBaseController; class MyAwesomeController extends ZipkinBaseController { // My Awesome Methods }
这种方式下,您不需要在 __construct
中访问 $zipkinService
,但如果您需要覆盖它,您**必须**调用父构造函数
use Mts88\LaravelZipkin\Services\ZipkinService; use Mts88\LaravelZipkin\Controllers\ZipkinBaseController; class MyAwesomeController extends ZipkinBaseController{ public function __construct(ZipkinService $zipkinService) { parent::__construct($zipkinService); // Do something with your override } }
注意:在您的 MyAwesomeController
中,现在您可以通过 ZipkinBaseController
的公开变量访问 ZipkinService
// zipkinService instance $this->zipkinService;
创建跟踪和根 Span
要创建根 Span,可以使用此代码
$this->zipkinService = new ZipkinService(); // or you can access in others way // Create trace $this->zipkinService->setTracer('my_trace_name', $request->ip()); $tags = [ "my_value1" => "hello", "my_value2" => "world" ]; // Create RootSpan $this->zipkinService->createRootSpan('root_span_of_request', $tags); // Set Annotation $this->zipkinService->setRootSpanAnnotation('my_annotation_1', \Zipkin\Timestamp\Timestamp\now()); // Dedicated Tags Methods $this->zipkinService->setRootSpanMethod('GET') // Method of request ->setRootSpanPath('/') // Path of request ->setRootSpanStatusCode("200") // Response Code Server ->setRootAuthUser(Auth::user()); // User that perform request // Insert others tags $this->setRootSpanTag('my_value3', "ciao") ->setRootSpanTag('my_value4', "mondo"); // Close rootSpan and tracer $this->zipkinService->closeSpan();
子 Span
要创建子 Span
// Create tracer $tracing = $this->zipkinService->createTracing('child_span_tracing', $request->ip()); $tracer = $tracing->getTracer(); // Create Span $span = $tracer->nextSpan($this->zipkinService->getRootSpanContext()); $span->annotate("Start", \Zipkin\Timestamp\Timestamp\now()); $span->setName('Child span method'); $span->start(\Zipkin\Timestamp\Timestamp\now()); // Create Tag for Child Span $span->tag("my_tag_1", 'Hello'); $span->tag("my_tag_2", 'World'); // Make annotation $span->annotate("End", \Zipkin\Timestamp\Timestamp\now()); // Close Span $span->finish(\Zipkin\Timestamp\Timestamp\now()); $tracer->flush();
联系方式
如果您有任何问题或建议,请在 GitHub 上提交一个 issue。
许可证
此存储库的内容在MIT 许可证下发布。