2017 © Pedro Peláez
 

library jaeger-client-php

image

jonahgeorge/jaeger-client-php

  • Friday, July 27, 2018
  • by jonahgeorge
  • Repository
  • 7 Watchers
  • 21 Stars
  • 690 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 8 Forks
  • 18 Open issues
  • 11 Versions
  • 190 % Grown

The README.md

Build Status PHP version, (*1)

Jaeger Bindings for PHP OpenTracing API

This is a client-side library that can be used to instrument PHP apps for distributed trace collection, and to send those traces to Jaeger. See the OpenTracing PHP API for additional detail., (*2)

Contributing and Developing

Please see CONTRIBUTING.md., (*3)

Installation

Jaeger client can be installed via Composer:, (*4)

composer require jonahgeorge/jaeger-client-php

Getting Started

<?php

require_once 'vendor/autoload.php';

use Jaeger\Config;
use OpenTracing\GlobalTracer;

$config = new Config(
    [
        'sampler' => [
            'type' => Jaeger\SAMPLER_TYPE_CONST,
            'param' => true,
        ],
        'logging' => true,
    ],
    'your-app-name'
);
$config->initializeTracer();

$tracer = GlobalTracer::get();

$scope = $tracer->startActiveSpan('TestSpan', []);
$scope->close();

$tracer->flush();

Samplers

List of supported samplers, for more info about samplers, please read Jaeger Sampling guide., (*5)

Const sampler

This sampler either samples everything, or nothing., (*6)

Configuration
'sampler' => [
    'type' => Jaeger\SAMPLER_TYPE_CONST,
    'param' => true, // boolean wheter to trace or not
],

Probabilistic sampler

This sampler samples request by given rate., (*7)

Configuration
'sampler' => [
    'type' => Jaeger\SAMPLER_TYPE_PROBABILISTIC,
    'param' => 0.5, // float [0.0, 1.0]
],

Rate limiting sampler

Samples maximum specified number of traces (requests) per second., (*8)

Requirements
  • psr/cache PSR-6 cache component to store and retrieve sampler state between requests. Cache component is passed to Jaeger\Config trough its constructor.
  • hrtime() function, that can retrieve time in nanoseconds. You need either php 7.3 or PECL/hrtime extension.
Configuration
'sampler' => [
    'type' => Jaeger\SAMPLER_TYPE_RATE_LIMITING,
    'param' => 100 // integer maximum number of traces per second,
    'cache' => [
        'currentBalanceKey' => 'rate.currentBalance' // string
        'lastTickKey' => 'rate.lastTick' // string
    ]
],

Dispatch mode

The library supports 3 ways of sending data to Jaeger Agent:, (*9)

  1. Zipkin.thrift over Compact protocol (socket - UDP) - default
  2. Jaeger.thrift over Binary protocol (socket - UDP)
  3. Jaeger.thrift over Binary protocol (HTTP)

If you want to enable "Jaeger.thrift over Binary protocol" one or other, than you need to set dispatch_mode config option or JAEGER_DISPATCH_MODE env variable., (*10)

Allowed values for dispatch_mode are: - jaeger_over_binary_udp - jaeger_over_binary_http - zipkin_over_compact_udp, (*11)

There are 3 constants available, so it is better to use them:, (*12)

class Config
{
    const ZIPKIN_OVER_COMPACT_UDP   = "zipkin_over_compact_udp";
    const JAEGER_OVER_BINARY_UDP    = "jaeger_over_binary_udp";
    const JAEGER_OVER_BINARY_HTTP   = "jaeger_over_binary_http";
    ...
}

A possible config with custom dispatch_mode can look like this:, (*13)

// config.php

use Jaeger\Config;

return [
    'sampler' => [
        'type' => Jaeger\SAMPLER_TYPE_CONST,
        'param' => true,
    ],
    'logging' => true,
    "tags" => [
        // process. prefix works only with JAEGER_OVER_HTTP, JAEGER_OVER_BINARY
        // otherwise it will be shown as simple global tag
        "process.process-tag-key-1" => "process-value-1", // all tags with `process.` prefix goes to process section
        "process.process-tag-key-2" => "process-value-2", // all tags with `process.` prefix goes to process section
        "global-tag-key-1" => "global-tag-value-1", // this tag will be appended to all spans
        "global-tag-key-2" => "global-tag-value-2", // this tag will be appended to all spans
    ],
    "local_agent" => [
        "reporting_host" => "localhost", 
//        You can override port by setting local_agent.reporting_port value   
        "reporting_port" => 6832
    ],
//     Different ways to send data to Jaeger. Config::ZIPKIN_OVER_COMPACT - default):
    'dispatch_mode' => Config::JAEGER_OVER_BINARY_UDP,
];

The full example you can see at examples directory., (*14)

By default, for each dispatch_mode there is default reporting_port config value. Table with default values you can see below:, (*15)

dispatch_mode default reporting_port
ZIPKIN_OVER_COMPACT_UDP 5775
JAEGER_OVER_BINARY_UDP 6832
JAEGER_OVER_BINARY_HTTP 14268

IPv6

In case you need IPv6 support you need to set ip_version Config variable. By default, IPv4 is used. There is an alias Config::IP_VERSION which you can use as an alternative to raw ip_version., (*16)

Example:, (*17)

use Jaeger\Config;

$config = new Config(
    [
        "ip_version" => Config::IPV6, // <-- or use Config::IP_VERSION constant
        'logging' => true,
        'dispatch_mode' => Config::JAEGER_OVER_BINARY_UDP,
    ],
    'serviceNameExample',
);
$config->initializeTracer();

or, (*18)

use Jaeger\Config;

$config = new Config(
    [
        Config::IP_VERSION => Config::IPV6, // <--
        'logging' => true,
        'dispatch_mode' => Config::JAEGER_OVER_BINARY_UDP,
    ],
    'serviceNameExample',
);
$config->initializeTracer();

Testing

Tests are located in the tests directory. See tests/README.md., (*19)

Roadmap

License

MIT License., (*20)

The Versions

27/07 2018

dev-master

9999999-dev

  Sources   Download

MIT

The Requires

 

The Development Requires

09/07 2018
12/06 2018

dev-crossdock

dev-crossdock

  Sources   Download

MIT

The Requires

 

The Development Requires

31/05 2018

dev-jonahgeorge-patch-1

dev-jonahgeorge-patch-1

  Sources   Download

MIT

The Requires

 

The Development Requires

30/05 2018

dev-supress-socket-errors

dev-supress-socket-errors

  Sources   Download

MIT

The Requires

 

The Development Requires

17/05 2018
09/03 2018

dev-opentracing-beta3

dev-opentracing-beta3

  Sources   Download

MIT

The Requires

 

The Development Requires

05/12 2017