A library wants to help the use Openzipkin for Laravel.
Laravel | Package |
---|---|
5.x | not tested |
>= 6.x.x | 1.0.x |
No requirements are necessary.
- Installation using composer:
composer require mts88/laravel-zipkin
- And add the service provider in
config/app.php
:
Mts88\LaravelZipkin\Providers\LaravelZipkinServiceProvider::class
- You may also register an alias for the ZipkinService by adding the following to the alias array in
config/app.php
:
'Zipkin' => Mts88\LaravelZipkin\Facades\Zipkin,
Run the command below to publish the package config file config/zipkin.php
:
php artisan vendor:publish
in your .env
file define these parameters and set up your configuration:
ZIPKIN_HOST=http://localhost
ZIPKIN_PORT=9411
The library offer an automatic tracing of request, in particular about your API. In order to use this automatic tracing you have:
- Insert the middleware in your
app/Kernel.php
where do you want automatic tracing. For example you can use in api block:
'api' => [
'throttle:60,1',
'bindings',
// Others middleware
\Mts88\LaravelZipkin\Middlewares\ZipkinRequestLogger::class,
],
- Each controller of Api must extends
ZipkinBaseController
(check BaseController):
class MyApiController extends ZipkinBaseController{
// My Api Methods
}
You can easly access to ZipkinService by dependency injection. In your Controller
you can access in this way:
use Mts88\LaravelZipkin\Services\ZipkinService;
class MyAwesomeController extends Controller{
public function __construct(ZipkinService $zipkinService)
{
// Do something with $zipkinService
}
}
If you want to automatize child span between controllers and methods, you can use ZipkinBaseController
and foreach method called in Controller he create automatically a span for the current rootSpan instance.
note: ZipkinBaseController doen't create rootSpan, so you have to create before methods are called. For example in middleware.
use Mts88\LaravelZipkin\Controllers\ZipkinBaseController;
class MyAwesomeController extends ZipkinBaseController {
// My Awesome Methods
}
In this way you don't need to access to $zipkinService
in __construct
, but if you need to override it you have to call parent constructor:
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
}
}
note: in your MyAwesomeController
now you can access to ZipkinService with public variable of ZipkinBaseController
:
// zipkinService instance
$this->zipkinService;
In order to create a rootSpan you can use this code
$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();
To create a child 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();
Open an issue on GitHub if you have any problems or suggestions.
The contents of this repository is released under the MIT license.