icovn/laravel-zipkin

Laravel 的 Zipkin 库。

1.0.4.0 2020-07-02 10:07 UTC

This package is auto-updated.

Last update: 2024-08-29 05:37:01 UTC


README

Latest Stable Version Total Downloads License

一个库,旨在帮助 Laravel 使用 Openzipkin。

目录

安装

Laravel 版本兼容性

要求

无需任何要求。

安装

  1. 使用 composer 安装
composer require mts88/laravel-zipkin
  1. 并将服务提供者在 config/app.php 中添加
Mts88\LaravelZipkin\Providers\LaravelZipkinServiceProvider::class
  1. 您还可以通过在 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。要使用此自动追踪,您需要

  1. 将中间件插入您的 app/Kernel.php 中您希望自动追踪的位置。例如,您可以在 API 块中使用它
'api' => [
	'throttle:60,1',
	'bindings',
	// Others middleware
	\Mts88\LaravelZipkin\Middlewares\ZipkinRequestLogger::class,
],
  1. 每个 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 许可证下发布。