Skip to content

Commit 8a1ea9a

Browse files
committed
Make sure histogram buckets work
1 parent 42af34f commit 8a1ea9a

File tree

5 files changed

+34
-12
lines changed

5 files changed

+34
-12
lines changed

src/Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
<PackageVersion Include="NUnit" Version="4.3.2" />
5151
<PackageVersion Include="NUnit.Analyzers" Version="4.6.0" />
5252
<PackageVersion Include="NUnit3TestAdapter" Version="5.0.0" />
53+
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.9.0" />
5354
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.9.0" />
5455
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
5556
<PackageVersion Include="Particular.Approvals" Version="2.0.1" />

src/ServiceControl.Audit/Auditing/Metrics/IngestionMetrics.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,17 @@ public class IngestionMetrics
1111
{
1212
public const string MeterName = "Particular.ServiceControl.Audit";
1313

14+
public static readonly string BatchDurationInstrumentName = $"{InstrumentPrefix}.batch_duration_seconds";
15+
public static readonly string MessageDurationInstrumentName = $"{InstrumentPrefix}.message_duration_seconds";
16+
1417
public IngestionMetrics(IMeterFactory meterFactory)
1518
{
1619
var meter = meterFactory.Create(MeterName, MeterVersion);
1720

18-
var durationBucketsInSeconds = new InstrumentAdvice<double> { HistogramBucketBoundaries = [0.01, 0.05, 0.1, 0.5, 1, 5] };
19-
20-
batchDuration = meter.CreateHistogram(CreateInstrumentName("batch_duration_seconds"), unit: "seconds", "Message batch processing duration in seconds", advice: durationBucketsInSeconds);
21-
ingestionDuration = meter.CreateHistogram(CreateInstrumentName("message_duration_seconds"), unit: "seconds", description: "Audit message processing duration in seconds", advice: durationBucketsInSeconds);
22-
consecutiveBatchFailureGauge = meter.CreateGauge<long>(CreateInstrumentName("consecutive_batch_failure_total"), description: "Consecutive audit ingestion batch failure");
23-
failureCounter = meter.CreateCounter<long>(CreateInstrumentName("failures_total"), description: "Audit ingestion failure count");
21+
batchDuration = meter.CreateHistogram<double>(BatchDurationInstrumentName, unit: "seconds", "Message batch processing duration in seconds");
22+
ingestionDuration = meter.CreateHistogram<double>(MessageDurationInstrumentName, unit: "seconds", description: "Audit message processing duration in seconds");
23+
consecutiveBatchFailureGauge = meter.CreateGauge<long>($"{InstrumentPrefix}.consecutive_batch_failure_total", description: "Consecutive audit ingestion batch failure");
24+
failureCounter = meter.CreateCounter<long>($"{InstrumentPrefix}.failures_total", description: "Audit ingestion failure count");
2425
}
2526

2627
public MessageMetrics BeginIngestion(MessageContext messageContext) => new(messageContext, ingestionDuration);
@@ -59,8 +60,6 @@ void RecordBatchOutcome(bool success)
5960
consecutiveBatchFailureGauge.Record(consecutiveBatchFailures);
6061
}
6162

62-
static string CreateInstrumentName(string instrumentName) => $"sc.audit.ingestion.{instrumentName.ToLower()}";
63-
6463
long consecutiveBatchFailures;
6564

6665
readonly Histogram<double> batchDuration;
@@ -69,6 +68,7 @@ void RecordBatchOutcome(bool success)
6968
readonly Counter<long> failureCounter;
7069

7170
const string MeterVersion = "0.1.0";
71+
const string InstrumentPrefix = "sc.audit.ingestion";
7272

7373
static readonly string SagaUpdateMessageType = typeof(SagaUpdatedMessage).FullName;
7474
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace ServiceControl.Audit.Auditing.Metrics;
2+
3+
using OpenTelemetry.Metrics;
4+
5+
public static class IngestionMetricsConfiguration
6+
{
7+
public static void AddIngestionMetrics(this MeterProviderBuilder builder)
8+
{
9+
builder.AddMeter(IngestionMetrics.MeterName);
10+
11+
// Note: Views can be replaced by new InstrumentAdvice<double> { HistogramBucketBoundaries = [...] }; once we can update to the latest OpenTelemetry packages
12+
builder.AddView(
13+
instrumentName: IngestionMetrics.MessageDurationInstrumentName,
14+
new ExplicitBucketHistogramConfiguration { Boundaries = [0.01, 0.05, 0.1, 0.5, 1, 5] });
15+
builder.AddView(
16+
instrumentName: IngestionMetrics.BatchDurationInstrumentName,
17+
new ExplicitBucketHistogramConfiguration { Boundaries = [0.01, 0.05, 0.1, 0.5, 1, 5] });
18+
}
19+
}

src/ServiceControl.Audit/HostApplicationBuilderExtensions.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,12 @@ public static void AddMetrics(this IHostApplicationBuilder builder, Settings set
112112
autoGenerateServiceInstanceId: true))
113113
.WithMetrics(b =>
114114
{
115-
b.AddMeter(IngestionMetrics.MeterName);
116-
b.AddOtlpExporter(e =>
115+
b.AddIngestionMetrics();
116+
b.AddOtlpExporter(e => e.Endpoint = otelMetricsUri);
117+
if (Debugger.IsAttached)
117118
{
118-
e.Endpoint = otelMetricsUri;
119-
});
119+
b.AddConsoleExporter();
120+
}
120121
});
121122

122123
var logger = LogManager.GetLogger(typeof(HostApplicationBuilderExtensions));

src/ServiceControl.Audit/ServiceControl.Audit.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<PackageReference Include="NServiceBus.CustomChecks" />
3030
<PackageReference Include="NServiceBus.Extensions.Hosting" />
3131
<PackageReference Include="NServiceBus.Extensions.Logging" />
32+
<PackageReference Include="OpenTelemetry.Exporter.Console" />
3233
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
3334
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
3435
<PackageReference Include="System.Diagnostics.DiagnosticSource" />

0 commit comments

Comments
 (0)