Class OpenTelemetryMeterProvider

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

public final class OpenTelemetryMeterProvider extends Object implements MeterProvider
  • Constructor Details

    • OpenTelemetryMeterProvider

      public OpenTelemetryMeterProvider()
  • 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 OpenTelemetry SDK 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 SdkMeterProvider to MetricsOptions
       MetricsOptions metricsOptions = new OpenTelemetryMetricsOptions()
           .setProvider(openTelemetry.getMeterProvider());
      
       // 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.