mts88 / laravel-zipkin
Laravel 的 Zipkin 库。
1.0.3
2020-01-16 15:03 UTC
Requires
- php: ^7.1
- openzipkin/zipkin: ^1.3.4
This package is auto-updated.
Last update: 2024-09-17 02:20:49 UTC
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
,并在 Controller 中调用每个方法时,它会自动为当前的根 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 上创建问题。
许可证
本存储库的内容在 MIT 许可证 下发布。