diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/Elastic.OpenTelemetry.sln b/Elastic.OpenTelemetry.sln
index 0aacad7..dab4d7d 100644
--- a/Elastic.OpenTelemetry.sln
+++ b/Elastic.OpenTelemetry.sln
@@ -5,8 +5,6 @@ VisualStudioVersion = 17.9.34321.82
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elastic.OpenTelemetry", "src\Elastic.OpenTelemetry\Elastic.OpenTelemetry.csproj", "{79C08F0E-7220-486C-AC0C-E3B287EB0B18}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.Elastic.OpenTelemetry", "examples\Example.Elastic.OpenTelemetry\Example.Elastic.OpenTelemetry.csproj", "{32DF4F56-1773-49E9-A8AE-0573F0AA57DE}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E622CFF2-C6C4-40FB-BE42-7C4F2B38B75A}"
ProjectSection(SolutionItems) = preProject
src\Directory.Build.props = src\Directory.Build.props
@@ -20,20 +18,24 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "docs", "docs\docs.csproj",
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{AAD39891-0B70-47FA-A212-43E1AAE5DF56}"
ProjectSection(SolutionItems) = preProject
+ tests\.runsettings = tests\.runsettings
tests\Directory.Build.props = tests\Directory.Build.props
tests\xunit.runner.json = tests\xunit.runner.json
- tests\.runsettings = tests\.runsettings
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elastic.OpenTelemetry.Tests", "tests\Elastic.OpenTelemetry.Tests\Elastic.OpenTelemetry.Tests.csproj", "{22BF9223-3A6D-4197-8527-3E4E43A98A81}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = ".github", ".github\.github.csproj", "{B701E33D-D777-4BD4-A4EC-1F63FE69AF7A}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.Elastic.OpenTelemetry.AspNetCore", "examples\Example.Elastic.OpenTelemetry.AspNetCore\Example.Elastic.OpenTelemetry.AspNetCore.csproj", "{EC81FA30-C765-4F04-8679-86F16DA3CC65}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elastic.OpenTelemetry.EndToEndTests", "tests\Elastic.OpenTelemetry.EndToEndTests\Elastic.OpenTelemetry.EndToEndTests.csproj", "{B970DBE1-6A04-4014-A285-6A9F36421025}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.MinimalApi", "examples\Example.MinimalApi\Example.MinimalApi.csproj", "{397D7E8D-39C2-41D6-9D4D-F1D35666926A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.AspNetCore.Mvc", "examples\Example.AspNetCore.Mvc\Example.AspNetCore.Mvc.csproj", "{6D7D5234-BE86-46E0-A871-153FE96CD644}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.Elastic.OpenTelemetry.Worker", "examples\Example.Elastic.OpenTelemetry.Worker\Example.Elastic.OpenTelemetry.Worker.csproj", "{4377A059-16E0-4D5D-AC03-44C09BCE5BC4}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.Console", "examples\Example.Console\Example.Console.csproj", "{849FAC2E-8303-4154-8560-31B22194800E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elastic.OpenTelemetry.EndToEndTests", "tests\Elastic.OpenTelemetry.EndToEndTests\Elastic.OpenTelemetry.EndToEndTests.csproj", "{B970DBE1-6A04-4014-A285-6A9F36421025}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.WorkerService", "examples\Example.WorkerService\Example.WorkerService.csproj", "{863CAB86-5EB0-4E9F-B01D-F51687EC6597}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -45,10 +47,6 @@ Global
{79C08F0E-7220-486C-AC0C-E3B287EB0B18}.Debug|Any CPU.Build.0 = Debug|Any CPU
{79C08F0E-7220-486C-AC0C-E3B287EB0B18}.Release|Any CPU.ActiveCfg = Release|Any CPU
{79C08F0E-7220-486C-AC0C-E3B287EB0B18}.Release|Any CPU.Build.0 = Release|Any CPU
- {32DF4F56-1773-49E9-A8AE-0573F0AA57DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {32DF4F56-1773-49E9-A8AE-0573F0AA57DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {32DF4F56-1773-49E9-A8AE-0573F0AA57DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {32DF4F56-1773-49E9-A8AE-0573F0AA57DE}.Release|Any CPU.Build.0 = Release|Any CPU
{872D0721-A4F2-405C-B0AB-036B340F1907}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{872D0721-A4F2-405C-B0AB-036B340F1907}.Debug|Any CPU.Build.0 = Debug|Any CPU
{872D0721-A4F2-405C-B0AB-036B340F1907}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -65,29 +63,38 @@ Global
{B701E33D-D777-4BD4-A4EC-1F63FE69AF7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B701E33D-D777-4BD4-A4EC-1F63FE69AF7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B701E33D-D777-4BD4-A4EC-1F63FE69AF7A}.Release|Any CPU.Build.0 = Release|Any CPU
- {EC81FA30-C765-4F04-8679-86F16DA3CC65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EC81FA30-C765-4F04-8679-86F16DA3CC65}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EC81FA30-C765-4F04-8679-86F16DA3CC65}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EC81FA30-C765-4F04-8679-86F16DA3CC65}.Release|Any CPU.Build.0 = Release|Any CPU
- {4377A059-16E0-4D5D-AC03-44C09BCE5BC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4377A059-16E0-4D5D-AC03-44C09BCE5BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4377A059-16E0-4D5D-AC03-44C09BCE5BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4377A059-16E0-4D5D-AC03-44C09BCE5BC4}.Release|Any CPU.Build.0 = Release|Any CPU
{B970DBE1-6A04-4014-A285-6A9F36421025}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B970DBE1-6A04-4014-A285-6A9F36421025}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B970DBE1-6A04-4014-A285-6A9F36421025}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B970DBE1-6A04-4014-A285-6A9F36421025}.Release|Any CPU.Build.0 = Release|Any CPU
+ {397D7E8D-39C2-41D6-9D4D-F1D35666926A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {397D7E8D-39C2-41D6-9D4D-F1D35666926A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {397D7E8D-39C2-41D6-9D4D-F1D35666926A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {397D7E8D-39C2-41D6-9D4D-F1D35666926A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6D7D5234-BE86-46E0-A871-153FE96CD644}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6D7D5234-BE86-46E0-A871-153FE96CD644}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6D7D5234-BE86-46E0-A871-153FE96CD644}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6D7D5234-BE86-46E0-A871-153FE96CD644}.Release|Any CPU.Build.0 = Release|Any CPU
+ {849FAC2E-8303-4154-8560-31B22194800E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {849FAC2E-8303-4154-8560-31B22194800E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {849FAC2E-8303-4154-8560-31B22194800E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {849FAC2E-8303-4154-8560-31B22194800E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {863CAB86-5EB0-4E9F-B01D-F51687EC6597}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {863CAB86-5EB0-4E9F-B01D-F51687EC6597}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {863CAB86-5EB0-4E9F-B01D-F51687EC6597}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {863CAB86-5EB0-4E9F-B01D-F51687EC6597}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{79C08F0E-7220-486C-AC0C-E3B287EB0B18} = {E622CFF2-C6C4-40FB-BE42-7C4F2B38B75A}
- {32DF4F56-1773-49E9-A8AE-0573F0AA57DE} = {4E95C87B-655B-4BC3-8F2A-DF06B7AAB7E9}
{22BF9223-3A6D-4197-8527-3E4E43A98A81} = {AAD39891-0B70-47FA-A212-43E1AAE5DF56}
- {EC81FA30-C765-4F04-8679-86F16DA3CC65} = {4E95C87B-655B-4BC3-8F2A-DF06B7AAB7E9}
- {4377A059-16E0-4D5D-AC03-44C09BCE5BC4} = {4E95C87B-655B-4BC3-8F2A-DF06B7AAB7E9}
{B970DBE1-6A04-4014-A285-6A9F36421025} = {AAD39891-0B70-47FA-A212-43E1AAE5DF56}
+ {397D7E8D-39C2-41D6-9D4D-F1D35666926A} = {4E95C87B-655B-4BC3-8F2A-DF06B7AAB7E9}
+ {6D7D5234-BE86-46E0-A871-153FE96CD644} = {4E95C87B-655B-4BC3-8F2A-DF06B7AAB7E9}
+ {849FAC2E-8303-4154-8560-31B22194800E} = {4E95C87B-655B-4BC3-8F2A-DF06B7AAB7E9}
+ {863CAB86-5EB0-4E9F-B01D-F51687EC6597} = {4E95C87B-655B-4BC3-8F2A-DF06B7AAB7E9}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {573B2B5F-8CBB-4D52-A55A-4E65E282AAFB}
diff --git a/README.md b/README.md
index 262ead6..5fe4ffa 100644
--- a/README.md
+++ b/README.md
@@ -2,8 +2,163 @@
# Elastic OpenTelemetry Distribution
-This is Elastic's distribution of OpenTelemetry for .NET.
+The `Elastic.OpenTelemetry` package contains an Elastic distribution of the
+[OpenTelemetry SDK for .NET](https://opentelemetry.io/docs/languages/net). A distribution
+is a wrapper around an upstream OpenTelemetry repository with some customizations. For
+more details about distributions in general, visit the
+[OpenTelemetry documentation](https://opentelemetry.io/docs/concepts/distributions).
-## Getting Started
+The Elastic distribution includes some Elastic-specific processors to ensure the best
+compatibility when exporting OpenTelemetry signal data to an Elastic backend such
+as Elastic APM server. The distribution also preconfigures the collection of tracing
+and metrics signals, applying some opinionated defaults, such as which sources are
+collected by default. The distribution also ensures that the OTLP exporter is enabled
+by default.
-TODO
\ No newline at end of file
+The distribution includes extension methods to fully control the creation of the
+underlying tracer and metric providers, providing a helpful set of defaults
+to get developers up and running quickly with collecting and exporting OpenTelemetry
+signals.
+
+## Getting started
+
+This guide will show you how to get started with Elastic OpenTelemetry distribution for .NET.
+
+As the distribution is a lightweight wrapper around the OpenTelemetry SDK, you should be broadly
+familiar with the OpenTelemetry SDK concepts and instrumenting applications using the Microsoft
+diagnostic APIs. If you are not, we recommend you read the
+[OpenTelemetry SDK documentation](https://opentelemetry.io/docs/languages/net) first.
+
+> **_IMPORTANT:_** The Elastic distribution is currently in early alpha release status. It is not yet feature
+complete and may contain bugs. We are actively working on improving the distribution and
+adding new features.
+>
+> If you would like to experience the alpha and help us improve the distribution by providing
+early feedback, you can follow the steps below to get started.
+
+### Prerequisites
+
+The current documentation and examples are written with .NET 6 and newer applications in mind.
+Before continuing, ensure that you have a supported
+[.NET SDK version](https://dotnet.microsoft.com/en-us/download/dotnet) installed locally.
+
+### Installation
+
+To get started with the Elastic OpenTelemetry distribution, you must add the Elastic OpenTelemetry
+NuGet package to your project. This can be achieved by adding the package reference to your project file.
+
+```
+
+```
+
+After adding the package reference, you can start using the Elastic OpenTelemetry distribution
+in your application. The distribution includes a transitive dependency on the OpenTelemetry SDK,
+so you do not need to add the OpenTelemetry SDK package to your project, although doing so will
+cause no harm and may be used to opt into newer SDK versions before the Elastic distribution
+references them.
+
+The Elastic OpenTelemetry distribution is designed to be easy to use and integrate into your
+applications. This includes applications which have previously used the OpenTelemetry SDK directly.
+In situations where the OpenTelemetry SDK is already used, the only required change is
+to add the `Elastic.OpenTelemetry` NuGet package to the project. Doing so will automatically
+switch to the opinionated configuration provided by the Elastic distribution.
+
+### ASP.NET Core usage
+
+A common requirement is to instrument ASP.NET Core applications based on the `Microsoft.Extensions.Hosting`
+libraries which provide dependency injection via an `IServiceProvider`.
+
+The OpenTelemetry SDK and the Elastic distribution provide extension methods to enable observability
+features in your application by adding a few lines of code.
+
+In this section, we'll focus on instrumenting an ASP.NET Core minimal API application using the Elastic
+OpenTelemetry distribution. Similar steps can also be used to instrument other ASP.NET Core workloads
+and other host-based applications such as [worker services](https://learn.microsoft.com/en-us/dotnet/core/extensions/workers).
+
+> **_NOTE:_** These examples assume the use of the top-level statements feature introduced in C# 9.0 and the
+default choice for applications created using the latest templates.
+
+To take advantage of the OpenTelemetry SDK instrumentation for ASP.NET Core, add the following
+NuGet package to your project:
+
+```
+
+```
+
+This package includes instrumentation to collect traces for requests handled by ASP.NET Core endpoints.
+
+> **_NOTE:_** The ASP.NET Core instrumentation is not included by default in the Elastic OpenTelemetry distribution.
+As with all optional instrumentation libraries, you can choose to include them in your application by
+adding a suitable package reference.
+
+Inside the `Program.cs` file of the ASP.NET Core application, add the following two using directives:
+
+```c#
+using OpenTelemetry;
+using OpenTelemetry.Trace;
+```
+
+The OpenTelemetry SDK provides extension methods on the `IServiceCollection` to support enabling the
+providers and configuring the SDK. The Elastic distribution overrides the default SDK registration,
+adding several opinionated defaults.
+
+In the minimal API template, the `WebApplicationBuilder` exposes a `Services` property that can be used
+to register services with the dependency injection container. To enable tracing and metrics collection,
+ensure that the OpenTelemetry SDK is registered.
+
+```c#
+var builder = WebApplication.CreateBuilder(args);
+
+builder.Services
+ .AddHttpClient() <1>
+ .AddOpenTelemetry() <2>
+ .WithTracing(t => t.AddAspNetCoreInstrumentation()); <3>
+```
+<1> The `AddHttpClient` method registers the `IHttpClientFactory` service with the dependency
+injection container. This is NOT required to enable OpenTelemetry, but the example endpoint will use it to
+send an HTTP request.
+
+<2> The `AddOpenTelemetry` method registers the OpenTelemetry SDK with the dependency injection
+container. When available, the Elastic distribution will override this to add opinionated defaults.
+
+<3> Configure tracing to instrument requests handled by ASP.NET Core.
+
+With these limited changes to the `Program.cs` file, the application is now configured to use the
+OpenTelemetry SDK and the Elastic distribution to collect traces and metrics, which are exported via
+OTLP.
+
+To demonstrate the tracing capabilities, add a simple endpoint to the application:
+
+```c#
+app.MapGet("/", async (IHttpClientFactory httpClientFactory) =>
+{
+ using var client = httpClientFactory.CreateClient();
+
+ await Task.Delay(100);
+ var response = await client.GetAsync("http://elastic.co"); <1>
+ await Task.Delay(50);
+
+ return response.StatusCode == System.Net.HttpStatusCode.OK ? Results.Ok() : Results.StatusCode(500);
+});
+```
+<1> Using this URL will require two redirects, allowing us to see multiple spans in the trace.
+
+The Elastic distribution will automatically enable the exporting of signals via the OTLP exporter. This
+exporter requires that endpoint(s) are configured. A common mechanism for configuring endpoints is
+via environment variables.
+
+This demo uses an Elastic Cloud deployment as the destination for our observability data. From Kibana
+running in Elastic Cloud, navigate to the observability set up guides. Select the OpenTelemetry option
+to view the configuration details that should be supplied to the application.
+
+![Elastic Cloud OpenTelemetry configuration](docs/images/elastic-cloud-opentelemetry-configuration.png)
+
+Configure environment variables for the application either in `launchSettings.json` or in the environment
+where the application is running.
+
+Once configured, run the application and make a request to the root endpoint. A trace will be generated
+and exported to the OTLP endpoint.
+
+To view the traces, you can use the Elastic APM UI.
+
+![Minimal API request trace sample in the Elastic APM UI](docs/images/trace-sample-minimal-api.png)
\ No newline at end of file
diff --git a/docs/design-notes/design-required.md b/docs/design-notes/design-required.md
deleted file mode 100644
index f926c22..0000000
--- a/docs/design-notes/design-required.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Design Required
-
-A list of problems which require further API design.
-
-## Item 1
-
-What if a user wants to use the simplified AgentBuilder e.g:
-
-```
-using var agent = new AgentBuilder(ActivitySourceName).Build();
-```
-
-but then wants to add one extra instrumentation (e.g. Redis)? This is achieved with an extension method
-`AddRedisInstrumentation` on the TracerProviderBuilder.
-
-Right now, the consumer would have to use the more complex overload:
-
-```
-public AgentBuilder ConfigureTracer(Action configure)
-```
-
-This especially applies if we don't auto listen to ASP.NET Core which means that for very common scenarios,
-users are forced to use the more complex overload. Is there anything we can do to make that easier?
diff --git a/docs/design-notes/technical-issues.md b/docs/design-notes/technical-issues.md
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/design-notes/usage-scenarios.md b/docs/design-notes/usage-scenarios.md
deleted file mode 100644
index 4b82c7a..0000000
--- a/docs/design-notes/usage-scenarios.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Usage Scenarios
-
-This document lists usage scenarios that consumers may have. Initially these will be manually verified, but
-we should ensure that we introduce unit/integration tests before GA.
-
-## Scenario 1
-
-A consumer wants to collect trace, metrics and/or logs and export them to Elastic APM with limited effort. They have
-no specific requirements besides adding a custom `ActivitySource` name for their application.
-
diff --git a/docs/docs.csproj b/docs/docs.csproj
index 568bf7d..b4ca8bf 100644
--- a/docs/docs.csproj
+++ b/docs/docs.csproj
@@ -1,4 +1,5 @@
+
net8.0
False
diff --git a/docs/getting-started.asciidoc b/docs/getting-started.asciidoc
new file mode 100644
index 0000000..56dd08c
--- /dev/null
+++ b/docs/getting-started.asciidoc
@@ -0,0 +1,155 @@
+[[getting-started]]
+== Getting started
+
+This page will show you how to get started with Elastic OpenTelemetry distribution for .NET.
+
+As the distribution is a lightweight wrapper around the OpenTelemetry SDK, you should be broadly
+familiar with the OpenTelemetry SDK concepts and instrumenting applications using the Microsoft
+diagnostic APIs. If you are not, we recommend you read the
+https://opentelemetry.io/docs/languages/net[OpenTelemetry SDK documentation] first.
+
+[IMPORTANT]
+--
+The Elastic distribution is currently in early alpha release status. It is not yet feature
+complete and may contain bugs. We are actively working on improving the distribution and
+adding new features.
+
+If you would like to experience the alpha and help us improve the distribution by providing
+early feedback, you can follow the steps below to get started.
+--
+
+=== Prerequisites
+
+The current documentation and examples are written with .NET 6 and newer applications in mind.
+Before continuing, ensure that you have a supported
+https://dotnet.microsoft.com/en-us/download/dotnet[.NET SDK version] installed locally.
+
+=== Installation
+
+To get started with the Elastic OpenTelemetry distribution, you must add the Elastic OpenTelemetry
+NuGet package to your project. This can be achieved by adding the package reference to your project file.
+
+[source,xml]
+----
+
+----
+
+After adding the package reference, you can start using the Elastic OpenTelemetry distribution
+in your application. The distribution includes a transitive dependency on the OpenTelemetry SDK,
+so you do not need to add the OpenTelemetry SDK package to your project, although doing so will
+cause no harm and may be used to opt into newer SDK versions before the Elastic distribution
+references them.
+
+The Elastic OpenTelemetry distribution is designed to be easy to use and integrate into your
+applications. This includes applications which have previously used the OpenTelemetry SDK directly.
+In situations where the OpenTelemetry SDK is already used, the only required change is
+to add the `Elastic.OpenTelemetry` NuGet package to the project. Doing so will automatically
+switch to the opinionated configuration provided by the Elastic distribution.
+
+=== ASP.NET Core usage
+
+A common requirement is to instrument ASP.NET Core applications based on the `Microsoft.Extensions.Hosting`
+libraries which provide dependency injection via an `IServiceProvider`.
+
+The OpenTelemetry SDK and the Elastic distribution provide extension methods to enable observability
+features in your application by adding a few lines of code.
+
+In this section, we'll focus on instrumenting an ASP.NET Core minimal API application using the Elastic
+OpenTelemetry distribution. Similar steps can also be used to instrument other ASP.NET Core workloads
+and other host-based applications such as https://learn.microsoft.com/en-us/dotnet/core/extensions/workers[worker services].
+
+[NOTE]
+--
+These examples assume the use of the top-level statements feature introduced in C# 9.0 and the
+default choice for applications created using the latest templates.
+--
+
+To take advantage of the OpenTelemetry SDK instrumentation for ASP.NET Core, add the following
+NuGet package to your project:
+
+[source,xml]
+----
+
+----
+
+This package includes instrumentation to collect traces for requests handled by ASP.NET Core endpoints.
+
+[NOTE]
+--
+The ASP.NET Core instrumentation is not included by default in the Elastic OpenTelemetry distribution.
+As with all optional instrumentation libraries, you can choose to include them in your application by
+adding a suitable package reference.
+--
+
+Inside the `Program.cs` file of the ASP.NET Core application, add the following two using directives:
+
+[source,csharp]
+----
+using OpenTelemetry;
+using OpenTelemetry.Trace;
+----
+
+The OpenTelemetry SDK provides extension methods on the `IServiceCollection` to support enabling the
+providers and configuring the SDK. The Elastic distribution overrides the default SDK registration,
+adding several opinionated defaults.
+
+In the minimal API template, the `WebApplicationBuilder` exposes a `Services` property that can be used
+to register services with the dependency injection container. To enable tracing and metrics collection,
+ensure that the OpenTelemetry SDK is registered.
+
+[source,csharp]
+----
+var builder = WebApplication.CreateBuilder(args);
+
+builder.Services
+ .AddHttpClient() <1>
+ .AddOpenTelemetry() <2>
+ .WithTracing(t => t.AddAspNetCoreInstrumentation()); <3>
+----
+<1> The `AddHttpClient` method registers the `IHttpClientFactory` service with the dependency
+injection container. This is NOT required to enable OpenTelemetry, but the example endpoint will use it to
+send an HTTP request.
+<2> The `AddOpenTelemetry` method registers the OpenTelemetry SDK with the dependency injection
+container. When available, the Elastic distribution will override this to add opinionated defaults.
+<3> Configure tracing to instrument requests handled by ASP.NET Core.
+
+With these limited changes to the `Program.cs` file, the application is now configured to use the
+OpenTelemetry SDK and the Elastic distribution to collect traces and metrics, which are exported via
+OTLP.
+
+To demonstrate the tracing capabilities, add a simple endpoint to the application:
+
+[source,csharp]
+----
+app.MapGet("/", async (IHttpClientFactory httpClientFactory) =>
+{
+ using var client = httpClientFactory.CreateClient();
+
+ await Task.Delay(100);
+ var response = await client.GetAsync("http://elastic.co"); <1>
+ await Task.Delay(50);
+
+ return response.StatusCode == System.Net.HttpStatusCode.OK ? Results.Ok() : Results.StatusCode(500);
+});
+----
+<1> Using this URL will require two redirects, allowing us to see multiple spans in the trace.
+
+The Elastic distribution will automatically enable the exporting of signals via the OTLP exporter. This
+exporter requires that endpoint(s) are configured. A common mechanism for configuring endpoints is
+via environment variables.
+
+This demo uses an Elastic Cloud deployment as the destination for our observability data. From Kibana
+running in Elastic Cloud, navigate to the observability set up guides. Select the OpenTelemetry option
+to view the configuration details that should be supplied to the application.
+
+image::./images/elastic-cloud-opentelemetry-configuration.png[Elastic Cloud OpenTelemetry configuration]
+
+Configure environment variables for the application either in `launchSettings.json` or in the environment
+where the application is running.
+
+Once configured, run the application and make a request to the root endpoint. A trace will be generated
+and exported to the OTLP endpoint.
+
+To view the traces, you can use the Elastic APM UI.
+
+image::./images/trace-sample-minimal-api.png[Minimal API request trace sample in the Elastic APM UI]
\ No newline at end of file
diff --git a/docs/images/elastic-cloud-opentelemetry-configuration.png b/docs/images/elastic-cloud-opentelemetry-configuration.png
new file mode 100644
index 0000000..56405c5
Binary files /dev/null and b/docs/images/elastic-cloud-opentelemetry-configuration.png differ
diff --git a/docs/images/trace-sample-minimal-api.png b/docs/images/trace-sample-minimal-api.png
new file mode 100644
index 0000000..3824812
Binary files /dev/null and b/docs/images/trace-sample-minimal-api.png differ
diff --git a/docs/index.asciidoc b/docs/index.asciidoc
index 801e145..76e0822 100644
--- a/docs/index.asciidoc
+++ b/docs/index.asciidoc
@@ -1,6 +1,8 @@
include::{asciidoc-dir}/../../shared/versions/stack/current.asciidoc[]
include::{asciidoc-dir}/../../shared/attributes.asciidoc[]
-= Elastic OpenTelemetry Agent Distribution
+= Elastic OpenTelemetry Distribution
-Docs TODO
+include::./intro.asciidoc[]
+
+include::./getting-started.asciidoc[]
diff --git a/docs/intro.asciidoc b/docs/intro.asciidoc
new file mode 100644
index 0000000..d799551
--- /dev/null
+++ b/docs/intro.asciidoc
@@ -0,0 +1,20 @@
+[[introduction]]
+== Introduction
+
+The `Elastic.OpenTelemetry` package contains an Elastic distribution of the
+https://opentelemetry.io/docs/languages/net[OpenTelemetry SDK for .NET]. A distribution
+is a wrapper around an upstream OpenTelemetry repository with some customizations. For
+more details about distributions in general, visit the
+https://opentelemetry.io/docs/concepts/distributions[OpenTelemetry documentation].
+
+The Elastic distribution includes some Elastic-specific processors to ensure the best
+compatibility when exporting OpenTelemetry signal data to an Elastic backend such
+as Elastic APM server. The distribution also preconfigures the collection of tracing
+and metrics signals, applying some opinionated defaults, such as which sources are
+collected by default. The distribution also ensures that the OTLP exporter is enabled
+by default.
+
+The distribution includes extension methods to fully control the creation of the
+underlying tracer and metric providers, providing a helpful set of defaults
+to get developers up and running quickly with collecting and exporting OpenTelemetry
+signals.
\ No newline at end of file
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Controllers/E2EController.cs b/examples/Example.AspNetCore.Mvc/Controllers/E2EController.cs
similarity index 95%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Controllers/E2EController.cs
rename to examples/Example.AspNetCore.Mvc/Controllers/E2EController.cs
index d088529..1d246b7 100644
--- a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Controllers/E2EController.cs
+++ b/examples/Example.AspNetCore.Mvc/Controllers/E2EController.cs
@@ -6,7 +6,7 @@
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Mvc;
-namespace Example.Elastic.OpenTelemetry.AspNetCore.Controllers;
+namespace Example.AspNetCore.Mvc.Controllers;
public class E2EController : Controller
{
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Controllers/HomeController.cs b/examples/Example.AspNetCore.Mvc/Controllers/HomeController.cs
similarity index 91%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Controllers/HomeController.cs
rename to examples/Example.AspNetCore.Mvc/Controllers/HomeController.cs
index 6f1a26a..52db681 100644
--- a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Controllers/HomeController.cs
+++ b/examples/Example.AspNetCore.Mvc/Controllers/HomeController.cs
@@ -1,12 +1,13 @@
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information
+
using System.Diagnostics;
using System.Net;
-using Example.Elastic.OpenTelemetry.AspNetCore.Models;
+using Example.AspNetCore.Mvc.Models;
using Microsoft.AspNetCore.Mvc;
-namespace Example.Elastic.OpenTelemetry.AspNetCore.Controllers;
+namespace Example.AspNetCore.Mvc.Controllers;
public class HomeController(IHttpClientFactory httpClientFactory) : Controller
{
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Example.Elastic.OpenTelemetry.AspNetCore.csproj b/examples/Example.AspNetCore.Mvc/Example.AspNetCore.Mvc.csproj
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Example.Elastic.OpenTelemetry.AspNetCore.csproj
rename to examples/Example.AspNetCore.Mvc/Example.AspNetCore.Mvc.csproj
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Models/ErrorViewModel.cs b/examples/Example.AspNetCore.Mvc/Models/ErrorViewModel.cs
similarity index 85%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Models/ErrorViewModel.cs
rename to examples/Example.AspNetCore.Mvc/Models/ErrorViewModel.cs
index c8d130c..28575c2 100644
--- a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Models/ErrorViewModel.cs
+++ b/examples/Example.AspNetCore.Mvc/Models/ErrorViewModel.cs
@@ -1,7 +1,8 @@
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information
-namespace Example.Elastic.OpenTelemetry.AspNetCore.Models
+
+namespace Example.AspNetCore.Mvc.Models
{
public class ErrorViewModel
{
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Program.cs b/examples/Example.AspNetCore.Mvc/Program.cs
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Program.cs
rename to examples/Example.AspNetCore.Mvc/Program.cs
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Properties/launchSettings.json b/examples/Example.AspNetCore.Mvc/Properties/launchSettings.json
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Properties/launchSettings.json
rename to examples/Example.AspNetCore.Mvc/Properties/launchSettings.json
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/E2E/Index.cshtml b/examples/Example.AspNetCore.Mvc/Views/E2E/Index.cshtml
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/E2E/Index.cshtml
rename to examples/Example.AspNetCore.Mvc/Views/E2E/Index.cshtml
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Home/Index.cshtml b/examples/Example.AspNetCore.Mvc/Views/Home/Index.cshtml
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Home/Index.cshtml
rename to examples/Example.AspNetCore.Mvc/Views/Home/Index.cshtml
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Home/Privacy.cshtml b/examples/Example.AspNetCore.Mvc/Views/Home/Privacy.cshtml
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Home/Privacy.cshtml
rename to examples/Example.AspNetCore.Mvc/Views/Home/Privacy.cshtml
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Shared/Error.cshtml b/examples/Example.AspNetCore.Mvc/Views/Shared/Error.cshtml
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Shared/Error.cshtml
rename to examples/Example.AspNetCore.Mvc/Views/Shared/Error.cshtml
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Shared/_Layout.cshtml b/examples/Example.AspNetCore.Mvc/Views/Shared/_Layout.cshtml
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Shared/_Layout.cshtml
rename to examples/Example.AspNetCore.Mvc/Views/Shared/_Layout.cshtml
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Shared/_Layout.cshtml.css b/examples/Example.AspNetCore.Mvc/Views/Shared/_Layout.cshtml.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Shared/_Layout.cshtml.css
rename to examples/Example.AspNetCore.Mvc/Views/Shared/_Layout.cshtml.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Shared/_ValidationScriptsPartial.cshtml b/examples/Example.AspNetCore.Mvc/Views/Shared/_ValidationScriptsPartial.cshtml
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/Shared/_ValidationScriptsPartial.cshtml
rename to examples/Example.AspNetCore.Mvc/Views/Shared/_ValidationScriptsPartial.cshtml
diff --git a/examples/Example.AspNetCore.Mvc/Views/_ViewImports.cshtml b/examples/Example.AspNetCore.Mvc/Views/_ViewImports.cshtml
new file mode 100644
index 0000000..a7d094c
--- /dev/null
+++ b/examples/Example.AspNetCore.Mvc/Views/_ViewImports.cshtml
@@ -0,0 +1,2 @@
+@using Example.AspNetCore.Mvc.Models
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/_ViewStart.cshtml b/examples/Example.AspNetCore.Mvc/Views/_ViewStart.cshtml
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/_ViewStart.cshtml
rename to examples/Example.AspNetCore.Mvc/Views/_ViewStart.cshtml
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/appsettings.Development.json b/examples/Example.AspNetCore.Mvc/appsettings.Development.json
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/appsettings.Development.json
rename to examples/Example.AspNetCore.Mvc/appsettings.Development.json
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/appsettings.json b/examples/Example.AspNetCore.Mvc/appsettings.json
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/appsettings.json
rename to examples/Example.AspNetCore.Mvc/appsettings.json
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/css/site.css b/examples/Example.AspNetCore.Mvc/wwwroot/css/site.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/css/site.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/css/site.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/favicon.ico b/examples/Example.AspNetCore.Mvc/wwwroot/favicon.ico
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/favicon.ico
rename to examples/Example.AspNetCore.Mvc/wwwroot/favicon.ico
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/js/site.js b/examples/Example.AspNetCore.Mvc/wwwroot/js/site.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/js/site.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/js/site.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/LICENSE b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/LICENSE
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/LICENSE
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/LICENSE
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/LICENSE.md b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/LICENSE.md
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/LICENSE.md
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/LICENSE.md
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/dist/additional-methods.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/dist/additional-methods.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/dist/additional-methods.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/dist/additional-methods.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/dist/additional-methods.min.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/dist/jquery.validate.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/dist/jquery.validate.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/dist/jquery.validate.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/dist/jquery.validate.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery/LICENSE.txt b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery/LICENSE.txt
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery/LICENSE.txt
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery/LICENSE.txt
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery/dist/jquery.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery/dist/jquery.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery/dist/jquery.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery/dist/jquery.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery/dist/jquery.min.js b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery/dist/jquery.min.js
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery/dist/jquery.min.js
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery/dist/jquery.min.js
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery/dist/jquery.min.map b/examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery/dist/jquery.min.map
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.AspNetCore/wwwroot/lib/jquery/dist/jquery.min.map
rename to examples/Example.AspNetCore.Mvc/wwwroot/lib/jquery/dist/jquery.min.map
diff --git a/examples/Example.Elastic.OpenTelemetry/Example.Elastic.OpenTelemetry.csproj b/examples/Example.Console/Example.Console.csproj
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry/Example.Elastic.OpenTelemetry.csproj
rename to examples/Example.Console/Example.Console.csproj
diff --git a/examples/Example.Elastic.OpenTelemetry/Program.cs b/examples/Example.Console/Program.cs
similarity index 90%
rename from examples/Example.Elastic.OpenTelemetry/Program.cs
rename to examples/Example.Console/Program.cs
index 4544a3a..9c895d1 100644
--- a/examples/Example.Elastic.OpenTelemetry/Program.cs
+++ b/examples/Example.Console/Program.cs
@@ -1,7 +1,8 @@
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information
-using Example.Elastic.OpenTelemetry;
+
+using Example.Console;
Console.WriteLine("Starting sample application.");
diff --git a/examples/Example.Elastic.OpenTelemetry/Properties/launchSettings.json b/examples/Example.Console/Properties/launchSettings.json
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry/Properties/launchSettings.json
rename to examples/Example.Console/Properties/launchSettings.json
diff --git a/examples/Example.Elastic.OpenTelemetry/Usage.cs b/examples/Example.Console/Usage.cs
similarity index 99%
rename from examples/Example.Elastic.OpenTelemetry/Usage.cs
rename to examples/Example.Console/Usage.cs
index e8b7026..d49eb8c 100644
--- a/examples/Example.Elastic.OpenTelemetry/Usage.cs
+++ b/examples/Example.Console/Usage.cs
@@ -1,6 +1,7 @@
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information
+
using System.Diagnostics;
using Elastic.OpenTelemetry;
using Elastic.OpenTelemetry.Extensions;
@@ -8,7 +9,7 @@
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
-namespace Example.Elastic.OpenTelemetry;
+namespace Example.Console;
internal static class Usage
{
diff --git a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/_ViewImports.cshtml b/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/_ViewImports.cshtml
deleted file mode 100644
index 7da3ade..0000000
--- a/examples/Example.Elastic.OpenTelemetry.AspNetCore/Views/_ViewImports.cshtml
+++ /dev/null
@@ -1,3 +0,0 @@
-@using Example.Elastic.OpenTelemetry.AspNetCore
-@using Example.Elastic.OpenTelemetry.AspNetCore.Models
-@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
diff --git a/examples/Example.MinimalApi/Example.MinimalApi.csproj b/examples/Example.MinimalApi/Example.MinimalApi.csproj
new file mode 100644
index 0000000..2c0fd90
--- /dev/null
+++ b/examples/Example.MinimalApi/Example.MinimalApi.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
diff --git a/examples/Example.MinimalApi/Program.cs b/examples/Example.MinimalApi/Program.cs
new file mode 100644
index 0000000..07542c6
--- /dev/null
+++ b/examples/Example.MinimalApi/Program.cs
@@ -0,0 +1,57 @@
+// Licensed to Elasticsearch B.V under one or more agreements.
+// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
+// See the LICENSE file in the project root for more information
+
+using System.Diagnostics;
+using Example.Api;
+using OpenTelemetry;
+using OpenTelemetry.Trace;
+
+var builder = WebApplication.CreateBuilder(args);
+
+builder.Services
+ .AddHttpClient() // Adds IHttpClientFactory
+ .AddOpenTelemetry() // Adds the OpenTelemetry SDK
+ .WithTracing(t =>
+ {
+ t.AddAspNetCoreInstrumentation(); // Configure tracing to instrument ASP.NET Core
+ t.AddSource(Api.ActivitySourceName);
+ });
+
+var app = builder.Build();
+
+app.UseHttpsRedirection();
+
+app.MapGet("/", (IHttpClientFactory httpClientFactory) => Api.HandleRoot(httpClientFactory));
+
+app.Run();
+
+namespace Example.Api
+{
+ internal static class Api
+ {
+ public static string ActivitySourceName = "CustomActivitySource";
+ private static readonly ActivitySource ActivitySource = new(ActivitySourceName);
+
+ public static async Task HandleRoot(IHttpClientFactory httpClientFactory)
+ {
+ using var client = httpClientFactory.CreateClient();
+
+ using var activity = ActivitySource.StartActivity("DoingStuff", ActivityKind.Internal);
+ activity?.SetTag("custom-tag", "TagValue");
+
+ await Task.Delay(100);
+ var response = await client.GetAsync("http://elastic.co"); // using this URL will require 2 redirects
+ await Task.Delay(50);
+
+ if (response.StatusCode == System.Net.HttpStatusCode.OK)
+ {
+ activity?.SetStatus(ActivityStatusCode.Ok);
+ return Results.Ok();
+ }
+
+ activity?.SetStatus(ActivityStatusCode.Error);
+ return Results.StatusCode(500);
+ }
+ }
+}
diff --git a/examples/Example.MinimalApi/Properties/launchSettings.json b/examples/Example.MinimalApi/Properties/launchSettings.json
new file mode 100644
index 0000000..cb647e9
--- /dev/null
+++ b/examples/Example.MinimalApi/Properties/launchSettings.json
@@ -0,0 +1,44 @@
+{
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:4214",
+ "sslPort": 44348
+ }
+ },
+ "profiles": {
+ "http": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "",
+ "applicationUrl": "http://localhost:5146",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development",
+ "OTEL_RESOURCE_ATTRIBUTES": "service.name=minimal-api-example"
+ }
+ },
+ "https": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "",
+ "applicationUrl": "https://localhost:7140;http://localhost:5146",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development",
+ "OTEL_RESOURCE_ATTRIBUTES": "service.name=minimal-api-example"
+ }
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development",
+ "OTEL_RESOURCE_ATTRIBUTES": "service.name=minimal-api-example"
+ }
+ }
+ }
+}
diff --git a/examples/Example.MinimalApi/appsettings.Development.json b/examples/Example.MinimalApi/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/examples/Example.MinimalApi/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/examples/Example.MinimalApi/appsettings.json b/examples/Example.MinimalApi/appsettings.json
new file mode 100644
index 0000000..9bba77a
--- /dev/null
+++ b/examples/Example.MinimalApi/appsettings.json
@@ -0,0 +1,13 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*",
+ "ServiceName": "elastic-minimal-api-example",
+ "AspNetCoreInstrumentation": {
+ "RecordException": "true"
+ }
+}
diff --git a/examples/Example.Elastic.OpenTelemetry.Worker/Example.Elastic.OpenTelemetry.Worker.csproj b/examples/Example.WorkerService/Example.WorkerService.csproj
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.Worker/Example.Elastic.OpenTelemetry.Worker.csproj
rename to examples/Example.WorkerService/Example.WorkerService.csproj
diff --git a/examples/Example.Elastic.OpenTelemetry.Worker/Program.cs b/examples/Example.WorkerService/Program.cs
similarity index 93%
rename from examples/Example.Elastic.OpenTelemetry.Worker/Program.cs
rename to examples/Example.WorkerService/Program.cs
index e69dcb2..773ce0c 100644
--- a/examples/Example.Elastic.OpenTelemetry.Worker/Program.cs
+++ b/examples/Example.WorkerService/Program.cs
@@ -2,7 +2,7 @@
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information
-using Example.Elastic.OpenTelemetry.Worker;
+using Example.WorkerService;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
diff --git a/examples/Example.Elastic.OpenTelemetry.Worker/Properties/launchSettings.json b/examples/Example.WorkerService/Properties/launchSettings.json
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.Worker/Properties/launchSettings.json
rename to examples/Example.WorkerService/Properties/launchSettings.json
diff --git a/examples/Example.Elastic.OpenTelemetry.Worker/Worker.cs b/examples/Example.WorkerService/Worker.cs
similarity index 97%
rename from examples/Example.Elastic.OpenTelemetry.Worker/Worker.cs
rename to examples/Example.WorkerService/Worker.cs
index a587058..b3b0792 100644
--- a/examples/Example.Elastic.OpenTelemetry.Worker/Worker.cs
+++ b/examples/Example.WorkerService/Worker.cs
@@ -1,10 +1,11 @@
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information
+
using System.Diagnostics;
using System.Diagnostics.Metrics;
-namespace Example.Elastic.OpenTelemetry.Worker;
+namespace Example.WorkerService;
public class Worker(ILogger logger) : BackgroundService
{
diff --git a/examples/Example.Elastic.OpenTelemetry.Worker/appsettings.Development.json b/examples/Example.WorkerService/appsettings.Development.json
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.Worker/appsettings.Development.json
rename to examples/Example.WorkerService/appsettings.Development.json
diff --git a/examples/Example.Elastic.OpenTelemetry.Worker/appsettings.json b/examples/Example.WorkerService/appsettings.json
similarity index 100%
rename from examples/Example.Elastic.OpenTelemetry.Worker/appsettings.json
rename to examples/Example.WorkerService/appsettings.json
diff --git a/src/Elastic.OpenTelemetry/AgentBuilder.cs b/src/Elastic.OpenTelemetry/AgentBuilder.cs
index b78143f..6b01501 100644
--- a/src/Elastic.OpenTelemetry/AgentBuilder.cs
+++ b/src/Elastic.OpenTelemetry/AgentBuilder.cs
@@ -10,49 +10,11 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using OpenTelemetry;
-using OpenTelemetry.Exporter;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;
namespace Elastic.OpenTelemetry;
-
-///
-/// Expert options to provide to to control its initial OpenTelemetry registration
-///
-public record AgentBuilderOptions
-{
- ///
- /// Provide an additional logger to the internal file logger.
- ///
- /// The agent will always log to file if a Path is provided using the ELASTIC_OTEL_LOG_DIRECTORY
- /// environment variable.
- ///
- public ILogger? Logger { get; init; }
-
- ///
- /// Provides an to register the agent into.
- /// If null a new local instance will be used.
- ///
- public IServiceCollection? Services { get; init; }
-
- ///
- /// The initial activity sources to listen to.
- /// >These can always later be amended with
- ///
- public string[] ActivitySources { get; init; } = [];
-
- ///
- /// Stops to register OLTP exporters, useful for testing scenarios
- ///
- public bool SkipOtlpExporter { get; init; }
-
- ///
- /// Optional name which is used when retrieving OTLP options.
- ///
- public string? OtlpExporterName { get; init; }
-}
-
///
/// Supports building instances which include Elastic defaults, but can also be customised.
///
@@ -116,7 +78,6 @@ public AgentBuilder(AgentBuilderOptions options)
metrics.AddMeter(source);
}
-
metrics
.AddProcessInstrumentation()
.AddRuntimeInstrumentation()
@@ -134,11 +95,7 @@ public AgentBuilder(AgentBuilderOptions options)
{
if (!options.SkipOtlpExporter)
{
- metrics.AddOtlpExporter(options.OtlpExporterName, o =>
- {
- o.ExportProcessorType = ExportProcessorType.Simple;
- o.Protocol = OtlpExportProtocol.HttpProtobuf;
- });
+ metrics.AddOtlpExporter(options.OtlpExporterName, _ => { });
}
Logger.LogAgentBuilderBuiltMeterProvider();
});
diff --git a/src/Elastic.OpenTelemetry/AgentBuilderOptions.cs b/src/Elastic.OpenTelemetry/AgentBuilderOptions.cs
new file mode 100644
index 0000000..23f5520
--- /dev/null
+++ b/src/Elastic.OpenTelemetry/AgentBuilderOptions.cs
@@ -0,0 +1,45 @@
+// Licensed to Elasticsearch B.V under one or more agreements.
+// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
+// See the LICENSE file in the project root for more information
+
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using OpenTelemetry.Trace;
+
+namespace Elastic.OpenTelemetry;
+
+///
+/// Expert options to provide to to control its initial OpenTelemetry registration
+///
+public record AgentBuilderOptions
+{
+ ///
+ /// Provide an additional logger to the internal file logger.
+ ///
+ /// The agent will always log to file if a Path is provided using the ELASTIC_OTEL_LOG_DIRECTORY
+ /// environment variable.
+ ///
+ public ILogger? Logger { get; init; }
+
+ ///
+ /// Provides an to register the agent into.
+ /// If null a new local instance will be used.
+ ///
+ public IServiceCollection? Services { get; init; }
+
+ ///
+ /// The initial activity sources to listen to.
+ /// >These can always later be amended with
+ ///
+ public string[] ActivitySources { get; init; } = [];
+
+ ///
+ /// Stops to register OLTP exporters, useful for testing scenarios
+ ///
+ public bool SkipOtlpExporter { get; init; }
+
+ ///
+ /// Optional name which is used when retrieving OTLP options.
+ ///
+ public string? OtlpExporterName { get; init; }
+}
diff --git a/src/Elastic.OpenTelemetry/DependencyInjection/ServiceCollectionExtensions.cs b/src/Elastic.OpenTelemetry/DependencyInjection/ServiceCollectionExtensions.cs
index 4728232..20135c2 100644
--- a/src/Elastic.OpenTelemetry/DependencyInjection/ServiceCollectionExtensions.cs
+++ b/src/Elastic.OpenTelemetry/DependencyInjection/ServiceCollectionExtensions.cs
@@ -42,11 +42,10 @@ public static IOpenTelemetryBuilder AddElasticOpenTelemetry(this IServiceCollect
{
if (serviceCollection.Any(d => d.ServiceType == typeof(IHostedService) && d.ImplementationType == typeof(ElasticOtelDistroService)))
{
+ // TODO - Can we avoid this by storing the instance on the builder (internal access)
var sp = serviceCollection.BuildServiceProvider();
return sp.GetService()!; //already registered as singleton
}
return new AgentBuilder(options);
}
-
-
}
diff --git a/tests/Elastic.OpenTelemetry.EndToEndTests/DistributedFixture/DistributedApplicationFixture.cs b/tests/Elastic.OpenTelemetry.EndToEndTests/DistributedFixture/DistributedApplicationFixture.cs
index 352ee4e..44b584c 100644
--- a/tests/Elastic.OpenTelemetry.EndToEndTests/DistributedFixture/DistributedApplicationFixture.cs
+++ b/tests/Elastic.OpenTelemetry.EndToEndTests/DistributedFixture/DistributedApplicationFixture.cs
@@ -6,9 +6,7 @@
using System.Security.Cryptography;
using System.Text;
using Microsoft.Extensions.Configuration;
-using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using Nullean.Xunit.Partitions.Sdk;
-using Xunit.Sdk;
namespace Elastic.OpenTelemetry.EndToEndTests.DistributedFixture;
@@ -20,7 +18,7 @@ public class DistributedApplicationFixture : IPartitionLifetime
public bool Started => AspNetApplication?.ProcessId.HasValue ?? false;
- private readonly List _output = new();
+ private readonly List _output = [];
public int? MaxConcurrency => null;
@@ -55,7 +53,7 @@ public string FailureTestOutput()
{
var logLines = new List();
if (_aspNetApplication?.ProcessId.HasValue ?? false)
- AspNetApplication.IterateOverLog(s =>
+ DotNetRunApplication.IterateOverLog(s =>
{
Console.WriteLine(s);
logLines.Add(s);
@@ -113,13 +111,12 @@ public async Task InitializeAsync()
await ApmUI.InitializeAsync();
}
-
}
public class AspNetCoreExampleApplication : DotNetRunApplication
{
public AspNetCoreExampleApplication(string serviceName, IConfiguration configuration)
- : base(serviceName, configuration, "Example.Elastic.OpenTelemetry.AspNetCore") =>
+ : base(serviceName, configuration, "Example.AspNetCore.Mvc") =>
HttpClient = new HttpClient { BaseAddress = new Uri("http://localhost:5247") };
public HttpClient HttpClient { get; }
diff --git a/tests/Elastic.OpenTelemetry.EndToEndTests/DistributedFixture/DotNetRunApplication.cs b/tests/Elastic.OpenTelemetry.EndToEndTests/DistributedFixture/DotNetRunApplication.cs
index c9d4aef..f112b3c 100644
--- a/tests/Elastic.OpenTelemetry.EndToEndTests/DistributedFixture/DotNetRunApplication.cs
+++ b/tests/Elastic.OpenTelemetry.EndToEndTests/DistributedFixture/DotNetRunApplication.cs
@@ -36,7 +36,7 @@ protected DotNetRunApplication(string serviceName, IConfiguration configuration,
public int? ProcessId { get; private set; }
- protected virtual string[] GetArguments() => Array.Empty();
+ protected virtual string[] GetArguments() => [];
public static DirectoryInfo GetSolutionRoot()
{
@@ -61,7 +61,6 @@ private LongRunningArguments CreateStartArgs()
return new("dotnet", arguments)
{
-
Environment = new Dictionary
{
{ "OTEL_EXPORTER_OTLP_ENDPOINT", _endpoint },
@@ -88,20 +87,18 @@ private LongRunningArguments CreateStartArgs()
return l.Line.StartsWith(" Application started.");
}
};
-
-
}
- public void IterateOverLog(Action write)
+ public static void IterateOverLog(Action write)
{
- var logFile = DotNetRunApplication.LogDirectory
+ var logFile = LogDirectory
//TODO get last of this app specifically
//.GetFiles($"{_app.Process.Binary}_*.log")
.GetFiles($"*.log")
.MaxBy(f => f.CreationTimeUtc);
if (logFile == null)
- write($"Could not locate log files in {DotNetRunApplication.LogDirectory}");
+ write($"Could not locate log files in {LogDirectory}");
else
{
write($"Contents of: {logFile.FullName}");
diff --git a/tests/Elastic.OpenTelemetry.EndToEndTests/ServiceTests.cs b/tests/Elastic.OpenTelemetry.EndToEndTests/ServiceTests.cs
index 8725a6f..6f39281 100644
--- a/tests/Elastic.OpenTelemetry.EndToEndTests/ServiceTests.cs
+++ b/tests/Elastic.OpenTelemetry.EndToEndTests/ServiceTests.cs
@@ -45,6 +45,6 @@ public async Task DisposeAsync()
if (!success)
return;
- fixture.AspNetApplication.IterateOverLog(Output.WriteLine);
+ DotNetRunApplication.IterateOverLog(Output.WriteLine);
}
}