PluginBench
Skill
Pass
Audit score 90

observability-edot-dotnet-instrument

elastic/agent-skills

Instrument .NET applications with Elastic Distribution of OpenTelemetry for automatic tracing, metrics, and logs.

What is observability-edot-dotnet-instrument?

Adds automatic observability to .NET services using the Elastic Distribution of OpenTelemetry (EDOT) .NET SDK. Use this when you need to enable tracing, metrics, and logging collection on a .NET application that doesn't already have an APM agent installed.

  • Automatically collects distributed traces from .NET applications
  • Gathers metrics and performance data without manual instrumentation
  • Captures application logs and correlates them with traces
  • Supports ASP.NET Core applications with built-in instrumentation
  • Exports telemetry to Elastic's managed OTLP endpoint or EDOT Collector
  • Requires minimal code changes to existing .NET projects

How to install observability-edot-dotnet-instrument

npx skills add https://github.com/elastic/agent-skills --skill observability-edot-dotnet-instrument
Prerequisites
  • A .NET application (Framework or Core)
  • Access to Elastic Cloud or an EDOT Collector endpoint
  • OTLP API key or authentication token for your Elastic instance
Claude Code
Cursor
Windsurf
Cline

How to use observability-edot-dotnet-instrument

  1. 1.Install NuGet packages: Elastic.OpenTelemetry and OpenTelemetry.Instrumentation.AspNetCore (for ASP.NET Core)
  2. 2.Call builder.AddElasticOpenTelemetry() on the IHostApplicationBuilder in Program.cs or equivalent startup code
  3. 3.Set three required environment variables: OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT (managed OTLP endpoint URL), and OTEL_EXPORTER_OTLP_HEADERS with authorization
  4. 4.Verify telemetry is being collected by checking your Elastic instance for traces and metrics
  5. 5.Do not set OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER, or OTEL_LOGS_EXPORTER as defaults are correct

Use cases

Good for
  • Adding observability to a new .NET microservice before deployment
  • Enabling tracing on an existing .NET application without an APM agent
  • Monitoring ASP.NET Core web applications in production
  • Collecting metrics and logs alongside distributed traces for a .NET service
  • Migrating from manual instrumentation to automatic EDOT collection
Who it's for
  • Backend engineers building or maintaining .NET services
  • DevOps teams setting up observability for .NET applications
  • Teams using Elastic Cloud for centralized monitoring
  • Developers working with ASP.NET Core applications

observability-edot-dotnet-instrument FAQ

Can I use EDOT alongside the classic Elastic APM agent?

No. Never run both the classic Elastic APM agent (Elastic.Apm.*) and EDOT on the same application, as this will cause conflicts.

What endpoint should I use for OTEL_EXPORTER_OTLP_ENDPOINT?

Use the managed OTLP endpoint or EDOT Collector URL provided by your Elastic instance. Never use an APM Server URL (no apm-server, no :8200, no /intake/v2/events).

Do I need to manually configure TracerProvider or MeterProvider?

No. The AddElasticOpenTelemetry() method handles all configuration automatically. Manual configuration is not needed and may conflict.

What if my application is not ASP.NET Core?

The Elastic.OpenTelemetry package works with any .NET application. The OpenTelemetry.Instrumentation.AspNetCore package is only needed for ASP.NET Core apps.

Where can I find complete setup examples?

Refer to the EDOT .NET setup guide at https://www.elastic.co/docs/reference/opentelemetry/edot-sdks/dotnet/setup for complete examples and configuration details.

Full instructions (SKILL.md)

Source of truth, from elastic/agent-skills.


name: observability-edot-dotnet-instrument description: > Instrument a .NET application with the Elastic Distribution of OpenTelemetry (EDOT) .NET SDK for automatic tracing, metrics, and logs. Use when adding observability to a .NET service that has no existing APM agent. metadata: author: elastic version: 0.1.0

EDOT .NET Instrumentation

Read the setup guide before making changes:

Guidelines

  1. Add NuGet packages: Elastic.OpenTelemetry and OpenTelemetry.Instrumentation.AspNetCore (for ASP.NET Core apps)
  2. Register EDOT in startup: call builder.AddElasticOpenTelemetry() on the IHostApplicationBuilder (in Program.cs or equivalent). Without this, no telemetry is collected
  3. Set exactly three required environment variables:
    • OTEL_SERVICE_NAME
    • OTEL_EXPORTER_OTLP_ENDPOINT — must be the managed OTLP endpoint or EDOT Collector URL. Never use an APM Server URL (no apm-server, no :8200, no /intake/v2/events)
    • OTEL_EXPORTER_OTLP_HEADERS"Authorization=ApiKey <key>" or "Authorization=Bearer <token>"
  4. Do NOT set OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER, or OTEL_LOGS_EXPORTER — the defaults are already correct
  5. Do NOT manually configure TracerProvider or MeterProviderAddElasticOpenTelemetry() handles everything
  6. Never run both classic Elastic APM agent (Elastic.Apm.*) and EDOT on the same application

Examples

See the EDOT .NET setup guide for complete examples.