GitHub Copilot ChatGPT Claude Codex CLI Cursor opencode Skill Text

azure-monitor-opentelemetry-exporter-java

Azure Monitor OpenTelemetry Exporter for Java. Export OpenTelemetry traces, metrics, and logs to Azure Monitor/Application Insights. Triggers: "AzureMonitorExporter java", "opentelemetry azure java", "application insights java otel", "azure monitor tracing java". Note: This packa

Ciza · 0 points · 14 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download microsoft-skills-.github_plugins_azure-sdk-java_skills_azure-monitor-opentelemetry-exporter-java-e58528d.zip · 4 KB
Part of microsoft/skills — 195 skills

Install

skills CLI npx skills add https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-java/skills/azure-monitor-opentelemetry-exporter-java
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install microsoft-skills@llmmart
Git git clone https://github.com/microsoft/skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole microsoft/skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Azure Monitor OpenTelemetry Exporter for Java

⚠️ DEPRECATION NOTICE: This package is deprecated. Migrate to azure-monitor-opentelemetry-autoconfigure.

See Migration Guide for detailed instructions.

Export OpenTelemetry telemetry data to Azure Monitor / Application Insights.

Installation (Deprecated)

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-monitor-opentelemetry-exporter</artifactId>
    <version>1.0.0-beta.x</version>
</dependency>

Recommended: Use Autoconfigure Instead

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-monitor-opentelemetry-autoconfigure</artifactId>
    <version>LATEST</version>
</dependency>

Environment Variables

APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/

Basic Setup with Autoconfigure (Recommended)

Using Environment Variable

import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder;
import io.opentelemetry.api.OpenTelemetry;
import com.azure.monitor.opentelemetry.exporter.AzureMonitorExporter;

// Connection string from APPLICATIONINSIGHTS_CONNECTION_STRING env var
AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
AzureMonitorExporter.customize(sdkBuilder);
OpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();

With Explicit Connection String

AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
AzureMonitorExporter.customize(sdkBuilder, "{connection-string}");
OpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();

Creating Spans

import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Scope;

// Get tracer
Tracer tracer = openTelemetry.getTracer("com.example.myapp");

// Create span
Span span = tracer.spanBuilder("myOperation").startSpan();

try (Scope scope = span.makeCurrent()) {
    // Your application logic
    doWork();
} catch (Throwable t) {
    span.recordException(t);
    throw t;
} finally {
    span.end();
}

Adding Span Attributes

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;

Span span = tracer.spanBuilder("processOrder")
    .setAttribute("order.id", "12345")
    .setAttribute("customer.tier", "premium")
    .startSpan();

try (Scope scope = span.makeCurrent()) {
    // Add attributes during execution
    span.setAttribute("items.count", 3);
    span.setAttribute("total.amount", 99.99);
    
    processOrder();
} finally {
    span.end();
}

Custom Span Processor

import io.opentelemetry.sdk.trace.SpanProcessor;
import io.opentelemetry.sdk.trace.ReadWriteSpan;
import io.opentelemetry.sdk.trace.ReadableSpan;
import io.opentelemetry.context.Context;

private static final AttributeKey<String> CUSTOM_ATTR = AttributeKey.stringKey("custom.attribute");

SpanProcessor customProcessor = new SpanProcessor() {
    @Override
    public void onStart(Context context, ReadWriteSpan span) {
        // Add custom attribute to every span
        span.setAttribute(CUSTOM_ATTR, "customValue");
    }

    @Override
    public boolean isStartRequired() {
        return true;
    }

    @Override
    public void onEnd(ReadableSpan span) {
        // Post-processing if needed
    }

    @Override
    public boolean isEndRequired() {
        return false;
    }
};

// Register processor
AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
AzureMonitorExporter.customize(sdkBuilder);

sdkBuilder.addTracerProviderCustomizer(
    (sdkTracerProviderBuilder, configProperties) -> 
        sdkTracerProviderBuilder.addSpanProcessor(customProcessor)
);

OpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();

Nested Spans

public void parentOperation() {
    Span parentSpan = tracer.spanBuilder("parentOperation").startSpan();
    try (Scope scope = parentSpan.makeCurrent()) {
        childOperation();
    } finally {
        parentSpan.end();
    }
}

public void childOperation() {
    // Automatically links to parent via Context
    Span childSpan = tracer.spanBuilder("childOperation").startSpan();
    try (Scope scope = childSpan.makeCurrent()) {
        // Child work
    } finally {
        childSpan.end();
    }
}

Recording Exceptions

Span span = tracer.spanBuilder("riskyOperation").startSpan();
try (Scope scope = span.makeCurrent()) {
    performRiskyWork();
} catch (Exception e) {
    span.recordException(e);
    span.setStatus(StatusCode.ERROR, e.getMessage());
    throw e;
} finally {
    span.end();
}

Metrics (via OpenTelemetry)

import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.LongHistogram;

Meter meter = openTelemetry.getMeter("com.example.myapp");

// Counter
LongCounter requestCounter = meter.counterBuilder("http.requests")
    .setDescription("Total HTTP requests")
    .setUnit("requests")
    .build();

requestCounter.add(1, Attributes.of(
    AttributeKey.stringKey("http.method"), "GET",
    AttributeKey.longKey("http.status_code"), 200L
));

// Histogram
LongHistogram latencyHistogram = meter.histogramBuilder("http.latency")
    .setDescription("Request latency")
    .setUnit("ms")
    .ofLongs()
    .build();

latencyHistogram.record(150, Attributes.of(
    AttributeKey.stringKey("http.route"), "/api/users"
));

Key Concepts

Concept Description
Connection String Application Insights connection string with instrumentation key
Tracer Creates spans for distributed tracing
Span Represents a unit of work with timing and attributes
SpanProcessor Intercepts span lifecycle for customization
Exporter Sends telemetry to Azure Monitor

Migration to Autoconfigure

The azure-monitor-opentelemetry-autoconfigure package provides:

  • Automatic instrumentation of common libraries
  • Simplified configuration
  • Better integration with OpenTelemetry SDK

Migration Steps

  1. Replace dependency:

    <!-- Remove -->
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-monitor-opentelemetry-exporter</artifactId>
    </dependency>
    
    <!-- Add -->
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-monitor-opentelemetry-autoconfigure</artifactId>
    </dependency>
    
  2. Update initialization code per Migration Guide

Best Practices

  1. Use autoconfigure — Migrate to azure-monitor-opentelemetry-autoconfigure
  2. Set meaningful span names — Use descriptive operation names
  3. Add relevant attributes — Include contextual data for debugging
  4. Handle exceptions — Always record exceptions on spans
  5. Use semantic conventions — Follow OpenTelemetry semantic conventions
  6. End spans in finally — Ensure spans are always ended
  7. Use try-with-resources — Scope management with try-with-resources pattern

Reference Links

Resource URL
Maven Package https://central.sonatype.com/artifact/com.azure/azure-monitor-opentelemetry-exporter
GitHub https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/monitor/azure-monitor-opentelemetry-exporter
Migration Guide https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/monitor/azure-monitor-opentelemetry-exporter/MIGRATION.md
Autoconfigure Package https://central.sonatype.com/artifact/com.azure/azure-monitor-opentelemetry-autoconfigure
OpenTelemetry Java https://opentelemetry.io/docs/languages/java/
Application Insights https://learn.microsoft.com/azure/azure-monitor/app/app-insights-overview
Files (skills)
  • references
    • examples.md 5.4 KB
      # Azure Monitor OpenTelemetry Exporter Java - Migration Guide
      
      > **⚠️ DEPRECATION NOTICE**: This package (`azure-monitor-opentelemetry-exporter`) is deprecated.
      >
      > **Migrate to `azure-monitor-opentelemetry-autoconfigure`** for automatic instrumentation and simplified configuration.
      
      ## Migration Overview
      
      | Old Package | New Package |
      |-------------|-------------|
      | `azure-monitor-opentelemetry-exporter` | `azure-monitor-opentelemetry-autoconfigure` |
      
      ## Maven Dependency
      
      ### Remove (Deprecated)
      
      ```xml
      <!-- REMOVE THIS -->
      <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-monitor-opentelemetry-exporter</artifactId>
          <version>1.0.0-beta.x</version>
      </dependency>
      ```
      
      ### Add (Recommended)
      
      ```xml
      <!-- ADD THIS -->
      <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-monitor-opentelemetry-autoconfigure</artifactId>
          <version>1.0.0</version>
      </dependency>
      ```
      
      ## Environment Variables
      
      ```bash
      APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/
      ```
      
      ## Basic Setup with Autoconfigure
      
      ### Using Environment Variable (Simplest)
      
      ```java
      import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
      import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder;
      import io.opentelemetry.api.OpenTelemetry;
      import com.azure.monitor.opentelemetry.exporter.AzureMonitorExporter;
      
      // Connection string from APPLICATIONINSIGHTS_CONNECTION_STRING env var
      AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
      AzureMonitorExporter.customize(sdkBuilder);
      OpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();
      ```
      
      ### With Explicit Connection String
      
      ```java
      String connectionString = System.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING");
      
      AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
      AzureMonitorExporter.customize(sdkBuilder, connectionString);
      OpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();
      ```
      
      ## Creating Traces
      
      ```java
      import io.opentelemetry.api.trace.Tracer;
      import io.opentelemetry.api.trace.Span;
      import io.opentelemetry.context.Scope;
      
      // Get tracer
      Tracer tracer = openTelemetry.getTracer("com.example.myapp");
      
      // Create span
      Span span = tracer.spanBuilder("processOrder").startSpan();
      
      try (Scope scope = span.makeCurrent()) {
          // Your application logic
          span.setAttribute("order.id", "12345");
          span.setAttribute("customer.tier", "premium");
          
          processOrder();
      } catch (Throwable t) {
          span.recordException(t);
          throw t;
      } finally {
          span.end();
      }
      ```
      
      ## Creating Metrics
      
      ```java
      import io.opentelemetry.api.metrics.Meter;
      import io.opentelemetry.api.metrics.LongCounter;
      import io.opentelemetry.api.common.Attributes;
      import io.opentelemetry.api.common.AttributeKey;
      
      Meter meter = openTelemetry.getMeter("com.example.myapp");
      
      // Counter
      LongCounter requestCounter = meter.counterBuilder("http.requests")
          .setDescription("Total HTTP requests")
          .setUnit("requests")
          .build();
      
      requestCounter.add(1, Attributes.of(
          AttributeKey.stringKey("http.method"), "GET",
          AttributeKey.longKey("http.status_code"), 200L
      ));
      ```
      
      ## Custom Span Processor
      
      ```java
      import io.opentelemetry.sdk.trace.SpanProcessor;
      import io.opentelemetry.sdk.trace.ReadWriteSpan;
      import io.opentelemetry.sdk.trace.ReadableSpan;
      import io.opentelemetry.context.Context;
      
      SpanProcessor customProcessor = new SpanProcessor() {
          @Override
          public void onStart(Context context, ReadWriteSpan span) {
              span.setAttribute("custom.attribute", "value");
          }
      
          @Override
          public boolean isStartRequired() { return true; }
      
          @Override
          public void onEnd(ReadableSpan span) { }
      
          @Override
          public boolean isEndRequired() { return false; }
      };
      
      AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
      AzureMonitorExporter.customize(sdkBuilder);
      
      sdkBuilder.addTracerProviderCustomizer(
          (sdkTracerProviderBuilder, configProperties) -> 
              sdkTracerProviderBuilder.addSpanProcessor(customProcessor)
      );
      
      OpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();
      ```
      
      ## Why Migrate?
      
      The `azure-monitor-opentelemetry-autoconfigure` package provides:
      
      1. **Automatic instrumentation** — Common libraries instrumented automatically
      2. **Simplified configuration** — Less boilerplate code
      3. **Better integration** — Native OpenTelemetry SDK integration
      4. **Active maintenance** — Ongoing updates and improvements
      5. **Production ready** — GA (Generally Available) status
      
      ## Migration Steps Summary
      
      1. Update Maven/Gradle dependency
      2. Replace manual exporter setup with `AzureMonitorExporter.customize()`
      3. Use `AutoConfiguredOpenTelemetrySdk.builder()` for SDK initialization
      4. Remove manual span processor registration (unless custom processors needed)
      5. Set `APPLICATIONINSIGHTS_CONNECTION_STRING` environment variable
      
      ## Reference Links
      
      | Resource | URL |
      |----------|-----|
      | Migration Guide | https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/monitor/azure-monitor-opentelemetry-exporter/MIGRATION.md |
      | Autoconfigure Package | https://central.sonatype.com/artifact/com.azure/azure-monitor-opentelemetry-autoconfigure |
      | OpenTelemetry Java | https://opentelemetry.io/docs/languages/java/ |
      | Application Insights | https://learn.microsoft.com/azure/azure-monitor/app/app-insights-overview |
      
  • SKILL.md 8.6 KB
    ---
    name: azure-monitor-opentelemetry-exporter-java
    description: |
      Azure Monitor OpenTelemetry Exporter for Java. Export OpenTelemetry traces, metrics, and logs to Azure Monitor/Application Insights.
      Triggers: "AzureMonitorExporter java", "opentelemetry azure java", "application insights java otel", "azure monitor tracing java".
      Note: This package is DEPRECATED. Migrate to azure-monitor-opentelemetry-autoconfigure.
    license: MIT
    metadata:
      author: Microsoft
      version: "1.0.0"
      package: com.azure:azure-monitor-opentelemetry-exporter
    ---
    
    # Azure Monitor OpenTelemetry Exporter for Java
    
    > **⚠️ DEPRECATION NOTICE**: This package is deprecated. Migrate to `azure-monitor-opentelemetry-autoconfigure`.
    >
    > See [Migration Guide](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/monitor/azure-monitor-opentelemetry-exporter/MIGRATION.md) for detailed instructions.
    
    Export OpenTelemetry telemetry data to Azure Monitor / Application Insights.
    
    ## Installation (Deprecated)
    
    ```xml
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-monitor-opentelemetry-exporter</artifactId>
        <version>1.0.0-beta.x</version>
    </dependency>
    ```
    
    ## Recommended: Use Autoconfigure Instead
    
    ```xml
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-monitor-opentelemetry-autoconfigure</artifactId>
        <version>LATEST</version>
    </dependency>
    ```
    
    ## Environment Variables
    
    ```bash
    APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/
    ```
    
    ## Basic Setup with Autoconfigure (Recommended)
    
    ### Using Environment Variable
    
    ```java
    import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
    import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder;
    import io.opentelemetry.api.OpenTelemetry;
    import com.azure.monitor.opentelemetry.exporter.AzureMonitorExporter;
    
    // Connection string from APPLICATIONINSIGHTS_CONNECTION_STRING env var
    AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
    AzureMonitorExporter.customize(sdkBuilder);
    OpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();
    ```
    
    ### With Explicit Connection String
    
    ```java
    AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
    AzureMonitorExporter.customize(sdkBuilder, "{connection-string}");
    OpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();
    ```
    
    ## Creating Spans
    
    ```java
    import io.opentelemetry.api.trace.Tracer;
    import io.opentelemetry.api.trace.Span;
    import io.opentelemetry.context.Scope;
    
    // Get tracer
    Tracer tracer = openTelemetry.getTracer("com.example.myapp");
    
    // Create span
    Span span = tracer.spanBuilder("myOperation").startSpan();
    
    try (Scope scope = span.makeCurrent()) {
        // Your application logic
        doWork();
    } catch (Throwable t) {
        span.recordException(t);
        throw t;
    } finally {
        span.end();
    }
    ```
    
    ## Adding Span Attributes
    
    ```java
    import io.opentelemetry.api.common.AttributeKey;
    import io.opentelemetry.api.common.Attributes;
    
    Span span = tracer.spanBuilder("processOrder")
        .setAttribute("order.id", "12345")
        .setAttribute("customer.tier", "premium")
        .startSpan();
    
    try (Scope scope = span.makeCurrent()) {
        // Add attributes during execution
        span.setAttribute("items.count", 3);
        span.setAttribute("total.amount", 99.99);
        
        processOrder();
    } finally {
        span.end();
    }
    ```
    
    ## Custom Span Processor
    
    ```java
    import io.opentelemetry.sdk.trace.SpanProcessor;
    import io.opentelemetry.sdk.trace.ReadWriteSpan;
    import io.opentelemetry.sdk.trace.ReadableSpan;
    import io.opentelemetry.context.Context;
    
    private static final AttributeKey<String> CUSTOM_ATTR = AttributeKey.stringKey("custom.attribute");
    
    SpanProcessor customProcessor = new SpanProcessor() {
        @Override
        public void onStart(Context context, ReadWriteSpan span) {
            // Add custom attribute to every span
            span.setAttribute(CUSTOM_ATTR, "customValue");
        }
    
        @Override
        public boolean isStartRequired() {
            return true;
        }
    
        @Override
        public void onEnd(ReadableSpan span) {
            // Post-processing if needed
        }
    
        @Override
        public boolean isEndRequired() {
            return false;
        }
    };
    
    // Register processor
    AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
    AzureMonitorExporter.customize(sdkBuilder);
    
    sdkBuilder.addTracerProviderCustomizer(
        (sdkTracerProviderBuilder, configProperties) -> 
            sdkTracerProviderBuilder.addSpanProcessor(customProcessor)
    );
    
    OpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();
    ```
    
    ## Nested Spans
    
    ```java
    public void parentOperation() {
        Span parentSpan = tracer.spanBuilder("parentOperation").startSpan();
        try (Scope scope = parentSpan.makeCurrent()) {
            childOperation();
        } finally {
            parentSpan.end();
        }
    }
    
    public void childOperation() {
        // Automatically links to parent via Context
        Span childSpan = tracer.spanBuilder("childOperation").startSpan();
        try (Scope scope = childSpan.makeCurrent()) {
            // Child work
        } finally {
            childSpan.end();
        }
    }
    ```
    
    ## Recording Exceptions
    
    ```java
    Span span = tracer.spanBuilder("riskyOperation").startSpan();
    try (Scope scope = span.makeCurrent()) {
        performRiskyWork();
    } catch (Exception e) {
        span.recordException(e);
        span.setStatus(StatusCode.ERROR, e.getMessage());
        throw e;
    } finally {
        span.end();
    }
    ```
    
    ## Metrics (via OpenTelemetry)
    
    ```java
    import io.opentelemetry.api.metrics.Meter;
    import io.opentelemetry.api.metrics.LongCounter;
    import io.opentelemetry.api.metrics.LongHistogram;
    
    Meter meter = openTelemetry.getMeter("com.example.myapp");
    
    // Counter
    LongCounter requestCounter = meter.counterBuilder("http.requests")
        .setDescription("Total HTTP requests")
        .setUnit("requests")
        .build();
    
    requestCounter.add(1, Attributes.of(
        AttributeKey.stringKey("http.method"), "GET",
        AttributeKey.longKey("http.status_code"), 200L
    ));
    
    // Histogram
    LongHistogram latencyHistogram = meter.histogramBuilder("http.latency")
        .setDescription("Request latency")
        .setUnit("ms")
        .ofLongs()
        .build();
    
    latencyHistogram.record(150, Attributes.of(
        AttributeKey.stringKey("http.route"), "/api/users"
    ));
    ```
    
    ## Key Concepts
    
    | Concept | Description |
    |---------|-------------|
    | Connection String | Application Insights connection string with instrumentation key |
    | Tracer | Creates spans for distributed tracing |
    | Span | Represents a unit of work with timing and attributes |
    | SpanProcessor | Intercepts span lifecycle for customization |
    | Exporter | Sends telemetry to Azure Monitor |
    
    ## Migration to Autoconfigure
    
    The `azure-monitor-opentelemetry-autoconfigure` package provides:
    - Automatic instrumentation of common libraries
    - Simplified configuration
    - Better integration with OpenTelemetry SDK
    
    ### Migration Steps
    
    1. Replace dependency:
       ```xml
       <!-- Remove -->
       <dependency>
           <groupId>com.azure</groupId>
           <artifactId>azure-monitor-opentelemetry-exporter</artifactId>
       </dependency>
       
       <!-- Add -->
       <dependency>
           <groupId>com.azure</groupId>
           <artifactId>azure-monitor-opentelemetry-autoconfigure</artifactId>
       </dependency>
       ```
    
    2. Update initialization code per [Migration Guide](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/monitor/azure-monitor-opentelemetry-exporter/MIGRATION.md)
    
    ## Best Practices
    
    1. **Use autoconfigure** — Migrate to `azure-monitor-opentelemetry-autoconfigure`
    2. **Set meaningful span names** — Use descriptive operation names
    3. **Add relevant attributes** — Include contextual data for debugging
    4. **Handle exceptions** — Always record exceptions on spans
    5. **Use semantic conventions** — Follow OpenTelemetry semantic conventions
    6. **End spans in finally** — Ensure spans are always ended
    7. **Use try-with-resources** — Scope management with try-with-resources pattern
    
    ## Reference Links
    
    | Resource | URL |
    |----------|-----|
    | Maven Package | https://central.sonatype.com/artifact/com.azure/azure-monitor-opentelemetry-exporter |
    | GitHub | https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/monitor/azure-monitor-opentelemetry-exporter |
    | Migration Guide | https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/monitor/azure-monitor-opentelemetry-exporter/MIGRATION.md |
    | Autoconfigure Package | https://central.sonatype.com/artifact/com.azure/azure-monitor-opentelemetry-autoconfigure |
    | OpenTelemetry Java | https://opentelemetry.io/docs/languages/java/ |
    | Application Insights | https://learn.microsoft.com/azure/azure-monitor/app/app-insights-overview |
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related