Class OpenTelemetryMeterProvider

java.lang.Object
com.azure.core.metrics.opentelemetry.OpenTelemetryMeterProvider
All Implemented Interfaces:
MeterProvider

public final class OpenTelemetryMeterProvider extends Object implements MeterProvider
Resolves and provides Meter implementation.

This class is intended to be used by Azure client libraries and provides abstraction over different metrics implementations. Application developers should use metrics implementations such as OpenTelemetry or Micrometer directly.

  • Constructor Details

  • Method Details

    • createMeter

      public Meter createMeter(String libraryName, String libraryVersion, MetricsOptions options)
      Creates named and versioned OpenTelemetry-based implementation of Meter Use global OpenTelemetry SDK configuration:
      
       // configure OpenTelemetry SDK using io.opentelemetry:opentelemetry-sdk-extension-autoconfigure
       // AutoConfiguredOpenTelemetrySdk.initialize();
      
       // configure Azure Client, no metric configuration needed
       AzureClient sampleClient = new AzureClientBuilder()
           .endpoint("https://my-client.azure.com")
           .build();
      
       Span span = GlobalOpenTelemetry.getTracer("azure-core-samples")
           .spanBuilder("doWork")
           .startSpan();
      
       try (Scope scope = span.makeCurrent()) {
           // do some work
      
           // Current context flows to OpenTelemetry metrics and is used to populate exemplars
           // you can also pass OpenTelemetry context explicitly by passing it under PARENT_TRACE_CONTEXT_KEY
           String response = sampleClient.methodCall("get items");
           // do more work
       }
      
       span.end();
      
       
      It's also possible to pass custom OpenTelemetry SDK configuration
      
       // configure OpenTelemetry SDK
       SdkTracerProvider tracerProvider = SdkTracerProvider.builder()
           .addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder().build()).build())
           .build();
      
       SdkMeterProvider meterProvider = SdkMeterProvider.builder()
           .registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()).build())
           .build();
      
       OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
           .setTracerProvider(tracerProvider)
           .setMeterProvider(meterProvider)
           .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
           .build();
      
       Tracer tracer = openTelemetry.getTracer("azure-core-samples");
      
       // pass custom OpenTelemetry instance to MetricsOptions
       MetricsOptions metricsOptions = new OpenTelemetryMetricsOptions()
           .setOpenTelemetry(openTelemetry);
      
       // configure Azure Client to use customized MetricOptions
       AzureClient sampleClient = new AzureClientBuilder()
           .endpoint("Https://my-client.azure.com")
           .clientOptions(new ClientOptions().setMetricsOptions(metricsOptions))
           .build();
      
       Span span = tracer.spanBuilder("doWork").startSpan();
       io.opentelemetry.context.Context otelContext = io.opentelemetry.context.Context.current().with(span);
      
       // do some work
      
       // Context is used by OpenTelemetry metrics to populate exemplars, Context.current() will be used if no
       // explicit context is provided.
       String response = sampleClient.methodCall("get items",
           new Context(PARENT_TRACE_CONTEXT_KEY, otelContext));
      
       // do more work
       span.end();
      
       
      Specified by:
      createMeter in interface MeterProvider
      Parameters:
      libraryName - Azure client library package name
      libraryVersion - Azure client library version
      options - instance of MetricsOptions
      Returns:
      a meter instance.