diff options
author | Andrew Dolgov <[email protected]> | 2023-10-20 17:12:29 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2023-10-20 21:13:39 +0300 |
commit | cdd7ad020e165fe680703b6d3319b908b682fb7a (patch) | |
tree | b51eb09b7b4587e8fbc5624ac8d88d28cfcd0b04 /classes/tracer.php | |
parent | 45a9ff0c88cbd33892ff16ab837e9059937d656e (diff) |
jaeger-client -> opentelemetry
Diffstat (limited to 'classes/tracer.php')
-rw-r--r-- | classes/tracer.php | 79 |
1 files changed, 45 insertions, 34 deletions
diff --git a/classes/tracer.php b/classes/tracer.php index 5a23dfeba..3a734641e 100644 --- a/classes/tracer.php +++ b/classes/tracer.php @@ -1,61 +1,72 @@ <?php -use OpenTracing\GlobalTracer; -use OpenTracing\Scope; + +use OpenTelemetry\Contrib\Otlp\OtlpHttpTransportFactory; +use OpenTelemetry\Contrib\Otlp\SpanExporter; +use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor; +use OpenTelemetry\SDK\Trace\TracerProvider; +use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator; +use OpenTelemetry\API\Trace\Span; +use OpenTelemetry\SDK\Trace\SpanExporter\InMemoryExporter; class Tracer { /** @var Tracer $instance */ private static $instance; + private static $tracer; public function __construct() { - $jaeger_host = Config::get(Config::JAEGER_REPORTING_HOST); - - if ($jaeger_host) { - $config = new \Jaeger\Config( - [ - 'sampler' => [ - 'type' => \Jaeger\SAMPLER_TYPE_CONST, - 'param' => true, - ], - 'logging' => true, - "local_agent" => [ - "reporting_host" => $jaeger_host, - "reporting_port" => 6832 - ], - 'dispatch_mode' => \Jaeger\Config::JAEGER_OVER_BINARY_UDP, - ], - Config::get(Config::JAEGER_SERVICE_NAME) - ); - - $config->initializeTracer(); - - register_shutdown_function(function() { - $tracer = GlobalTracer::get(); - $tracer->flush(); - }); + $opentelemetry_host = Config::get(Config::OPENTELEMETRY_HOST); + + if ($opentelemetry_host) { + $transport = (new OtlpHttpTransportFactory())->create("http://$opentelemetry_host/v1/traces", 'application/x-protobuf'); + $exporter = new SpanExporter($transport); + } else { + $exporter = new InMemoryExporter(); } + + $tracerProvider = new TracerProvider(new SimpleSpanProcessor($exporter)); + $this->tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php'); + + $context = TraceContextPropagator::getInstance()->extract(getallheaders()); + $span = $this->tracer->spanBuilder(Config::get(Config::OPENTELEMETRY_SERVICE)) + ->setParent($context) + ->startSpan(); + + $span->activate(); + + register_shutdown_function(function() use ($span, $tracerProvider) { + $span->end(); + + $tracerProvider->shutdown(); + }); } /** * @param string $name * @param array<string>|array<string, array<string, mixed>> $tags * @param array<string> $args - * @return Scope + * @return Span */ - private function _start(string $name, array $tags = [], array $args = []): Scope { - $tracer = GlobalTracer::get(); + private function _start(string $name, array $tags = [], array $args = []) { + $span = $this->tracer->spanBuilder($name)->startSpan(); + + foreach ($tags as $k => $v) { + $span->setAttribute($k, $v); + } + + $span->setAttribute("func.args", json_encode($args)); - $tags['args'] = json_encode($args); + $span->activate(); - return $tracer->startActiveSpan($name, ['tags' => $tags]); + return $span; } /** * @param string $name * @param array<string>|array<string, array<string, mixed>> $tags * @param array<string> $args - * @return Scope + * @return Span */ - public static function start(string $name, array $tags = [], array $args = []) : Scope { + public static function start(string $name, array $tags = [], array $args = []) { return self::get_instance()->_start($name, $tags, $args); } |