Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
using Elastic.OpenTelemetry.Configuration;
using Elastic.OpenTelemetry.Core;
using Elastic.OpenTelemetry.Diagnostics;
using Elastic.OpenTelemetry.Exporters;
using Elastic.OpenTelemetry.Resources;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Exporter;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
Expand Down Expand Up @@ -39,6 +42,8 @@ public TracerProviderBuilder BeforeConfigureTracerProvider(TracerProviderBuilder
{
builder.ConfigureResource(r => r.WithElasticDefaultsCore(_components, null, null));

builder.ConfigureServices(sc => sc.Configure<OtlpExporterOptions>(OtlpExporterDefaults.OtlpExporterOptions));

CoreTracerProvderBuilderExtensions.AddActivitySourceWithLogging(builder, logger, "Elastic.Transport", "<n/a>");
CoreTracerProvderBuilderExtensions.AddElasticProcessorsCore(builder, null, _components, null);

Expand Down Expand Up @@ -66,6 +71,8 @@ public MeterProviderBuilder BeforeConfigureMeterProvider(MeterProviderBuilder bu
{
builder.ConfigureResource(r => r.WithElasticDefaultsCore(_components, null, null));

builder.ConfigureServices(sc => sc.Configure<OtlpExporterOptions>(OtlpExporterDefaults.OtlpExporterOptions));

logger.LogConfiguredSignalProvider(nameof(Signals.Metrics), nameof(MeterProviderBuilder), "<n/a>");

return builder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

<!-- We need these dependencies when building agianst all targets. As they are private, we don't have to worry about them being packaged. -->
<ItemGroup>
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.11.2" PrivateAssets="all" />
<PackageReference Include="Polyfill" Version="7.21.0" PrivateAssets="all" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
<PackageReference Include="NetEscapades.EnumGenerators" Version="1.0.0-beta09" PrivateAssets="all" ExcludeAssets="runtime" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// 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

#if NETFRAMEWORK
using System.Net.Http;
#endif

namespace Elastic.OpenTelemetry.Exporters;

internal class ElasticUserAgentHandler(string userAgent) : HttpClientHandler
{
private readonly string _userAgent = userAgent;

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.Remove("User-Agent");
request.Headers.Add("User-Agent", _userAgent);

return base.SendAsync(request, cancellationToken);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// 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 Elastic.OpenTelemetry.Core;
using OpenTelemetry.Exporter;

#if NETFRAMEWORK
using System.Net.Http;
#endif

namespace Elastic.OpenTelemetry.Exporters;

internal static class OtlpExporterDefaults
{
internal static readonly HttpMessageHandler Handler = new ElasticUserAgentHandler($"elastic-otlp-dotnet/{VersionHelper.InformationalVersion}");

public static void OtlpExporterOptions(OtlpExporterOptions options) =>
options.HttpClientFactory = () =>
{
var client = new HttpClient(Handler);
return client;
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ internal static class ResourceBuilderExtensions

/// <summary>
/// Used to track the number of times any variation of `WithElasticDefaults` is invoked by consuming
/// code acrosss all <see cref="ResourceBuilder"/> instances. This allows us to warn about potenital
/// code across all <see cref="ResourceBuilder"/> instances. This allows us to warn about potential
/// misconfigurations.
/// </summary>
private static int WithElasticDefaultsCallCount;
Expand Down
6 changes: 5 additions & 1 deletion src/Elastic.OpenTelemetry/Elastic.OpenTelemetry.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Library</OutputType>
Expand Down Expand Up @@ -47,6 +47,10 @@
<!-- We skip this on .NET since we prefer to use the native instrumentation from the built in ActivitySource -->
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.11.1" />
</ItemGroup>

<ItemGroup>
<Reference Include="System.Net.Http" Condition="'$(TargetFramework)' == 'net462'" />
</ItemGroup>

<ItemGroup>
<InternalsVisibleTo Include="Elastic.OpenTelemetry.Tests" Key="$(ExposedPublicKey)" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@
using Elastic.OpenTelemetry.Configuration;
using Elastic.OpenTelemetry.Core;
using Elastic.OpenTelemetry.Diagnostics;
using Elastic.OpenTelemetry.Exporters;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using OpenTelemetry.Exporter;
using OpenTelemetry.Logs;
using OpenTelemetry.Resources;

// Matching namespace with LoggerProviderBuilder
#pragma warning disable IDE0130 // Namespace does not match folder structure
namespace OpenTelemetry.Logs;
namespace OpenTelemetry;
#pragma warning restore IDE0130 // Namespace does not match folder structure

/// <summary>
Expand All @@ -24,7 +27,7 @@ public static class LoggingProviderBuilderExtensions
{
/// <summary>
/// Used to track the number of times any variation of `WithElasticDefaults` is invoked by consuming
/// code acrosss all <see cref="LoggerProviderBuilder"/> instances. This allows us to warn about potenital
/// code across all <see cref="LoggerProviderBuilder"/> instances. This allows us to warn about potential
/// misconfigurations.
/// </summary>
private static int WithElasticDefaultsCallCount;
Expand Down Expand Up @@ -149,6 +152,9 @@ static void ConfigureBuilder(LoggerProviderBuilder builder, BuilderState builder

builder.ConfigureResource(r => r.WithElasticDefaults(builderState, services));

if (services is null)
builder.ConfigureServices(sc => sc.Configure<OtlpExporterOptions>(OtlpExporterDefaults.OtlpExporterOptions));

if (components.Options.SkipOtlpExporter)
{
logger.LogSkippingOtlpExporter(nameof(Signals.Logs), loggingProviderName, builderState.InstanceIdentifier);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,19 @@
using Elastic.OpenTelemetry.Configuration;
using Elastic.OpenTelemetry.Core;
using Elastic.OpenTelemetry.Diagnostics;
using Elastic.OpenTelemetry.Exporters;
using Elastic.OpenTelemetry.Instrumentation;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using OpenTelemetry.Exporter;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

// Matching namespace with MeterProviderBuilder
#pragma warning disable IDE0130 // Namespace does not match folder structure
namespace OpenTelemetry.Metrics;
namespace OpenTelemetry;
#pragma warning restore IDE0130 // Namespace does not match folder structure

/// <summary>
Expand All @@ -29,7 +31,7 @@ public static class MeterProviderBuilderExtensions
{
/// <summary>
/// Used to track the number of times any variation of `WithElasticDefaults` is invoked by consuming
/// code acrosss all <see cref="MeterProviderBuilder"/> instances. This allows us to warn about potenital
/// code across all <see cref="MeterProviderBuilder"/> instances. This allows us to warn about potential
/// misconfigurations.
/// </summary>
private static int WithElasticDefaultsCallCount;
Expand Down Expand Up @@ -177,6 +179,9 @@ static void ConfigureBuilder(MeterProviderBuilder builder, BuilderState builderS

builder.ConfigureResource(r => r.WithElasticDefaults(builderState, services));

if (services is null)
builder.ConfigureServices(sc => sc.Configure<OtlpExporterOptions>(OtlpExporterDefaults.OtlpExporterOptions));

#if NET9_0_OR_GREATER
// On .NET 9, the contrib HTTP instrumentation is no longer required. If the dependency exists,
// it will be registered via the reflection-based assembly scanning.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
using Elastic.OpenTelemetry.Configuration;
using Elastic.OpenTelemetry.Core;
using Elastic.OpenTelemetry.Diagnostics;
using Elastic.OpenTelemetry.Exporters;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.Metrics;
using Microsoft.Extensions.Logging;
using OpenTelemetry.Exporter;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
Expand All @@ -28,7 +30,7 @@ public static class OpenTelemetryBuilderExtensions
{
/// <summary>
/// Used to track the number of times any variation of `WithElasticDefaults` is invoked by consuming
/// code acrosss all <see cref="IOpenTelemetryBuilder"/> instances. This allows us to warn about potenital
/// code across all <see cref="IOpenTelemetryBuilder"/> instances. This allows us to warn about potential
/// misconfigurations.
/// </summary>
private static int WithElasticDefaultsCallCount;
Expand Down Expand Up @@ -138,6 +140,8 @@ private static void ConfigureBuilder(IOpenTelemetryBuilder builder, BuilderState
var components = builderState.Components;
var options = builderState.Components.Options;

services?.Configure<OtlpExporterOptions>(OtlpExporterDefaults.OtlpExporterOptions);

if (options.Signals.HasFlagFast(Signals.Traces))
{
builder.WithTracing(b => b.WithElasticDefaults(components, builder.Services));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
using Elastic.OpenTelemetry.Configuration;
using Elastic.OpenTelemetry.Core;
using Elastic.OpenTelemetry.Diagnostics;
using Elastic.OpenTelemetry.Exporters;
using Elastic.OpenTelemetry.Instrumentation;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Exporter;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

// Matching namespace with TracerProviderBuilder
#pragma warning disable IDE0130 // Namespace does not match folder structure
namespace OpenTelemetry.Trace;
namespace OpenTelemetry;
#pragma warning restore IDE0130 // Namespace does not match folder structure

/// <summary>
Expand Down Expand Up @@ -167,6 +167,9 @@ private static void ConfigureBuilder(TracerProviderBuilder builder, BuilderState

builder.ConfigureResource(r => r.WithElasticDefaults(builderState, services));

if (services is null)
builder.ConfigureServices(sc => sc.Configure<OtlpExporterOptions>(OtlpExporterDefaults.OtlpExporterOptions));

#if NET9_0_OR_GREATER
if (SignalBuilder.InstrumentationAssemblyExists("OpenTelemetry.Instrumentation.Http.dll"))
{
Expand Down
Loading