Skip to content
This repository was archived by the owner on Dec 5, 2025. It is now read-only.

Commit bcf0a61

Browse files
authored
Merge pull request #4 from billyang-arch/feat/update-metric-provider
fix:自定义meterProvider
2 parents 35585d9 + 4391e60 commit bcf0a61

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

src/OpenTelemetryServiceProvider.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@
1212
use OpenTelemetry\API\Globals;
1313
use OpenTelemetry\API\Metrics\MeterInterface;
1414
use OpenTelemetry\API\Trace\TracerInterface;
15+
use OpenTelemetry\SDK\Metrics\MeterProviderFactory;
16+
use OpenTelemetry\SDK\Resource\Detectors\Sdk;
1517
use Overtrue\LaravelOpenTelemetry\Console\Commands\TestCommand;
1618
use Overtrue\LaravelOpenTelemetry\Facades\Measure;
1719
use Overtrue\LaravelOpenTelemetry\Http\Middleware\AddTraceId;
1820
use Overtrue\LaravelOpenTelemetry\Http\Middleware\TraceRequest;
21+
use Overtrue\LaravelOpenTelemetry\Support\Metric;
1922

2023
class OpenTelemetryServiceProvider extends ServiceProvider
2124
{
@@ -62,9 +65,13 @@ public function register(): void
6265
});
6366
$this->app->alias(Support\Metric::class, 'opentelemetry.metric');
6467

68+
// register custom meter
6569
$this->app->singleton(MeterInterface::class, function () {
66-
return Globals::meterProvider()
67-
->getMeter(config('otel.meter_name', 'overtrue.laravel-open-telemetry'));
70+
$resourceInfo = (new Sdk)->getResource();
71+
$meterProvider = (new MeterProviderFactory)->create($resourceInfo);
72+
Metric::setProvider($meterProvider);
73+
74+
return $meterProvider->getMeter(config('otel.meter_name', 'overtrue.laravel-open-telemetry'));
6875
});
6976

7077
$this->app->alias(MeterInterface::class, 'opentelemetry.meter');

src/Support/Metric.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
use Illuminate\Contracts\Foundation\Application;
66
use Illuminate\Support\Facades\Log;
7-
use OpenTelemetry\API\Globals;
87
use OpenTelemetry\API\Metrics\CounterInterface;
98
use OpenTelemetry\API\Metrics\GaugeInterface;
109
use OpenTelemetry\API\Metrics\HistogramInterface;
1110
use OpenTelemetry\API\Metrics\MeterInterface;
11+
use OpenTelemetry\API\Metrics\MeterProviderInterface;
1212
use OpenTelemetry\API\Metrics\Noop\NoopMeter;
1313
use OpenTelemetry\API\Metrics\ObservableGaugeInterface;
1414
use Throwable;
@@ -17,6 +17,8 @@ class Metric
1717
{
1818
private static ?bool $enabled = null;
1919

20+
private static ?MeterProviderInterface $meterProvider = null;
21+
2022
public function __construct(protected Application $app) {}
2123

2224
// ======================= Enable/Disable Management =======================
@@ -45,7 +47,17 @@ public function isEnabled(): bool
4547
*/
4648
public function flush(): void
4749
{
48-
Globals::meterProvider()?->forceFlush();
50+
self::$meterProvider?->forceFlush();
51+
}
52+
53+
public static function getProvider(): MeterProviderInterface
54+
{
55+
return self::$meterProvider;
56+
}
57+
58+
public static function setProvider(MeterProviderInterface $meterProvider): void
59+
{
60+
self::$meterProvider = $meterProvider;
4961
}
5062

5163
// ======================= Core OpenTelemetry API =======================

0 commit comments

Comments
 (0)