<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bar</title>
    <description>The latest articles on DEV Community by Bar (@barda).</description>
    <link>https://dev.to/barda</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3125681%2Fda6630ba-287e-4919-bf9e-8fb401aae2b3.png</url>
      <title>DEV Community: Bar</title>
      <link>https://dev.to/barda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/barda"/>
    <language>en</language>
    <item>
      <title>🔭 Mastering Observability: Deploying the OpenTelemetry Demo on Kubernetes</title>
      <dc:creator>Bar</dc:creator>
      <pubDate>Tue, 06 May 2025 11:28:04 +0000</pubDate>
      <link>https://dev.to/barda/mastering-observability-deploying-the-opentelemetry-demo-on-kubernetes-fbg</link>
      <guid>https://dev.to/barda/mastering-observability-deploying-the-opentelemetry-demo-on-kubernetes-fbg</guid>
      <description>&lt;p&gt;If you're working with OpenTelemetry (OTel) and Kubernetes, or looking to get started, having a practical environment to experiment in is invaluable. Setting up observability from scratch can be complex, so leveraging a ready-made, realistic example can significantly speed up the learning process. The official OpenTelemetry "Astronomy Shop" demo is designed precisely for this – it's much more than just a sample application.&lt;/p&gt;

&lt;p&gt;Think of it as a pre-instrumented, multi-service online store built specifically to help us explore how distributed systems tick (and sometimes break!). It lets you see firsthand how tools like OpenTelemetry can help track down performance bottlenecks or tricky errors in a microservices setup.&lt;/p&gt;

&lt;p&gt;In this post, I'll walk you through setting up this fantastic demo environment on your own Kubernetes cluster. We'll cover the deployment process and touch on how to connect it to an observability backend so you can actually see the telemetry data (logs, metrics, traces) in action. I'll even share a few practical tips I picked up along the way.&lt;/p&gt;

&lt;p&gt;By the end, you'll have a working setup perfect for experimenting with OTel and gaining practical insights into application performance. Ready to dive in?&lt;/p&gt;




&lt;h2&gt;
  
  
  What is the Astronomy Shop Demo?
&lt;/h2&gt;

&lt;p&gt;So, what exactly is this Astronomy Shop? Imagine a mini e-commerce site selling cool space gear - telescopes, maybe some fancy star charts. But behind the scenes, it's a cleverly designed microservices application.  &lt;/p&gt;

&lt;p&gt;What makes it special for us developers?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It's Realistic:&lt;/strong&gt; It uses different programming languages and communication methods (like gRPC and HTTP), just like many real-world applications. It’s complex enough to feel authentic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's an Observability Sandbox:&lt;/strong&gt; The best part? It comes pre-instrumented with OpenTelemetry right out of the box! This means it's already generating logs, metrics, and traces for you to capture and analyze.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's Made for Learning (and Breaking!):&lt;/strong&gt; You can actually trigger simulated problems (like service errors or slowdowns) and then use observability tools to figure out what went wrong. It’s a safe space to practice troubleshooting distributed systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hkthvxykittbw1qjfwd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hkthvxykittbw1qjfwd.png" alt="Screenshot of the Astronomy Shop UI" width="800" height="468"&gt;&lt;/a&gt;&lt;br&gt;[Image 1: The OpenTelemetry Astronomy Shop demo application frontend.]
  &lt;/p&gt;




&lt;h2&gt;
  
  
  Why Use OpenTelemetry?
&lt;/h2&gt;

&lt;p&gt;So, why is OpenTelemetry (OTel) such a big deal in the observability world? At its core, OTel provides a standardized, &lt;strong&gt;vendor-neutral&lt;/strong&gt; way to generate, collect, and export telemetry data – namely traces, metrics, and logs. Think of it as a common language for observability.&lt;/p&gt;

&lt;p&gt;This standardization is incredibly powerful because it means you're not locked into a specific monitoring vendor's tools or agents. You instrument your code once with OpenTelemetry, and then you can choose (and even switch!) where you want to send that data for analysis.&lt;/p&gt;

&lt;p&gt;But beyond vendor freedom, OTel is invaluable for several reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Understanding Distributed Systems:&lt;/strong&gt; When you have multiple microservices talking to each other, OTel traces let you visualize the entire journey of a request across those services. This is crucial for understanding dependencies and pinpointing where things slow down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Troubleshooting Proactively:&lt;/strong&gt; With comprehensive metrics and logs alongside traces, you get a much richer picture of your system's health. This allows you to spot potential issues or anomalies before they cause major outages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility and Integration:&lt;/strong&gt; OTel is designed to integrate with a wide array of observability backends – open source tools like Jaeger or Prometheus, cloud provider services, and commercial platforms. This flexibility lets you pick the analysis and visualization tools that best fit your needs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Architecture &amp;amp; Components
&lt;/h2&gt;

&lt;p&gt;To understand how we can observe the Astronomy Shop, let's peek under the hood at its architecture. As mentioned, it mimics a real e-commerce site, so it's built as a collection of interconnected microservices.&lt;/p&gt;

&lt;p&gt;You'll find services for typical functions like:&lt;/p&gt;

&lt;p&gt;→ Frontend UI&lt;br&gt;
→ User Authentication&lt;br&gt;
→ Product Catalog&lt;br&gt;
→ Recommendations&lt;br&gt;
→ Checkout &amp;amp; Payment&lt;br&gt;
→ Shipping&lt;br&gt;
→ ...and several others!&lt;/p&gt;


  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5seho1oswuu2izalpvb.png" alt="Architecture diagram of the OpenTelemetry demo microservices" width="800" height="581"&gt;[Image 2: The OpenTelemetry Demo's microservice architecture]
  


&lt;p&gt;What makes it particularly useful is that these services are written in different languages (Go, Java, Python, Node.js, etc.) and use different ways to communicate (like HTTP and gRPC), just like you'd find in many real-world companies.&lt;/p&gt;

&lt;p&gt;When we start looking at telemetry data later, we'll often focus on interactions between key services like the frontend, &lt;code&gt;productcatalogservice&lt;/code&gt;, and &lt;code&gt;recommendationservice&lt;/code&gt; to see how tracing and metrics help us understand their behavior.&lt;/p&gt;


&lt;h2&gt;
  
  
  Introducing Controlled Bugs for Observability
&lt;/h2&gt;

&lt;p&gt;Okay, this is where the Astronomy Shop demo gets really interesting for learning. It doesn't just run smoothly; it's designed to let you &lt;strong&gt;intentionally introduce problems&lt;/strong&gt; in controlled ways! Why? So you can practice using OpenTelemetry data (your traces, metrics, and logs) to figure out what's going wrong, just like you would during a real production incident, but without the real-world stress.&lt;/p&gt;

&lt;p&gt;The demo includes built-in scenarios to simulate common headaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Memory Leaks:&lt;/strong&gt; Practice diagnosing memory consumption issues using metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specific API Errors:&lt;/strong&gt; See what happens when certain product lookups start failing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Random Service Failures:&lt;/strong&gt; Observe the impact when critical services like ads or the shopping cart become unreliable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How does it simulate these issues?&lt;/strong&gt; The demo cleverly uses &lt;strong&gt;feature flags&lt;/strong&gt; to turn these problems on and off. For instance, there's a flag named &lt;code&gt;recommendationCache&lt;/code&gt; that can be used to disrupt the recommendation service. Toggling this flag can put the service into a "broken state" where it might start returning errors or become significantly slower, mimicking real-world failures like timeouts or bad deployments.&lt;/p&gt;


  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi68wzpl1ef4ytkxwc7l2.png" alt="Screenshot of the OpenTelemetry Demo Feature Flag UI listing available flags like productCatalogFailure" width="800" height="591"&gt;[Image 3: The demo includes a UI to manage feature flags for simulating issues.]
  


&lt;p&gt;The beauty of this setup is that once you have your observability tools connected (which we'll get to!), you can flip one of these flags, watch the telemetry data light up – maybe error rates spike, latency metrics jump, traces show failed requests – and practice your diagnostic skills. It’s like a flight simulator for observability and troubleshooting!&lt;/p&gt;


&lt;h2&gt;
  
  
  Deploying the Demo on Kubernetes
&lt;/h2&gt;

&lt;p&gt;In this section, we’ll walk you through deploying the demo to an existing Kubernetes cluster using Helm, then integrating it for observability.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Installing Helm and Deploying the OpenTelemetry Demo
&lt;/h3&gt;

&lt;p&gt;Alright, let's get the Astronomy Shop running on your Kubernetes cluster! We'll use Helm, which is the standard package manager for Kubernetes. If you haven't used it before or don't have it installed, &lt;a href="https://helm.sh/docs/intro/install/" rel="noopener noreferrer"&gt;the official Helm installation guide&lt;/a&gt; is the best place to start .&lt;/p&gt;

&lt;p&gt;Once you have Helm ready, the first step is to add the official OpenTelemetry Helm repository. Open your terminal and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts

helm repo update &lt;span class="c"&gt;# Ensures you have the latest chart list&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you can install the demo chart onto your cluster. This command usually installs the latest version of the chart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Replace &amp;lt;your-release-name&amp;gt; with your Helm release name&lt;/span&gt;
helm &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;your-release-name&amp;gt; open-telemetry/opentelemetry-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;💡 &lt;strong&gt;Troubleshooting Tip:&lt;/strong&gt; Helm installs the latest chart version by default. Occasionally, the very latest version might have minor bugs or templating issues. If you run into errors during installation, try finding the most recent stable version number by checking the chart's page on &lt;a href="https://artifacthub.io/packages/helm/opentelemetry-helm/opentelemetry-demo" rel="noopener noreferrer"&gt;Artifact Hub&lt;/a&gt; (look under "Versions") or the &lt;a href="https://github.com/open-telemetry/opentelemetry-helm-charts/releases" rel="noopener noreferrer"&gt;OpenTelemetry Helm Charts GitHub releases&lt;/a&gt;. Then, try installing again using the &lt;code&gt;--version&lt;/code&gt; flag, like this:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;your-release-name&amp;gt; open-telemetry/opentelemetry-demo &lt;span class="nt"&gt;--version&lt;/span&gt; &amp;lt;stable-version-number&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command tells Helm to deploy the &lt;code&gt;opentelemetry-demo&lt;/code&gt; chart. It will spin up all the necessary microservices along with the built-in OpenTelemetry instrumentation. Give it a few minutes for all the pods to start up. You can check the status using &lt;code&gt;kubectl get pods -w&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Once the deployment finishes successfully, Helm prints out some very useful information right in your terminal – specifically, look for the &lt;code&gt;NOTES:&lt;/code&gt; section provided by the chart authors. This section contains the key details you'll need to actually access the demo application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Accessing the Demo and Jaeger UI
&lt;/h3&gt;

&lt;p&gt;After a successful installation, your terminal output will include that important &lt;code&gt;NOTES:&lt;/code&gt; section, which should look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frf9ha0wr5hg439x1e3mp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frf9ha0wr5hg439x1e3mp.png" alt="Terminal output showing successful Helm install NOTES with port-forward command and UI paths" width="800" height="493"&gt;&lt;/a&gt;&lt;br&gt;[Image 4: Successful Helm install output, showing the important &lt;code&gt;NOTES&lt;/code&gt; section with the &lt;code&gt;kubectl port-forward&lt;/code&gt; command needed to access the demo.]
  &lt;/p&gt;

&lt;p&gt;This output is key! Notice the &lt;code&gt;kubectl port-forward&lt;/code&gt; command it provides [Image 4]. This command creates a secure tunnel from your local machine (port &lt;code&gt;8080&lt;/code&gt;) directly to the &lt;code&gt;frontendproxy&lt;/code&gt; service running inside your Kubernetes cluster (on its port &lt;code&gt;8080&lt;/code&gt;).&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Start Port-Forwarding:
&lt;/h4&gt;

&lt;p&gt;Open a &lt;strong&gt;new terminal window&lt;/strong&gt; (as this command needs to keep running) execute the &lt;code&gt;port-forward&lt;/code&gt; command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;--namespace&lt;/span&gt; default port-forward svc/&amp;lt;your-release-name&amp;gt;-frontendproxy 8080:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see output like &lt;code&gt;Forwarding from 127.0.0.1:8080 -&amp;gt; 8080&lt;/code&gt;. Keep this terminal running in the background.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Explore the Astronomy Shop:
&lt;/h4&gt;

&lt;p&gt;Now, open your web browser and navigate to:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/" rel="noopener noreferrer"&gt;http://localhost:8080/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should see the Astronomy Shop frontend! Click around a bit – browse some products, maybe add something to your cart. This user activity will generate requests that flow through the microservices, creating the traces we want to see.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. View Traces in Jaeger:
&lt;/h4&gt;

&lt;p&gt;This is the exciting part! Open a new browser tab and go to the Jaeger UI path listed in the Helm notes [Image 4]:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/jaeger/ui/" rel="noopener noreferrer"&gt;http://localhost:8080/jaeger/ui/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome to the Jaeger UI! This is where you can visualize the distributed traces captured by OpenTelemetry.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the Jaeger UI sidebar (under "Search"), select one of the services from the dropdown – &lt;code&gt;frontend&lt;/code&gt; or &lt;code&gt;frontendproxy&lt;/code&gt; are good starting points.&lt;/li&gt;
&lt;li&gt;Click the "Find Traces" button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should see a list of recent traces. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fecypw4mysxpjvs5bx964.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fecypw4mysxpjvs5bx964.png" alt="Jaeger UI showing search results for frontend service" width="800" height="399"&gt;&lt;/a&gt;&lt;br&gt;[Image 5: Finding traces in Jaeger: Search results displayed for the &lt;code&gt;frontend&lt;/code&gt; service.]
  &lt;/p&gt;

&lt;p&gt;Click on one of them (preferably one generated by your clicking around in the shop) to see the detailed trace view.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tqqyarm3lq9wgye67hn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tqqyarm3lq9wgye67hn.png" alt="Jaeger trace detail view showing a simple two-span trace for a frontend HTTP GET request" width="800" height="140"&gt;&lt;/a&gt;&lt;br&gt;[Image 6: Jaeger UI displaying a simple trace for an HTTP GET request handled by the frontend service.]
  &lt;/p&gt;

&lt;p&gt;Look at that! You can see the entire journey of a request as it travels from the frontend through various backend services (like &lt;code&gt;productcatalogservice&lt;/code&gt;, &lt;code&gt;recommendationservice&lt;/code&gt;, etc.). You can see how long each step took, making it easy to spot bottlenecks or errors. This visual insight is incredibly powerful for understanding and debugging distributed systems.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. What About Metrics?
&lt;/h4&gt;

&lt;p&gt;While we focused on traces with Jaeger here because it's often the most visually impactful for understanding distributed flows, the demo also generates metrics! As shown in the Helm &lt;code&gt;NOTES&lt;/code&gt; [Image 4], a Grafana instance is typically included and accessible at:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/grafana/" rel="noopener noreferrer"&gt;http://localhost:8080/grafana/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to explore the Grafana UI to see what metrics dashboards might be available for the demo services. Exploring metrics and logs in detail is beyond the scope of this introductory guide, but let me know in the comments if you'd be interested in a follow-up post diving deeper into Grafana or log exploration with this demo!&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Seeing OTel in Action: Simulating an Error
&lt;/h3&gt;

&lt;p&gt;Okay, we've seen "healthy" traces in Jaeger, but the real power of observability shines when things go wrong. Remember how we discussed that the Astronomy Shop demo has built-in "controlled bugs" activated by feature flags? Let's try one out!&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Access the Feature Flag UI:
&lt;/h4&gt;

&lt;p&gt;The Helm &lt;code&gt;NOTES&lt;/code&gt; [Image 4] showed us the path for the Feature Flag service. With your &lt;code&gt;kubectl port-forward&lt;/code&gt; still running, open this URL in your browser:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/feature/" rel="noopener noreferrer"&gt;http://localhost:8080/feature/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should see a simple UI listing various feature flags [Image 3] that can simulate problems in different microservices.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Enable a Failure:
&lt;/h4&gt;

&lt;p&gt;Let's pick a simple one to start. Find the flag named &lt;code&gt;productCatalogFailure&lt;/code&gt; (which simulates errors in the Product Catalog service ) and click its toggle or button to enable it.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuawph2clhrehukzfrydi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuawph2clhrehukzfrydi.png" alt="Screenshot of the 'Edit feature flag' screen for productCatalogFailure, showing Enabled value set to 1.0" width="800" height="603"&gt;&lt;/a&gt;&lt;br&gt;[Image 7: Enabling the &lt;code&gt;productCatalogFailure&lt;/code&gt; simulation by setting the 'Enabled' value to 1.0.]
  &lt;/p&gt;

&lt;h4&gt;
  
  
  3. Trigger the Error:
&lt;/h4&gt;

&lt;p&gt;Now, go back to the Astronomy Shop UI tab in your browser (&lt;a href="http://localhost:8080/" rel="noopener noreferrer"&gt;http://localhost:8080/&lt;/a&gt;). Try to browse the products. Since we enabled failures in the &lt;code&gt;productcatalogservice&lt;/code&gt;, you might see errors on the page, or products might fail to load. Perform a few actions that would require fetching product details.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Observe in Jaeger:
&lt;/h4&gt;

&lt;p&gt;Head back to the Jaeger UI tab (&lt;a href="http://localhost:8080/jaeger/ui/" rel="noopener noreferrer"&gt;http://localhost:8080/jaeger/ui/&lt;/a&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the selected Service in the search sidebar to productcatalogservice (or search for frontend again, as requests often flow through it).&lt;/li&gt;
&lt;li&gt;Click "Find Traces" to see the latest traces generated after you enabled the feature flag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should now see some &lt;strong&gt;traces marked with errors!&lt;/strong&gt; Jaeger typically highlights failed traces or spans with red icons or tags.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchqj1dzb1a9uf2teklid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchqj1dzb1a9uf2teklid.png" alt="Jaeger search results showing traces marked with '3 Errors' involving frontend and productcatalogservice" width="800" height="177"&gt;&lt;/a&gt;&lt;br&gt;[Image 8: An error trace in Jaeger, showing a failure in the &lt;code&gt;frontend&lt;/code&gt; and &lt;code&gt;productcatalogservice&lt;/code&gt; after enabling the feature flag.]
  &lt;/p&gt;

&lt;p&gt;Click on one of these error traces. You can now investigate the spans within the trace to see exactly where the failure occurred (likely within the &lt;code&gt;productcatalogservice&lt;/code&gt; span) and potentially view error logs or tags associated with that span.&lt;/p&gt;

&lt;p&gt;This is observability in action! We intentionally caused a problem using a feature flag and immediately saw the impact reflected in our distributed traces, pinpointing the affected service. This is precisely how these tools help us diagnose real-world issues much faster. Feel free to experiment by disabling the flag and enabling others to see their effects!&lt;/p&gt;

&lt;h3&gt;
  
  
  Cleanup
&lt;/h3&gt;

&lt;p&gt;When you're finished experimenting, you can remove all the demo components from your cluster by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Replace &amp;lt;your-release-name&amp;gt; with your Helm release name!&lt;/span&gt;
helm uninstall &amp;lt;your-release-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusion 🎉
&lt;/h2&gt;

&lt;p&gt;And there you have it! We've successfully deployed the OpenTelemetry Astronomy Shop demo onto a Kubernetes cluster using Helm, explored its microservices via the browser, and visualized distributed traces using the built-in Jaeger UI. We even simulated a failure using a feature flag and saw how OpenTelemetry data immediately helped us pinpoint the issue within our traces.&lt;/p&gt;

&lt;p&gt;The OpenTelemetry demo provides a fantastic, hands-on playground for anyone looking to understand observability concepts in a realistic, distributed environment. Because OpenTelemetry is vendor-neutral, the skills you practice here are applicable whether you use open-source tools like Jaeger and Prometheus or commercial observability platforms.&lt;/p&gt;

&lt;p&gt;We focused mainly on visualizing traces with Jaeger today. Exploring the metrics in Grafana or diving deep into the logs generated by the demo could be topics for another time. &lt;strong&gt;Let me know in the comments if a follow-up post on those aspects would be helpful!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I encourage you to keep exploring the demo – try out different feature flags, examine the metrics in Grafana, and get comfortable navigating the telemetry data. Happy observing!👋&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>opentelemetry</category>
      <category>observability</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
