From 180f8c7be4e8d6d58c7602368a07406f4f76bcdd Mon Sep 17 00:00:00 2001 From: billpyang Date: Thu, 25 Sep 2025 11:15:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=E8=87=AA=E5=AE=9A=E4=B9=89meterProvide?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/OpenTelemetryServiceProvider.php | 10 ++++++++-- src/Support/Metric.php | 6 ++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/OpenTelemetryServiceProvider.php b/src/OpenTelemetryServiceProvider.php index f51c377..a56eff3 100644 --- a/src/OpenTelemetryServiceProvider.php +++ b/src/OpenTelemetryServiceProvider.php @@ -12,10 +12,13 @@ use OpenTelemetry\API\Globals; use OpenTelemetry\API\Metrics\MeterInterface; use OpenTelemetry\API\Trace\TracerInterface; +use OpenTelemetry\SDK\Metrics\MeterProviderFactory; +use OpenTelemetry\SDK\Resource\Detectors\Sdk; use Overtrue\LaravelOpenTelemetry\Console\Commands\TestCommand; use Overtrue\LaravelOpenTelemetry\Facades\Measure; use Overtrue\LaravelOpenTelemetry\Http\Middleware\AddTraceId; use Overtrue\LaravelOpenTelemetry\Http\Middleware\TraceRequest; +use Overtrue\LaravelOpenTelemetry\Support\Metric; class OpenTelemetryServiceProvider extends ServiceProvider { @@ -62,9 +65,12 @@ public function register(): void }); $this->app->alias(Support\Metric::class, 'opentelemetry.metric'); + // register custom meter $this->app->singleton(MeterInterface::class, function () { - return Globals::meterProvider() - ->getMeter(config('otel.meter_name', 'overtrue.laravel-open-telemetry')); + $resourceInfo = (new Sdk)->getResource(); + Metric::$meterProvider = (new MeterProviderFactory)->create($resourceInfo); + + return Metric::$meterProvider->getMeter(config('otel.meter_name', 'overtrue.laravel-open-telemetry')); }); $this->app->alias(MeterInterface::class, 'opentelemetry.meter'); diff --git a/src/Support/Metric.php b/src/Support/Metric.php index c3f28d5..8bdd418 100644 --- a/src/Support/Metric.php +++ b/src/Support/Metric.php @@ -4,11 +4,11 @@ use Illuminate\Contracts\Foundation\Application; use Illuminate\Support\Facades\Log; -use OpenTelemetry\API\Globals; use OpenTelemetry\API\Metrics\CounterInterface; use OpenTelemetry\API\Metrics\GaugeInterface; use OpenTelemetry\API\Metrics\HistogramInterface; use OpenTelemetry\API\Metrics\MeterInterface; +use OpenTelemetry\API\Metrics\MeterProviderInterface; use OpenTelemetry\API\Metrics\Noop\NoopMeter; use OpenTelemetry\API\Metrics\ObservableGaugeInterface; use Throwable; @@ -17,6 +17,8 @@ class Metric { private static ?bool $enabled = null; + public static ?MeterProviderInterface $meterProvider = null; + public function __construct(protected Application $app) {} // ======================= Enable/Disable Management ======================= @@ -45,7 +47,7 @@ public function isEnabled(): bool */ public function flush(): void { - Globals::meterProvider()?->forceFlush(); + self::$meterProvider?->forceFlush(); } // ======================= Core OpenTelemetry API ======================= From 4391e60470c464ce5acaa6dc1b2b86e6a8aa4de0 Mon Sep 17 00:00:00 2001 From: billpyang Date: Thu, 25 Sep 2025 11:33:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=E5=AE=8C=E5=96=84meterProvider?= =?UTF-8?q?=E7=9A=84=E8=AE=BF=E9=97=AE=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/OpenTelemetryServiceProvider.php | 5 +++-- src/Support/Metric.php | 12 +++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/OpenTelemetryServiceProvider.php b/src/OpenTelemetryServiceProvider.php index a56eff3..a20b5e0 100644 --- a/src/OpenTelemetryServiceProvider.php +++ b/src/OpenTelemetryServiceProvider.php @@ -68,9 +68,10 @@ public function register(): void // register custom meter $this->app->singleton(MeterInterface::class, function () { $resourceInfo = (new Sdk)->getResource(); - Metric::$meterProvider = (new MeterProviderFactory)->create($resourceInfo); + $meterProvider = (new MeterProviderFactory)->create($resourceInfo); + Metric::setProvider($meterProvider); - return Metric::$meterProvider->getMeter(config('otel.meter_name', 'overtrue.laravel-open-telemetry')); + return $meterProvider->getMeter(config('otel.meter_name', 'overtrue.laravel-open-telemetry')); }); $this->app->alias(MeterInterface::class, 'opentelemetry.meter'); diff --git a/src/Support/Metric.php b/src/Support/Metric.php index 8bdd418..b2475bd 100644 --- a/src/Support/Metric.php +++ b/src/Support/Metric.php @@ -17,7 +17,7 @@ class Metric { private static ?bool $enabled = null; - public static ?MeterProviderInterface $meterProvider = null; + private static ?MeterProviderInterface $meterProvider = null; public function __construct(protected Application $app) {} @@ -50,6 +50,16 @@ public function flush(): void self::$meterProvider?->forceFlush(); } + public static function getProvider(): MeterProviderInterface + { + return self::$meterProvider; + } + + public static function setProvider(MeterProviderInterface $meterProvider): void + { + self::$meterProvider = $meterProvider; + } + // ======================= Core OpenTelemetry API ======================= /**