Zipkin instrumentation for Guzzle HTTP Client.
composer require jcchavezs/zipkin-instrumentation-guzzle
ZipkinGuzzle\Middleware
is an Guzzle middleware that can be used along with GuzzleHttp\Client
to create a span and propagate the context.
You can use the default handler to easy the instrumentation:
use Zipkin\TracingBuilder;
use ZipkinGuzzle\Middleware;
$tracing = TracingBuilder::create()->build();
// Default tags for all spans being created. They are not mandatory.
$tags = [
'instance' => $_SERVER['SERVER_NAME']
];
$client = new Client([
'handler' => Middleware\handlerStack($tracing, $tags),
]);
If you need to customize the tracing handler (e.g. wrapping it with another handler) you can create a GuzzleHttp\HandlerStack
and push/unshift handlers into it making sure the tracing middleware stays at the top of the stack:
use GuzzleHttp\HandlerStack;
use Zipkin\TracingBuilder;
use ZipkinGuzzle\Middleware;
$tracing = TracingBuilder::create()->build();
$stack = HandlerStack::create();
$stack->push(someMiddleware());
...
$stack->push(Middleware\tracing($tracing));
$client = new Client([
'handler' => $stack,
]);
Guzzle 7 is compatible with PSR18 clients, hence you can use the native Zipkin instrumentation. Check https://github.com/openzipkin/zipkin-php/tree/master/src/Zipkin/Instrumentation/Http/Client/Psr18#usage for more details.