new999day/opentelemetry-auto-ext-amqp

OpenTelemetry ext-amqp 自动仪器化

v1.0 2024-05-03 13:45 UTC

This package is auto-updated.

Last update: 2024-09-22 10:42:50 UTC


README

Releases Issues Source Mirror Latest Version Stable

这是从 https://github.com/open-telemetry/opentelemetry-php-contrib 分离出的只读子树。

OpenTelemetry ext-amqp 自动仪器化

请阅读 https://opentelemetry.io/docs/instrumentation/php/automatic/ 了解如何安装和配置扩展和 SDK 的说明。

概览

通过 composer 注册自动仪器化钩子,并为以下方法自动创建跨度

  • AMQPExchange::publish
  • AMQPQueue::ack
  • AMQPQueue::nack
  • AMQPQueue::reject

仪器化自动为上述每个方法创建跨度并将跨度上下文注入消息头中。消费者 应该 为每个接收到的消息创建一个跨度,提取跨度上下文,并可以决定假设上下文以处理消息或启动新的跟踪并使用跟踪链路将生产者与消费者链接起来。

示例

//Create and declare channel
$channel = new AMQPChannel($connection);

$routing_key = 'task_queue';

$callback_func = function(AMQPEnvelope $message, AMQPQueue $q) {
    $context = $propagator->extract($message->getHeaders(), ArrayAccessGetterSetter::getInstance());
    $tracer = Globals::tracerProvider()->getTracer('my.org.consumer');

    // Start a new span that assumes the context that was injected by the producer
    $span = $tracer
        ->spanBuilder('my_queue consume')
        ->setSpanKind(SpanKind::KIND_CONSUMER)
        ->setParent($context)
        ->startSpan();

    sleep(sleep(substr_count($message->getBody(), '.')));

    $q->ack($message->getDeliveryTag());

    $span->end();
};

try{
    $queue = new AMQPQueue($channel);
    $queue->setName($routing_key);
    $queue->setFlags(AMQP_DURABLE);
    $queue->declareQueue();

    $queue->consume($callback_func);
} catch(AMQPQueueException $ex){
    print_r($ex);
} catch(Exception $ex){
    print_r($ex);
}

$connection->disconnect();

完整示例: https://github.com/rabbitmq/rabbitmq-tutorials/blob/main/php-amqp/worker.php

配置

可以通过 运行时配置 禁用此扩展。

OTEL_PHP_DISABLED_INSTRUMENTATIONS=ext_amqp