[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-b97453ed-4d75-481a-9bc5-e9bff32114c8":3,"$fHN4bkg3pbDZBHDUAF2Z0EGt4SHZdC7yREVS2VDQBHyg":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"b97453ed-4d75-481a-9bc5-e9bff32114c8","azure-monitor-opentelemetry-exporter-java","Azure Monitor OpenTelemetry 导出器 for Java。将 OpenTelemetry 跟踪、指标和日志导出到 Azure Monitor\u002F应用洞察。","cat_coding_devops","mod_coding","sickn33,coding","---\nname: azure-monitor-opentelemetry-exporter-java\ndescription: Azure Monitor OpenTelemetry Exporter for Java. Export OpenTelemetry traces, metrics, and logs to Azure Monitor\u002FApplication Insights.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# Azure Monitor OpenTelemetry Exporter for Java\n\n> **⚠️ DEPRECATION NOTICE**: This package is deprecated. Migrate to `azure-monitor-opentelemetry-autoconfigure`.\n>\n> See [Migration Guide](https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Fblob\u002Fmain\u002Fsdk\u002Fmonitor\u002Fazure-monitor-opentelemetry-exporter\u002FMIGRATION.md) for detailed instructions.\n\nExport OpenTelemetry telemetry data to Azure Monitor \u002F Application Insights.\n\n## Installation (Deprecated)\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.azure\u003C\u002FgroupId>\n    \u003CartifactId>azure-monitor-opentelemetry-exporter\u003C\u002FartifactId>\n    \u003Cversion>1.0.0-beta.x\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n## Recommended: Use Autoconfigure Instead\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.azure\u003C\u002FgroupId>\n    \u003CartifactId>azure-monitor-opentelemetry-autoconfigure\u003C\u002FartifactId>\n    \u003Cversion>LATEST\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n## Environment Variables\n\n```bash\nAPPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https:\u002F\u002Fxxx.in.applicationinsights.azure.com\u002F\n```\n\n## Basic Setup with Autoconfigure (Recommended)\n\n### Using Environment Variable\n\n```java\nimport io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;\nimport io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder;\nimport io.opentelemetry.api.OpenTelemetry;\nimport com.azure.monitor.opentelemetry.exporter.AzureMonitorExporter;\n\n\u002F\u002F Connection string from APPLICATIONINSIGHTS_CONNECTION_STRING env var\nAutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();\nAzureMonitorExporter.customize(sdkBuilder);\nOpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();\n```\n\n### With Explicit Connection String\n\n```java\nAutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();\nAzureMonitorExporter.customize(sdkBuilder, \"{connection-string}\");\nOpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();\n```\n\n## Creating Spans\n\n```java\nimport io.opentelemetry.api.trace.Tracer;\nimport io.opentelemetry.api.trace.Span;\nimport io.opentelemetry.context.Scope;\n\n\u002F\u002F Get tracer\nTracer tracer = openTelemetry.getTracer(\"com.example.myapp\");\n\n\u002F\u002F Create span\nSpan span = tracer.spanBuilder(\"myOperation\").startSpan();\n\ntry (Scope scope = span.makeCurrent()) {\n    \u002F\u002F Your application logic\n    doWork();\n} catch (Throwable t) {\n    span.recordException(t);\n    throw t;\n} finally {\n    span.end();\n}\n```\n\n## Adding Span Attributes\n\n```java\nimport io.opentelemetry.api.common.AttributeKey;\nimport io.opentelemetry.api.common.Attributes;\n\nSpan span = tracer.spanBuilder(\"processOrder\")\n    .setAttribute(\"order.id\", \"12345\")\n    .setAttribute(\"customer.tier\", \"premium\")\n    .startSpan();\n\ntry (Scope scope = span.makeCurrent()) {\n    \u002F\u002F Add attributes during execution\n    span.setAttribute(\"items.count\", 3);\n    span.setAttribute(\"total.amount\", 99.99);\n    \n    processOrder();\n} finally {\n    span.end();\n}\n```\n\n## Custom Span Processor\n\n```java\nimport io.opentelemetry.sdk.trace.SpanProcessor;\nimport io.opentelemetry.sdk.trace.ReadWriteSpan;\nimport io.opentelemetry.sdk.trace.ReadableSpan;\nimport io.opentelemetry.context.Context;\n\nprivate static final AttributeKey\u003CString> CUSTOM_ATTR = AttributeKey.stringKey(\"custom.attribute\");\n\nSpanProcessor customProcessor = new SpanProcessor() {\n    @Override\n    public void onStart(Context context, ReadWriteSpan span) {\n        \u002F\u002F Add custom attribute to every span\n        span.setAttribute(CUSTOM_ATTR, \"customValue\");\n    }\n\n    @Override\n    public boolean isStartRequired() {\n        return true;\n    }\n\n    @Override\n    public void onEnd(ReadableSpan span) {\n        \u002F\u002F Post-processing if needed\n    }\n\n    @Override\n    public boolean isEndRequired() {\n        return false;\n    }\n};\n\n\u002F\u002F Register processor\nAutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();\nAzureMonitorExporter.customize(sdkBuilder);\n\nsdkBuilder.addTracerProviderCustomizer(\n    (sdkTracerProviderBuilder, configProperties) -> \n        sdkTracerProviderBuilder.addSpanProcessor(customProcessor)\n);\n\nOpenTelemetry openTelemetry = sdkBuilder.build().getOpenTelemetrySdk();\n```\n\n## Nested Spans\n\n```java\npublic void parentOperation() {\n    Span parentSpan = tracer.spanBuilder(\"parentOperation\").startSpan();\n    try (Scope scope = parentSpan.makeCurrent()) {\n        childOperation();\n    } finally {\n        parentSpan.end();\n    }\n}\n\npublic void childOperation() {\n    \u002F\u002F Automatically links to parent via Context\n    Span childSpan = tracer.spanBuilder(\"childOperation\").startSpan();\n    try (Scope scope = childSpan.makeCurrent()) {\n        \u002F\u002F Child work\n    } finally {\n        childSpan.end();\n    }\n}\n```\n\n## Recording Exceptions\n\n```java\nSpan span = tracer.spanBuilder(\"riskyOperation\").startSpan();\ntry (Scope scope = span.makeCurrent()) {\n    performRiskyWork();\n} catch (Exception e) {\n    span.recordException(e);\n    span.setStatus(StatusCode.ERROR, e.getMessage());\n    throw e;\n} finally {\n    span.end();\n}\n```\n\n## Metrics (via OpenTelemetry)\n\n```java\nimport io.opentelemetry.api.metrics.Meter;\nimport io.opentelemetry.api.metrics.LongCounter;\nimport io.opentelemetry.api.metrics.LongHistogram;\n\nMeter meter = openTelemetry.getMeter(\"com.example.myapp\");\n\n\u002F\u002F Counter\nLongCounter requestCounter = meter.counterBuilder(\"http.requests\")\n    .setDescription(\"Total HTTP requests\")\n    .setUnit(\"requests\")\n    .build();\n\nrequestCounter.add(1, Attributes.of(\n    AttributeKey.stringKey(\"http.method\"), \"GET\",\n    AttributeKey.longKey(\"http.status_code\"), 200L\n));\n\n\u002F\u002F Histogram\nLongHistogram latencyHistogram = meter.histogramBuilder(\"http.latency\")\n    .setDescription(\"Request latency\")\n    .setUnit(\"ms\")\n    .ofLongs()\n    .build();\n\nlatencyHistogram.record(150, Attributes.of(\n    AttributeKey.stringKey(\"http.route\"), \"\u002Fapi\u002Fusers\"\n));\n```\n\n## Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| Connection String | Application Insights connection string with instrumentation key |\n| Tracer | Creates spans for distributed tracing |\n| Span | Represents a unit of work with timing and attributes |\n| SpanProcessor | Intercepts span lifecycle for customization |\n| Exporter | Sends telemetry to Azure Monitor |\n\n## Migration to Autoconfigure\n\nThe `azure-monitor-opentelemetry-autoconfigure` package provides:\n- Automatic instrumentation of common libraries\n- Simplified configuration\n- Better integration with OpenTelemetry SDK\n\n### Migration Steps\n\n1. Replace dependency:\n   ```xml\n   \u003C!-- Remove -->\n   \u003Cdependency>\n       \u003CgroupId>com.azure\u003C\u002FgroupId>\n       \u003CartifactId>azure-monitor-opentelemetry-exporter\u003C\u002FartifactId>\n   \u003C\u002Fdependency>\n   \n   \u003C!-- Add -->\n   \u003Cdependency>\n       \u003CgroupId>com.azure\u003C\u002FgroupId>\n       \u003CartifactId>azure-monitor-opentelemetry-autoconfigure\u003C\u002FartifactId>\n   \u003C\u002Fdependency>\n   ```\n\n2. Update initialization code per [Migration Guide](https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Fblob\u002Fmain\u002Fsdk\u002Fmonitor\u002Fazure-monitor-opentelemetry-exporter\u002FMIGRATION.md)\n\n## Best Practices\n\n1. **Use autoconfigure** — Migrate to `azure-monitor-opentelemetry-autoconfigure`\n2. **Set meaningful span names** — Use descriptive operation names\n3. **Add relevant attributes** — Include contextual data for debugging\n4. **Handle exceptions** — Always record exceptions on spans\n5. **Use semantic conventions** — Follow OpenTelemetry semantic conventions\n6. **End spans in finally** — Ensure spans are always ended\n7. **Use try-with-resources** — Scope management with try-with-resources pattern\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| Maven Package | https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fcom.azure\u002Fazure-monitor-opentelemetry-exporter |\n| GitHub | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Ftree\u002Fmain\u002Fsdk\u002Fmonitor\u002Fazure-monitor-opentelemetry-exporter |\n| Migration Guide | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Fblob\u002Fmain\u002Fsdk\u002Fmonitor\u002Fazure-monitor-opentelemetry-exporter\u002FMIGRATION.md |\n| Autoconfigure Package | https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fcom.azure\u002Fazure-monitor-opentelemetry-autoconfigure |\n| OpenTelemetry Java | https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Flanguages\u002Fjava\u002F |\n| Application Insights | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fazure-monitor\u002Fapp\u002Fapp-insights-overview |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,152,1502,"2026-05-16 13:07:13",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"编程开发","coding","mdi-code-braces","代码生成、调试、审查，提升开发效率",2,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"DevOps","devops","mdi-cog-outline","CI\u002FCD、容器化、部署运维",3,162,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"c08b274c-eb05-4d7c-8707-040ec37a0ee8","1.0.0","azure-monitor-opentelemetry-exporter-java.zip",2911,"uploads\u002Fskills\u002Fb97453ed-4d75-481a-9bc5-e9bff32114c8\u002Fazure-monitor-opentelemetry-exporter-java.zip","eadac35d8dc04c0cfbdd929dcdb8b0f15f8dec6eb08fef8f2fd0f8fcb2efb3db","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":8904}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]