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- 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
How to use observability-edot-dotnet-instrument
- 1.Install NuGet packages: Elastic.OpenTelemetry and OpenTelemetry.Instrumentation.AspNetCore (for ASP.NET Core)
- 2.Call builder.AddElasticOpenTelemetry() on the IHostApplicationBuilder in Program.cs or equivalent startup code
- 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.Verify telemetry is being collected by checking your Elastic instance for traces and metrics
- 5.Do not set OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER, or OTEL_LOGS_EXPORTER as defaults are correct
Use cases
- 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
- 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
No. Never run both the classic Elastic APM agent (Elastic.Apm.*) and EDOT on the same application, as this will cause conflicts.
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).
No. The AddElasticOpenTelemetry() method handles all configuration automatically. Manual configuration is not needed and may conflict.
The Elastic.OpenTelemetry package works with any .NET application. The OpenTelemetry.Instrumentation.AspNetCore package is only needed for ASP.NET Core apps.
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
- Add NuGet packages:
Elastic.OpenTelemetryandOpenTelemetry.Instrumentation.AspNetCore(for ASP.NET Core apps) - Register EDOT in startup: call
builder.AddElasticOpenTelemetry()on theIHostApplicationBuilder(inProgram.csor equivalent). Without this, no telemetry is collected - Set exactly three required environment variables:
OTEL_SERVICE_NAMEOTEL_EXPORTER_OTLP_ENDPOINT— must be the managed OTLP endpoint or EDOT Collector URL. Never use an APM Server URL (noapm-server, no:8200, no/intake/v2/events)OTEL_EXPORTER_OTLP_HEADERS—"Authorization=ApiKey <key>"or"Authorization=Bearer <token>"
- Do NOT set
OTEL_TRACES_EXPORTER,OTEL_METRICS_EXPORTER, orOTEL_LOGS_EXPORTER— the defaults are already correct - Do NOT manually configure
TracerProviderorMeterProvider—AddElasticOpenTelemetry()handles everything - 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.
Related skills
More from elastic/agent-skills and the wider catalog.

observability-edot-dotnet-migrate
Migrate .NET applications from classic Elastic APM agent to EDOT .NET SDK

observability-edot-java-instrument
Instrument Java applications with Elastic's OpenTelemetry agent for automatic tracing, metrics, and logs.

observability-edot-java-migrate
Migrate Java applications from classic Elastic APM agent to EDOT Java agent.

observability-edot-python-instrument
Instrument Python apps with Elastic Distribution of OpenTelemetry for automatic tracing, metrics, and logs.

observability-edot-python-migrate
Migrate Python applications from classic Elastic APM agent to EDOT Python agent.

observability-k8s-investigation
>