OpenTelemetry Demo 3.0
We are planning a blog post to share more details about this major release. Stay tuned on opentelemetry.io/blog.
💥 Breaking changes
Telemetry attribute renaming to the demo.* prefix. Custom demo attributes previously used the app.* prefix, which conflicts with client-side instrumentation conventions. All demo-specific attributes have been renamed to demo.* across every business domain. If you have dashboards, alerts, or queries referencing the old app.* attributes, they will need to be updated.
- Product:
demo.product.id,demo.product.name,demo.product.quantity,demo.product.count,demo.product.recommended.count,demo.product.review.question(#3355, #3370, #3371, #3372, #3374, #3376, #3454) - Ad:
demo.ad.*(#3387) - Order, Cart, Payment:
demo.order.*,demo.cart.*,demo.payment*(#3389, #3390, #3484) - Shipping:
demo.shipping.*(#3391) - Exchange, User Context, Recommendation, Notification, Other (#3393)
- Metrics:
demo.ads.ad_requests,demo.cart.add_item.latency,demo.cart.get_cart.latency,demo.currency,demo.payment.transactions, plus remaining recommendation/review metrics (#3399, #3401) - Duplicate frontend request metric removed (#3400)
- Dropped email-recipient attribute removed for privacy (#3397)
- Misc attribute domain dissolved into proper categories (#3482)
- Final cleanup of leftover naming (#3435)
All by @fbourgey.
Services removed:
product-reviewsservice removed, including its frontend and load-generator references (#3567, #3568, #3587) by @julianocosta89- LLM service removed (#3599) by @julianocosta89
- Tracetest removed (#3602) by @julianocosta89
🚀 Deployment modes
- Modular Docker Compose with layered
-ffiles, so services can be composed selectively (#3229) by @puckpuck - Podman support added alongside Docker (#3307) by @osullivandonal
- Opt-in read-only root filesystem for checkout, product-catalog, and shipping (#3658) by @bhuvan-somisetty
- Generated Kubernetes manifests removed from the repo (#3236) by @puckpuck
Agentic
New Agent, MCP, and Chatbot services added to the demo (#3455) by @fali007, plus follow-up hardening:
- Services moved to the OTLP HTTP exporter (#3745) by @julianocosta89
- Fixed VCR fuzzy match (#3749) by @fali007
- Fixed MCP/Agent pod dependency ordering (#3609) and documentation issues (#3588) by @fali007
CHATBOT_HOST/CHATBOT_PORTwiring fixed in the frontend-proxy compose file (#3570) by @ps48
Profiling
- OTel Collector eBPF profiler support added via firepit (#3333) by @osullivandonal
- firepit bumped to its first tagged release, v0.1.0 (#3524) by @florianl
- Resource attributes added to profiles (#3659) by @julianocosta89
📊 Self-observability & OpAMP Server
- Self-observability dashboard added (#3621), extended to fraud-detection and the Kafka Java service (#3653) by @cijothomas
- OpAMP status reporting for the Collector (#3566) by @cijothomas
- Events by Name dashboard added (#3691) with filters (#3697) by @cijothomas
- Exemplar-to-logs navigation added in Grafana (#3617) by @cijothomas
- Host metadata resource attributes added via the resourcedetector processor (#3417) by @osullivandonal
gen_ai_normalizerprocessor added for Traceloop telemetry (#3604) by @ps48- Grafana bumped to 13.0.1 with a provisioned default-email receiver (#3288) by @tolzhabayev
- Cart exemplars dashboard fixed to use
demo_cartmetrics (#3436) by @fbourgey
🧪 Load generator overhaul
- Replaced Locust with k6 as the load-generation engine (#3564) by @mwimpelberg28
✨ Other notable changes
- Kafka metrics exporter added to the Collector (#3158) by @Red-GV, with
KAFKA_ADDR(#3219) andKAFKA_TOPIC(#3665) environment variables added by @julianocosta89 and @ryanfaircloth - New
service.criticalitydemo attribute (#2950) by @bachgarash enduser.idpropagated as a span attribute and W3C baggage across frontend, ad, and payment (#3366) by @dpacheconr- More realistic PostgreSQL setup with dedicated users, database, and monitoring (#3153) by @cyrille-leclerc
- Weaver configuration added for all telemetry, with a generated mkdocs site (
telemetry-docs) (#2794) by @martinjt - DSN-derived attributes added to product-catalog DB telemetry (#3154) and otelsql SQLCommenter instrumentation added (#3577) by @abruneau
- Prometheus
/metricsendpoint exposed onad, scraped by the Collector (#3388) by @cyrille-leclerc - OpenFeature flag generation support added for checkout and product-catalog (#3305) by @erka
shippingSlowdownfeature flag added to delay international shipments (#3354) by @tlee768cartFailuremade a configurable rate instead of a fixed toggle (#3625) by @bhuvan-somisetty- Source-generated logging with
EventNameadopted in cart, accounting (#3559) and currency (#3562) by @cijothomas - Payment switched to zero-code JS instrumentation via
NODE_OPTIONS(#3486) by @tlee768 - Synthetic test requests annotated in payment and checkout (#3613, #3628) by @cijothomas
- Checkout and shipping OTLP exporters migrated from gRPC to
http/protobuf(#3618, #3619) by @cijothomas - Custom 404/500 error pages added to the frontend (#3664) by @bhuvan-somisetty
- Health checks added across services (#3487) by @julianocosta89
- Telemetry sanity tests added to validate the end-to-end observability pipeline (#3356) by @ps48
- flagd-ui switched to LiveView navigation between Basic and Advanced tabs (#3696) by @bhuvan-somisetty
🐛 Bug fixes
- Correct nanos handling in payment (#3750), checkout (#3744), and the React Native app (#3752) by @bhuvan-somisetty
- Currency:
IPV6_ENABLEDstring comparison corrected (#3741) andVERSIONgetenv guarded against nullptr (#3743) by @bhuvan-somisetty, @ps48 - Currency switched to
BatchProcessorinstead ofSimpleProcessor(#3563) by @cijothomas - flagd-ui: removed unreachable clause in
Storage.update_flag/3(#3721) and fixed an invalid Tailwind class (#3717) by @bhuvan-somisetty - flagd-ui: fixed BEAM VM memory issue causing 2.3GB memory consumption (#3022) by @osullivandonal
- React Native app: use
getUniqueIdSync()fordevice.idinstead ofgetDeviceId()(#3736) by @bhuvan-somisetty - Frontend: show quantity-adjusted price in cart (#3521) by @mwimpelberg28
- Frontend: fixed
CartIconERR_CONNECTION_REFUSEDon initial page load (#3582) by @bhuvan-somisetty - Frontend: handle corrupted session data in
localStorage(#3313) by @erka - Frontend: handle undefined product images across multiple components (#3291) by @julianocosta89
- Frontend-proxy: removed deprecated Envoy options and restored the
service.namespaceresource attribute (#3573) by @julianocosta89 - Recommendation: fixed feature flag lookup (#3695) by @duanduansweetie, fixed
recommendationCacheFailureflag (#3260) by @osullivandonal, and use SDK-detected resource forLoggerProvider(#3520) by @mwimpelberg28 - Accounting: handle duplicate order from Kafka redelivery (#3504) by @mwimpelberg28; run consumer as a hosted service (#3608) by @cijothomas; move
DbContextto local scope, fixing a memory leak (#2876) by @puckpuck - Payment: fixed a charge span leak (#3276) by @ayoisaiah
- Checkout: use
span.RecordErrorinstead ofAddEvent(error)(#2906) by @neptunian; fixedProtosDiranchoring for IDE compatibility in cart (#3402) by @puckpuck - Fraud-detection: fixed dropped gRPC service files in the shadow JAR (#3501) by @aepfli
- Shipping: multiple correctness/lifecycle fixes — guard span event/attribute behind
is_recording(), create meter/counter once viaLazyLock, graceful provider shutdown, correct event-name syntax,OnceLockforResourceto avoid redundant detector runs, semantic-convention-style event names, stdout log layer, and host resource detector added (#3544, #3543, #3542, #3560, #3565, #3569, #3572, #3581) by @cijothomas - .NET: custom event names aligned with OTel naming guidance (#3571) by @cijothomas
- Collector: fixed
otelcol.signalscope attribute conflict in the logs pipeline (#3321) by @ps48; checkout and product-catalog health telemetry filtered out of traces (#3612) by @cijothomas - flagd: fixed OTel exporter configuration (#3667) by @julianocosta89; package swapped to fix a broken dependency (#3247) by @askpt
docker-compose.minimal.ymlfixed to actually run (#3004) by @joshuali925make:SERVICE=alias fixed for build, restart, and redeploy targets (#3422) by @ps48- JVM heap size updated for
adandfraud-detection(#3105) by @osullivandonal - Feature flags disabled by default (#3425) by @julianocosta89
- Privacy: avoid logging credit card data in payment (#3184) and remove recipient email from email telemetry (#3185) by @niwoerner
🙏 Thanks to all our contributors
This release was made possible by the following contributors:
@julianocosta89, @puckpuck, @Kielek, @neptunian, @abruneau, @Vunovati, @svrnm, @osullivandonal, @joshuali925, @dusannavratilsolarwinds, @ps48, @codeboten, @cyrille-leclerc, @askpt, @danielgblanco, @Red-GV, @bachgarash, @chalin, @tolzhabayev, @erka, @mhausenblas, @jpmunz, @martinjt, @cijothomas, @dpacheconr, @fali007, @mwimpelberg28, @ayoisaiah, @niwoerner, @aepfli, @florianl, @duanduansweetie, @ryanfaircloth, @bhuvan-somisetty, @martincostello, @rogercoll, @fbourgey, @tlee768
Full Changelog: 2.2.0...3.0.0