From f813e1f28a6cdb795de60aafc0da9753b7757d1b Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Thu, 12 Dec 2024 13:18:24 +0100 Subject: [PATCH 1/9] WIP-Add Exemplars to Cart Service --- src/cartservice/src/Program.cs | 1 + src/cartservice/src/cartservice.csproj | 28 +++++++++---------- .../src/cartstore/ValkeyCartStore.cs | 19 +++++++++++++ src/cartservice/src/services/CartService.cs | 7 ++--- .../tests/cartservice.tests.csproj | 10 +++---- 5 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/cartservice/src/Program.cs b/src/cartservice/src/Program.cs index e4e6a28e11..cb41bdb304 100644 --- a/src/cartservice/src/Program.cs +++ b/src/cartservice/src/Program.cs @@ -71,6 +71,7 @@ .AddProcessInstrumentation() .AddRuntimeInstrumentation() .AddAspNetCoreInstrumentation() + .SetExemplarFilter(ExemplarFilterType.TraceBased) .AddOtlpExporter()); OpenFeature.Api.Instance.AddHooks(new TracingHook()); builder.Services.AddGrpc(); diff --git a/src/cartservice/src/cartservice.csproj b/src/cartservice/src/cartservice.csproj index 5b5e31373f..2a0670badd 100644 --- a/src/cartservice/src/cartservice.csproj +++ b/src/cartservice/src/cartservice.csproj @@ -15,22 +15,22 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - + diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cartservice/src/cartstore/ValkeyCartStore.cs index aa79afedea..ffdf14a962 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cartservice/src/cartstore/ValkeyCartStore.cs @@ -7,6 +7,8 @@ using StackExchange.Redis; using Google.Protobuf; using Microsoft.Extensions.Logging; +using System.Diagnostics.Metrics; +using System.Diagnostics; namespace cartservice.cartstore; @@ -23,6 +25,11 @@ public class ValkeyCartStore : ICartStore private readonly byte[] _emptyCartBytes; private readonly string _connectionString; + private static readonly ActivitySource CartActivitySource = new("OpenTelemetry.Demo.Cart"); + private static readonly Meter CartMeter = new Meter("OpenTelemetry.Demo.Cart"); + private static readonly Histogram addItemHistogram = CartMeter.CreateHistogram("app.cart.add_item.latency"); + private static readonly Histogram getCartHistogram = CartMeter.CreateHistogram("app.cart.get_cart.latency"); + private readonly ConfigurationOptions _redisConnectionOptions; public ValkeyCartStore(ILogger logger, string valkeyAddress) @@ -105,6 +112,7 @@ private void EnsureRedisConnected() public async Task AddItemAsync(string userId, string productId, int quantity) { + var stopwatch = Stopwatch.StartNew(); _logger.LogInformation("AddItemAsync called with userId={userId}, productId={productId}, quantity={quantity}", userId, productId, quantity); try @@ -146,6 +154,11 @@ public async Task AddItemAsync(string userId, string productId, int quantity) { throw new RpcException(new Status(StatusCode.FailedPrecondition, $"Can't access cart storage. {ex}")); } + finally + { + _logger.LogInformation("addItemHistogram should be set to {stopwatch.ElapsedTicks} µs", stopwatch.ElapsedTicks); + addItemHistogram.Record(stopwatch.ElapsedTicks); + } } public async Task EmptyCartAsync(string userId) @@ -169,6 +182,7 @@ public async Task EmptyCartAsync(string userId) public async Task GetCartAsync(string userId) { + var stopwatch = Stopwatch.StartNew(); _logger.LogInformation("GetCartAsync called with userId={userId}", userId); try @@ -192,6 +206,11 @@ public async Task EmptyCartAsync(string userId) { throw new RpcException(new Status(StatusCode.FailedPrecondition, $"Can't access cart storage. {ex}")); } + finally + { + _logger.LogInformation("getCartHistogram should be set to {stopwatch.ElapsedTicks} µs", stopwatch.ElapsedTicks); + getCartHistogram.Record(stopwatch.ElapsedTicks); + } } public bool Ping() diff --git a/src/cartservice/src/services/CartService.cs b/src/cartservice/src/services/CartService.cs index d071c37080..093b3bda2d 100644 --- a/src/cartservice/src/services/CartService.cs +++ b/src/cartservice/src/services/CartService.cs @@ -4,7 +4,6 @@ using System.Threading.Tasks; using System; using Grpc.Core; -using OpenTelemetry.Trace; using cartservice.cartstore; using OpenFeature; using Oteldemo; @@ -41,7 +40,7 @@ public override async Task AddItem(AddItemRequest request, ServerCallCont } catch (RpcException ex) { - activity?.RecordException(ex); + activity?.AddException(ex); activity?.SetStatus(ActivityStatusCode.Error, ex.Message); throw; } @@ -67,7 +66,7 @@ public override async Task GetCart(GetCartRequest request, ServerCallConte } catch (RpcException ex) { - activity?.RecordException(ex); + activity?.AddException(ex); activity?.SetStatus(ActivityStatusCode.Error, ex.Message); throw; } @@ -92,7 +91,7 @@ public override async Task EmptyCart(EmptyCartRequest request, ServerCall } catch (RpcException ex) { - Activity.Current?.RecordException(ex); + Activity.Current?.AddException(ex); Activity.Current?.SetStatus(ActivityStatusCode.Error, ex.Message); throw; } diff --git a/src/cartservice/tests/cartservice.tests.csproj b/src/cartservice/tests/cartservice.tests.csproj index 4c7a083d85..fd079fc30f 100644 --- a/src/cartservice/tests/cartservice.tests.csproj +++ b/src/cartservice/tests/cartservice.tests.csproj @@ -5,11 +5,11 @@ - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 04538b7b1419fef49d482657b28051c5898b189c Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Thu, 12 Dec 2024 14:56:19 +0100 Subject: [PATCH 2/9] Bump AspNetCore instrumentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Piotr Kiełkowicz --- src/cartservice/src/cartservice.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cartservice/src/cartservice.csproj b/src/cartservice/src/cartservice.csproj index 2a0670badd..b3ac8927f7 100644 --- a/src/cartservice/src/cartservice.csproj +++ b/src/cartservice/src/cartservice.csproj @@ -19,7 +19,7 @@ - + From 28ed0f4258b340db29be227d97fbd74d9412db2c Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Thu, 12 Dec 2024 15:21:04 +0100 Subject: [PATCH 3/9] Add source and meter --- src/cartservice/src/Program.cs | 2 ++ src/cartservice/src/cartservice.csproj | 2 +- src/cartservice/src/cartstore/ValkeyCartStore.cs | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cartservice/src/Program.cs b/src/cartservice/src/Program.cs index cb41bdb304..399d3d107d 100644 --- a/src/cartservice/src/Program.cs +++ b/src/cartservice/src/Program.cs @@ -61,6 +61,7 @@ builder.Services.AddOpenTelemetry() .ConfigureResource(appResourceBuilder) .WithTracing(tracerBuilder => tracerBuilder + .AddSource("OpenTelemetry.Demo.Cart.Source") .AddRedisInstrumentation( options => options.SetVerboseDatabaseStatements = true) .AddAspNetCoreInstrumentation() @@ -68,6 +69,7 @@ .AddHttpClientInstrumentation() .AddOtlpExporter()) .WithMetrics(meterBuilder => meterBuilder + .AddMeter("OpenTelemetry.Demo.Cart.Meter") .AddProcessInstrumentation() .AddRuntimeInstrumentation() .AddAspNetCoreInstrumentation() diff --git a/src/cartservice/src/cartservice.csproj b/src/cartservice/src/cartservice.csproj index b3ac8927f7..d62a131f7f 100644 --- a/src/cartservice/src/cartservice.csproj +++ b/src/cartservice/src/cartservice.csproj @@ -30,7 +30,7 @@ - + diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cartservice/src/cartstore/ValkeyCartStore.cs index ffdf14a962..1410be86d0 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cartservice/src/cartstore/ValkeyCartStore.cs @@ -25,8 +25,8 @@ public class ValkeyCartStore : ICartStore private readonly byte[] _emptyCartBytes; private readonly string _connectionString; - private static readonly ActivitySource CartActivitySource = new("OpenTelemetry.Demo.Cart"); - private static readonly Meter CartMeter = new Meter("OpenTelemetry.Demo.Cart"); + private static readonly ActivitySource CartActivitySource = new("OpenTelemetry.Demo.Cart.Source"); + private static readonly Meter CartMeter = new Meter("OpenTelemetry.Demo.Cart.Meter"); private static readonly Histogram addItemHistogram = CartMeter.CreateHistogram("app.cart.add_item.latency"); private static readonly Histogram getCartHistogram = CartMeter.CreateHistogram("app.cart.get_cart.latency"); From 097f7d48cca5b7b4694dfa34a5b8eb213249124b Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Thu, 12 Dec 2024 16:57:17 +0100 Subject: [PATCH 4/9] Remove logs and add boundaries --- src/cartservice/src/Program.cs | 6 ++++++ src/cartservice/src/cartstore/ValkeyCartStore.cs | 2 -- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cartservice/src/Program.cs b/src/cartservice/src/Program.cs index 399d3d107d..2f616d0c9f 100644 --- a/src/cartservice/src/Program.cs +++ b/src/cartservice/src/Program.cs @@ -70,6 +70,12 @@ .AddOtlpExporter()) .WithMetrics(meterBuilder => meterBuilder .AddMeter("OpenTelemetry.Demo.Cart.Meter") + .AddView( + instrumentName: "CartLatency", + new ExplicitBucketHistogramConfiguration { + Boundaries = new double[] {300000, 400000, 500000, 600000, 700000, 800000, 900000} + } + ) .AddProcessInstrumentation() .AddRuntimeInstrumentation() .AddAspNetCoreInstrumentation() diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cartservice/src/cartstore/ValkeyCartStore.cs index 1410be86d0..a003d9b690 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cartservice/src/cartstore/ValkeyCartStore.cs @@ -156,7 +156,6 @@ public async Task AddItemAsync(string userId, string productId, int quantity) } finally { - _logger.LogInformation("addItemHistogram should be set to {stopwatch.ElapsedTicks} µs", stopwatch.ElapsedTicks); addItemHistogram.Record(stopwatch.ElapsedTicks); } } @@ -208,7 +207,6 @@ public async Task EmptyCartAsync(string userId) } finally { - _logger.LogInformation("getCartHistogram should be set to {stopwatch.ElapsedTicks} µs", stopwatch.ElapsedTicks); getCartHistogram.Record(stopwatch.ElapsedTicks); } } From 40769c58fbd686d80cb878074c332f9569201922 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Fri, 13 Dec 2024 11:13:07 +0100 Subject: [PATCH 5/9] Add HistogramBucketBoundaries --- src/cartservice/src/Program.cs | 6 ------ .../src/cartstore/ValkeyCartStore.cs | 20 +++++++++++++++++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/cartservice/src/Program.cs b/src/cartservice/src/Program.cs index 2f616d0c9f..399d3d107d 100644 --- a/src/cartservice/src/Program.cs +++ b/src/cartservice/src/Program.cs @@ -70,12 +70,6 @@ .AddOtlpExporter()) .WithMetrics(meterBuilder => meterBuilder .AddMeter("OpenTelemetry.Demo.Cart.Meter") - .AddView( - instrumentName: "CartLatency", - new ExplicitBucketHistogramConfiguration { - Boundaries = new double[] {300000, 400000, 500000, 600000, 700000, 800000, 900000} - } - ) .AddProcessInstrumentation() .AddRuntimeInstrumentation() .AddAspNetCoreInstrumentation() diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cartservice/src/cartstore/ValkeyCartStore.cs index a003d9b690..50916b4545 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cartservice/src/cartstore/ValkeyCartStore.cs @@ -27,8 +27,24 @@ public class ValkeyCartStore : ICartStore private static readonly ActivitySource CartActivitySource = new("OpenTelemetry.Demo.Cart.Source"); private static readonly Meter CartMeter = new Meter("OpenTelemetry.Demo.Cart.Meter"); - private static readonly Histogram addItemHistogram = CartMeter.CreateHistogram("app.cart.add_item.latency"); - private static readonly Histogram getCartHistogram = CartMeter.CreateHistogram("app.cart.get_cart.latency"); + private static readonly Histogram addItemHistogram = + CartMeter.CreateHistogram + ( + "app.cart.add_item.latency", + advice: new InstrumentAdvice + { + HistogramBucketBoundaries = [ 500000, 600000, 700000, 800000, 900000, 1000000, 1100000 ] + } + ); + private static readonly Histogram getCartHistogram = + CartMeter.CreateHistogram + ( + "app.cart.get_cart.latency", + advice: new InstrumentAdvice + { + HistogramBucketBoundaries = [ 300000, 400000, 500000, 600000, 700000, 800000, 900000 ] + } + ); private readonly ConfigurationOptions _redisConnectionOptions; From 1ce5e730a1093f6add4f318c14d17e18b5c830bc Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Fri, 13 Dec 2024 11:15:09 +0100 Subject: [PATCH 6/9] Drop trailing space --- src/cartservice/src/cartstore/ValkeyCartStore.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cartservice/src/cartstore/ValkeyCartStore.cs index 50916b4545..cf4d3a834a 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cartservice/src/cartstore/ValkeyCartStore.cs @@ -33,7 +33,7 @@ public class ValkeyCartStore : ICartStore "app.cart.add_item.latency", advice: new InstrumentAdvice { - HistogramBucketBoundaries = [ 500000, 600000, 700000, 800000, 900000, 1000000, 1100000 ] + HistogramBucketBoundaries = [ 500000, 600000, 700000, 800000, 900000, 1000000, 1100000 ] } ); private static readonly Histogram getCartHistogram = @@ -42,7 +42,7 @@ public class ValkeyCartStore : ICartStore "app.cart.get_cart.latency", advice: new InstrumentAdvice { - HistogramBucketBoundaries = [ 300000, 400000, 500000, 600000, 700000, 800000, 900000 ] + HistogramBucketBoundaries = [ 300000, 400000, 500000, 600000, 700000, 800000, 900000 ] } ); From aa1725d8cf82e5fce9300f94486b6fb057470c5c Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Fri, 13 Dec 2024 11:20:19 +0100 Subject: [PATCH 7/9] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Piotr Kiełkowicz --- src/cartservice/src/Program.cs | 4 ++-- src/cartservice/src/cartstore/ValkeyCartStore.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cartservice/src/Program.cs b/src/cartservice/src/Program.cs index 399d3d107d..6c52229ce4 100644 --- a/src/cartservice/src/Program.cs +++ b/src/cartservice/src/Program.cs @@ -61,7 +61,7 @@ builder.Services.AddOpenTelemetry() .ConfigureResource(appResourceBuilder) .WithTracing(tracerBuilder => tracerBuilder - .AddSource("OpenTelemetry.Demo.Cart.Source") + .AddSource("OpenTelemetry.Demo.Cart") .AddRedisInstrumentation( options => options.SetVerboseDatabaseStatements = true) .AddAspNetCoreInstrumentation() @@ -69,7 +69,7 @@ .AddHttpClientInstrumentation() .AddOtlpExporter()) .WithMetrics(meterBuilder => meterBuilder - .AddMeter("OpenTelemetry.Demo.Cart.Meter") + .AddMeter("OpenTelemetry.Demo.Cart") .AddProcessInstrumentation() .AddRuntimeInstrumentation() .AddAspNetCoreInstrumentation() diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cartservice/src/cartstore/ValkeyCartStore.cs index cf4d3a834a..c1b75f44b3 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cartservice/src/cartstore/ValkeyCartStore.cs @@ -25,8 +25,8 @@ public class ValkeyCartStore : ICartStore private readonly byte[] _emptyCartBytes; private readonly string _connectionString; - private static readonly ActivitySource CartActivitySource = new("OpenTelemetry.Demo.Cart.Source"); - private static readonly Meter CartMeter = new Meter("OpenTelemetry.Demo.Cart.Meter"); + private static readonly ActivitySource CartActivitySource = new("OpenTelemetry.Demo.Cart"); + private static readonly Meter CartMeter = new Meter("OpenTelemetry.Demo.Cart"); private static readonly Histogram addItemHistogram = CartMeter.CreateHistogram ( From 74fe9f55dc4d91f03a24aad8a88019d1e2d65f9c Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Fri, 13 Dec 2024 11:29:21 +0100 Subject: [PATCH 8/9] changelog --- CHANGELOG.md | 9 +++++---- src/cartservice/src/cartstore/ValkeyCartStore.cs | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c9a41b936..d23ee07c0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,6 @@ the release. ## Unreleased -* [flagd] Update `paymentServiceFailure` to use a list of variants. -* [paymentservice] Add loyalty level attributes to spans. - Added `service.name` to logs. - ([#1815](https://github.com/open-telemetry/opentelemetry-demo/pull/1815)) * [grafana] Update grafana to 11.3.0 ([#1764](https://github.com/open-telemetry/opentelemetry-demo/pull/1764)) * [chore] Move build args to .env file @@ -29,8 +25,13 @@ the release. ([#1794](https://github.com/open-telemetry/opentelemetry-demo/pull/1784)) * [paymentservice] Add nodejs instrumentation for runtime metrics ([#1797](https://github.com/open-telemetry/opentelemetry-demo/pull/1797)) +* [flagd and paymentservice] Update `paymentServiceFailure` to use a list of + variants and add loyalty level attributes to spans. Added `service.name` to logs. + ([#1815](https://github.com/open-telemetry/opentelemetry-demo/pull/1815)) * [accounting] rename accountingservice to accounting ([#1827](https://github.com/open-telemetry/opentelemetry-demo/pull/1827)) +* [cartservice] - Add Exemplars to Cart Service + ([#1830](https://github.com/open-telemetry/opentelemetry-demo/pull/1830)) ## 1.12.0 diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cartservice/src/cartstore/ValkeyCartStore.cs index c1b75f44b3..b53df87470 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cartservice/src/cartstore/ValkeyCartStore.cs @@ -32,7 +32,7 @@ public class ValkeyCartStore : ICartStore ( "app.cart.add_item.latency", advice: new InstrumentAdvice - { + { HistogramBucketBoundaries = [ 500000, 600000, 700000, 800000, 900000, 1000000, 1100000 ] } ); @@ -41,7 +41,7 @@ public class ValkeyCartStore : ICartStore ( "app.cart.get_cart.latency", advice: new InstrumentAdvice - { + { HistogramBucketBoundaries = [ 300000, 400000, 500000, 600000, 700000, 800000, 900000 ] } ); From 626d2671d0c65f7d85cb7a719d7633ba53129623 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Fri, 13 Dec 2024 11:32:00 +0100 Subject: [PATCH 9/9] indent --- .../src/cartstore/ValkeyCartStore.cs | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cartservice/src/cartstore/ValkeyCartStore.cs index b53df87470..1a16dcc6c0 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cartservice/src/cartstore/ValkeyCartStore.cs @@ -27,25 +27,18 @@ public class ValkeyCartStore : ICartStore private static readonly ActivitySource CartActivitySource = new("OpenTelemetry.Demo.Cart"); private static readonly Meter CartMeter = new Meter("OpenTelemetry.Demo.Cart"); - private static readonly Histogram addItemHistogram = - CartMeter.CreateHistogram - ( - "app.cart.add_item.latency", - advice: new InstrumentAdvice - { - HistogramBucketBoundaries = [ 500000, 600000, 700000, 800000, 900000, 1000000, 1100000 ] - } - ); - private static readonly Histogram getCartHistogram = - CartMeter.CreateHistogram - ( - "app.cart.get_cart.latency", - advice: new InstrumentAdvice - { - HistogramBucketBoundaries = [ 300000, 400000, 500000, 600000, 700000, 800000, 900000 ] - } - ); - + private static readonly Histogram addItemHistogram = CartMeter.CreateHistogram( + "app.cart.add_item.latency", + advice: new InstrumentAdvice + { + HistogramBucketBoundaries = [ 500000, 600000, 700000, 800000, 900000, 1000000, 1100000 ] + }); + private static readonly Histogram getCartHistogram = CartMeter.CreateHistogram( + "app.cart.get_cart.latency", + advice: new InstrumentAdvice + { + HistogramBucketBoundaries = [ 300000, 400000, 500000, 600000, 700000, 800000, 900000 ] + }); private readonly ConfigurationOptions _redisConnectionOptions; public ValkeyCartStore(ILogger logger, string valkeyAddress)