mts88/laravel-zipkin

Laravel 的 Zipkin 库。

1.0.3 2020-01-16 15:03 UTC

This package is auto-updated.

Last update: 2024-09-17 02:20:49 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,并在 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 许可证 下发布。