Add Exemplars for 1.6.0 prerelease versions (#4553)
This commit is contained in:
parent
6e73bb9acf
commit
b911e7e118
|
|
@ -110,8 +110,7 @@ appBuilder.Services.AddOpenTelemetry()
|
|||
// Ensure the MeterProvider subscribes to any custom Meters.
|
||||
builder
|
||||
.AddMeter(Instrumentation.MeterName)
|
||||
|
||||
// .SetExemplarFilter(new TraceBasedExemplarFilter())
|
||||
.SetExemplarFilter(new TraceBasedExemplarFilter())
|
||||
.AddRuntimeInstrumentation()
|
||||
.AddHttpClientInstrumentation()
|
||||
.AddAspNetCoreInstrumentation();
|
||||
|
|
|
|||
|
|
@ -2,6 +2,10 @@
|
|||
|
||||
## Unreleased
|
||||
|
||||
* Add back support for Exemplars. See [exemplars](../../docs/metrics/customizing-the-sdk/README.md#exemplars)
|
||||
for instructions to enable exemplars.
|
||||
([#4553](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4553))
|
||||
|
||||
## 1.5.0
|
||||
|
||||
Released 2023-Jun-05
|
||||
|
|
|
|||
|
|
@ -189,7 +189,6 @@ namespace OpenTelemetry.Exporter
|
|||
}
|
||||
|
||||
var exemplarString = new StringBuilder();
|
||||
/* Commenting out as Exemplars is marked internal
|
||||
foreach (var exemplar in metricPoint.GetExemplars())
|
||||
{
|
||||
if (exemplar.Timestamp != default)
|
||||
|
|
@ -220,7 +219,6 @@ namespace OpenTelemetry.Exporter
|
|||
exemplarString.AppendLine();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
msg = new StringBuilder();
|
||||
msg.Append('(');
|
||||
|
|
|
|||
|
|
@ -2,6 +2,10 @@
|
|||
|
||||
## Unreleased
|
||||
|
||||
* Add back support for Exemplars. See [exemplars](../../docs/metrics/customizing-the-sdk/README.md#exemplars)
|
||||
for instructions to enable exemplars.
|
||||
([#4553](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4553))
|
||||
|
||||
## 1.5.0
|
||||
|
||||
Released 2023-Jun-05
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ using System.Collections.Concurrent;
|
|||
using System.Reflection;
|
||||
using System.Reflection.Emit;
|
||||
using System.Runtime.CompilerServices;
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.Collections;
|
||||
using OpenTelemetry.Metrics;
|
||||
using OtlpCollector = OpenTelemetry.Proto.Collector.Metrics.V1;
|
||||
|
|
@ -269,7 +270,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
|
|||
}
|
||||
}
|
||||
|
||||
/* Commenting out as Exemplars is marked internal
|
||||
var exemplars = metricPoint.GetExemplars();
|
||||
foreach (var examplar in exemplars)
|
||||
{
|
||||
|
|
@ -303,7 +303,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
|
|||
dataPoint.Exemplars.Add(otlpExemplar);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
histogram.DataPoints.Add(dataPoint);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
OpenTelemetry.Metrics.AlwaysOffExemplarFilter
|
||||
OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.AlwaysOnExemplarFilter
|
||||
OpenTelemetry.Metrics.AlwaysOnExemplarFilter.AlwaysOnExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.Exemplar
|
||||
OpenTelemetry.Metrics.Exemplar.DoubleValue.get -> double
|
||||
OpenTelemetry.Metrics.Exemplar.Exemplar() -> void
|
||||
OpenTelemetry.Metrics.Exemplar.SpanId.get -> System.Diagnostics.ActivitySpanId?
|
||||
OpenTelemetry.Metrics.Exemplar.Timestamp.get -> System.DateTimeOffset
|
||||
OpenTelemetry.Metrics.Exemplar.TraceId.get -> System.Diagnostics.ActivityTraceId?
|
||||
OpenTelemetry.Metrics.ExemplarFilter
|
||||
OpenTelemetry.Metrics.ExemplarFilter.ExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]!
|
||||
OpenTelemetry.Metrics.TraceBasedExemplarFilter
|
||||
OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>>
|
||||
~override OpenTelemetry.Metrics.AlwaysOffExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOffExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOnExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOnExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.TraceBasedExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.TraceBasedExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
OpenTelemetry.Metrics.AlwaysOffExemplarFilter
|
||||
OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.AlwaysOnExemplarFilter
|
||||
OpenTelemetry.Metrics.AlwaysOnExemplarFilter.AlwaysOnExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.Exemplar
|
||||
OpenTelemetry.Metrics.Exemplar.DoubleValue.get -> double
|
||||
OpenTelemetry.Metrics.Exemplar.Exemplar() -> void
|
||||
OpenTelemetry.Metrics.Exemplar.SpanId.get -> System.Diagnostics.ActivitySpanId?
|
||||
OpenTelemetry.Metrics.Exemplar.Timestamp.get -> System.DateTimeOffset
|
||||
OpenTelemetry.Metrics.Exemplar.TraceId.get -> System.Diagnostics.ActivityTraceId?
|
||||
OpenTelemetry.Metrics.ExemplarFilter
|
||||
OpenTelemetry.Metrics.ExemplarFilter.ExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]!
|
||||
OpenTelemetry.Metrics.TraceBasedExemplarFilter
|
||||
OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>>
|
||||
~override OpenTelemetry.Metrics.AlwaysOffExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOffExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOnExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOnExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.TraceBasedExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.TraceBasedExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
OpenTelemetry.Metrics.AlwaysOffExemplarFilter
|
||||
OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.AlwaysOnExemplarFilter
|
||||
OpenTelemetry.Metrics.AlwaysOnExemplarFilter.AlwaysOnExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.Exemplar
|
||||
OpenTelemetry.Metrics.Exemplar.DoubleValue.get -> double
|
||||
OpenTelemetry.Metrics.Exemplar.Exemplar() -> void
|
||||
OpenTelemetry.Metrics.Exemplar.SpanId.get -> System.Diagnostics.ActivitySpanId?
|
||||
OpenTelemetry.Metrics.Exemplar.Timestamp.get -> System.DateTimeOffset
|
||||
OpenTelemetry.Metrics.Exemplar.TraceId.get -> System.Diagnostics.ActivityTraceId?
|
||||
OpenTelemetry.Metrics.ExemplarFilter
|
||||
OpenTelemetry.Metrics.ExemplarFilter.ExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]!
|
||||
OpenTelemetry.Metrics.TraceBasedExemplarFilter
|
||||
OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>>
|
||||
~override OpenTelemetry.Metrics.AlwaysOffExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOffExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOnExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOnExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.TraceBasedExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.TraceBasedExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
OpenTelemetry.Metrics.AlwaysOffExemplarFilter
|
||||
OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.AlwaysOnExemplarFilter
|
||||
OpenTelemetry.Metrics.AlwaysOnExemplarFilter.AlwaysOnExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.Exemplar
|
||||
OpenTelemetry.Metrics.Exemplar.DoubleValue.get -> double
|
||||
OpenTelemetry.Metrics.Exemplar.Exemplar() -> void
|
||||
OpenTelemetry.Metrics.Exemplar.SpanId.get -> System.Diagnostics.ActivitySpanId?
|
||||
OpenTelemetry.Metrics.Exemplar.Timestamp.get -> System.DateTimeOffset
|
||||
OpenTelemetry.Metrics.Exemplar.TraceId.get -> System.Diagnostics.ActivityTraceId?
|
||||
OpenTelemetry.Metrics.ExemplarFilter
|
||||
OpenTelemetry.Metrics.ExemplarFilter.ExemplarFilter() -> void
|
||||
OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]!
|
||||
OpenTelemetry.Metrics.TraceBasedExemplarFilter
|
||||
OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>>
|
||||
~override OpenTelemetry.Metrics.AlwaysOffExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOffExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOnExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.AlwaysOnExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.TraceBasedExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
~override OpenTelemetry.Metrics.TraceBasedExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
|
||||
|
|
@ -2,6 +2,10 @@
|
|||
|
||||
## Unreleased
|
||||
|
||||
* Add back support for Exemplars. See [exemplars](../../docs/metrics/customizing-the-sdk/README.md#exemplars)
|
||||
for instructions to enable exemplars.
|
||||
([#4553](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4553))
|
||||
|
||||
## 1.5.0
|
||||
|
||||
Released 2023-Jun-05
|
||||
|
|
|
|||
|
|
@ -310,7 +310,7 @@ namespace OpenTelemetry.Metrics
|
|||
/// <param name="meterProviderBuilder"><see cref="MeterProviderBuilder"/>.</param>
|
||||
/// <param name="exemplarFilter"><see cref="ExemplarFilter"/> ExemplarFilter to use.</param>
|
||||
/// <returns>The supplied <see cref="MeterProviderBuilder"/> for chaining.</returns>
|
||||
internal static MeterProviderBuilder SetExemplarFilter(this MeterProviderBuilder meterProviderBuilder, ExemplarFilter exemplarFilter)
|
||||
public static MeterProviderBuilder SetExemplarFilter(this MeterProviderBuilder meterProviderBuilder, ExemplarFilter exemplarFilter)
|
||||
{
|
||||
Guard.ThrowIfNull(exemplarFilter);
|
||||
|
||||
|
|
@ -325,7 +325,6 @@ namespace OpenTelemetry.Metrics
|
|||
return meterProviderBuilder;
|
||||
}
|
||||
|
||||
#pragma warning disable SA1202 // `public` members should come before `internal` members
|
||||
/// <summary>
|
||||
/// Run the given actions to initialize the <see cref="MeterProvider"/>.
|
||||
/// </summary>
|
||||
|
|
@ -340,6 +339,5 @@ namespace OpenTelemetry.Metrics
|
|||
|
||||
return null;
|
||||
}
|
||||
#pragma warning restore SA1202
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ namespace OpenTelemetry.Metrics;
|
|||
/// An ExemplarFilter which makes no measurements eligible for being an Exemplar.
|
||||
/// Using this ExemplarFilter is as good as disabling Exemplar feature.
|
||||
/// </summary>
|
||||
internal sealed class AlwaysOffExemplarFilter : ExemplarFilter
|
||||
public sealed class AlwaysOffExemplarFilter : ExemplarFilter
|
||||
{
|
||||
public override bool ShouldSample(long value, ReadOnlySpan<KeyValuePair<string, object>> tags)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ namespace OpenTelemetry.Metrics;
|
|||
/// <summary>
|
||||
/// An ExemplarFilter which makes all measurements eligible for being an Exemplar.
|
||||
/// </summary>
|
||||
internal sealed class AlwaysOnExemplarFilter : ExemplarFilter
|
||||
public sealed class AlwaysOnExemplarFilter : ExemplarFilter
|
||||
{
|
||||
public override bool ShouldSample(long value, ReadOnlySpan<KeyValuePair<string, object>> tags)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace OpenTelemetry.Metrics
|
|||
/// <summary>
|
||||
/// Represents an Exemplar data.
|
||||
/// </summary>
|
||||
internal struct Exemplar
|
||||
public struct Exemplar
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the timestamp (UTC).
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace OpenTelemetry.Metrics;
|
|||
/// <summary>
|
||||
/// The base class for defining Exemplar Filter.
|
||||
/// </summary>
|
||||
internal abstract class ExemplarFilter
|
||||
public abstract class ExemplarFilter
|
||||
{
|
||||
/// <summary>
|
||||
/// Determines if a given measurement is eligible for being
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace OpenTelemetry.Metrics;
|
|||
/// An ExemplarFilter which makes those measurements eligible for being an Exemplar,
|
||||
/// which are recorded in the context of a sampled parent activity (span).
|
||||
/// </summary>
|
||||
internal sealed class TraceBasedExemplarFilter : ExemplarFilter
|
||||
public sealed class TraceBasedExemplarFilter : ExemplarFilter
|
||||
{
|
||||
public override bool ShouldSample(long value, ReadOnlySpan<KeyValuePair<string, object>> tags)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -336,7 +336,7 @@ namespace OpenTelemetry.Metrics
|
|||
/// </summary>
|
||||
/// <returns><see cref="Exemplar"/>.</returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal readonly Exemplar[] GetExemplars()
|
||||
public readonly Exemplar[] GetExemplars()
|
||||
{
|
||||
// TODO: Do not expose Exemplar data structure (array now)
|
||||
return this.mpComponents?.Exemplars ?? Array.Empty<Exemplar>();
|
||||
|
|
|
|||
Loading…
Reference in New Issue