Git Product home page Git Product logo

jaeger-client-php's Introduction

Build Status PHP version

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.

Contributing and Developing

Please see CONTRIBUTING.md.

Installation

Jaeger client can be installed via Composer:

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.

Const sampler

This sampler either samples everything, or nothing.

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

Probabilistic sampler

This sampler samples request by given rate.

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.

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:

  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.

Allowed values for dispatch_mode are:

  • jaeger_over_binary_udp
  • jaeger_over_binary_http
  • zipkin_over_compact_udp

There are 3 constants available, so it is better to use them:

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:

// 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.

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

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.

Example:

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

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.

Roadmap

License

MIT License.

jaeger-client-php's People

Contributors

sergeyklay avatar jonahgeorge avatar egor-muindor avatar tommyseus avatar heh9 avatar jaredru avatar avrphp avatar mszabo-wikia avatar limingxinleo avatar pekhota avatar blong14 avatar fredipevcin avatar filipbenco avatar dkemper1 avatar alexeyshockov avatar masterada avatar taarim avatar sfunkhouser avatar peter279k avatar m1x0n avatar dafresh avatar asyazwan avatar nauxliu avatar idr0id avatar enleur avatar rostyslavkhaniukov avatar piotrooo avatar podtserkovskiy avatar jans-jeroen avatar goresakuraba avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.