<?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: MATHAVAN E</title>
    <description>The latest articles on DEV Community by MATHAVAN E (@mathavan_e_1ceb4e22a8cdb9).</description>
    <link>https://dev.to/mathavan_e_1ceb4e22a8cdb9</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4027513%2F807406d6-ff10-4471-b4dc-7f12dcd27888.png</url>
      <title>DEV Community: MATHAVAN E</title>
      <link>https://dev.to/mathavan_e_1ceb4e22a8cdb9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mathavan_e_1ceb4e22a8cdb9"/>
    <language>en</language>
    <item>
      <title>From Broken Images to Blazing Fast Traces: How I Debugged and Connected the OpenTelemetry Demo to SigNoz</title>
      <dc:creator>MATHAVAN E</dc:creator>
      <pubDate>Fri, 17 Jul 2026 09:53:52 +0000</pubDate>
      <link>https://dev.to/mathavan_e_1ceb4e22a8cdb9/from-broken-images-to-blazing-fast-traces-how-i-debugged-and-connected-the-opentelemetry-demo-to-1mc7</link>
      <guid>https://dev.to/mathavan_e_1ceb4e22a8cdb9/from-broken-images-to-blazing-fast-traces-how-i-debugged-and-connected-the-opentelemetry-demo-to-1mc7</guid>
      <description>&lt;p&gt;I recently signed up for a local observability hackathon, eager to explore distributed tracing. The goal of my project was straightforward: deploy the official &lt;a href="https://github.com/open-telemetry/opentelemetry-demo" rel="noopener noreferrer"&gt;OpenTelemetry Astronomy Shop Demo&lt;/a&gt; on my machine, connect it to a local instance of &lt;strong&gt;SigNoz&lt;/strong&gt; for telemetry visualization, and analyze how microservices interact.&lt;/p&gt;

&lt;p&gt;But within minutes of running the setup, my enthusiasm hit a wall. When I opened the storefront in my browser, it looked completely broken. All the product images were missing, showing only ugly broken image placeholders. The console was filled with 403 Forbidden and 404 Not Found errors. Behind the scenes, the container logs for &lt;code&gt;image-provider&lt;/code&gt; were screaming with backpressure and memory failure events.&lt;/p&gt;

&lt;p&gt;Observability is a fantastic practice, but you can’t observe an application if the UI is broken and the telemetry pipeline is dropping data. In this post, I will share the step-by-step story of how I prepared my local system, set up the containers, resolved Nginx config routing gaps, solved a silent Envoy port collision, tuned OTel Collector limits, and successfully visualized the shop's trace, log, and metric data inside SigNoz.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Preparing the Local Environment
&lt;/h2&gt;

&lt;p&gt;Before starting, I verified that my development environment was up to date and Docker was running correctly.&lt;/p&gt;

&lt;p&gt;First, I updated the local package database:&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="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2unsk8amg5qi75fb5kyy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2unsk8amg5qi75fb5kyy.png" alt="Updating Packages" width="583" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I verified the active Docker and Docker Desktop versions to ensure containerization compatibility:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nt"&gt;-v&lt;/span&gt;
docker desktop version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvphija4mizqrkxq7qvxh.png" alt=" " width="356" height="82"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  2. Spinning Up SigNoz
&lt;/h2&gt;

&lt;p&gt;With the system environment verified, I navigated to my SigNoz deployment folder to start the application performance monitoring stack:&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="nb"&gt;cd&lt;/span&gt; ~/signoz/pours/deployment
&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3lxe72ix8k3fmbi62jf6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3lxe72ix8k3fmbi62jf6.png" alt=" " width="463" height="64"&gt;&lt;/a&gt;&lt;br&gt;
I spun up the SigNoz backend containers in detached mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz1kvghwrmp7p4m1usdrk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz1kvghwrmp7p4m1usdrk.png" alt=" " width="548" height="173"&gt;&lt;/a&gt;&lt;br&gt;
I checked the state of the containers using &lt;code&gt;docker ps&lt;/code&gt; to ensure that the ClickHouse storage, PostgreSQL metastore, SigNoz query service, and OTel ingester were healthy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;--filter&lt;/span&gt; &lt;span class="s2"&gt;"name=signoz"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzmn2z4z89qah8o8835tb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzmn2z4z89qah8o8835tb.png" alt=" " width="796" height="63"&gt;&lt;/a&gt;&lt;br&gt;
SigNoz was successfully up and listening on port &lt;code&gt;8080&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Starting the OpenTelemetry Demo
&lt;/h2&gt;

&lt;p&gt;Next, I navigated to the OpenTelemetry Astronomy Shop Demo directory:&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="nb"&gt;cd&lt;/span&gt; ~/opentelemetry-demo/
&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8muytd018bsk4nr1ga7p.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8muytd018bsk4nr1ga7p.png" alt=" " width="800" height="51"&gt;&lt;/a&gt;&lt;br&gt;
I started the 20+ microservices in the demo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx8c02n9m7tsd828gdfon.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx8c02n9m7tsd828gdfon.png" alt=" " width="800" height="176"&gt;&lt;/a&gt;&lt;br&gt;
To verify how the storefront was exposed, I checked the frontend container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose ps frontend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fov3hvm4nrqyfwizxn641.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fov3hvm4nrqyfwizxn641.png" alt=" " width="800" height="40"&gt;&lt;/a&gt;&lt;br&gt;
The direct frontend port was dynamically mapped to port &lt;code&gt;34753&lt;/code&gt;. At this point, the application was running, but three major issues prevented a functional demo.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. Debugging and Fixing the System
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Issue A: Nginx 403 Forbidden for Image Assets
&lt;/h3&gt;

&lt;p&gt;I checked if the image-provider container could serve static images locally using &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-I&lt;/span&gt; http://localhost:39749/Banner.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This returned an immediate HTTP error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP/1.1 403 Forbidden
Server: nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I checked the configuration template (&lt;code&gt;src/image-provider/nginx.conf.template&lt;/code&gt;) and saw Nginx lacked a generic location block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;    &lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;listen&lt;/span&gt; $&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kn"&gt;IMAGE_PROVIDER_PORT&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:&lt;/span&gt;$&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kn"&gt;IMAGE_PROVIDER_PORT&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;resolver&lt;/span&gt; &lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="s"&gt;.0.11&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;autoindex&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;server_tokens&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="n"&gt;/static&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;gzip_static&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/status&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kn"&gt;stub_status&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;access_log&lt;/span&gt;  &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;allow&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because &lt;code&gt;autoindex&lt;/code&gt; was off and no fallback &lt;code&gt;location /&lt;/code&gt; route was specified, Nginx refused all direct file requests under the root &lt;code&gt;/static&lt;/code&gt; directory.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Fix:
&lt;/h4&gt;

&lt;p&gt;I added a simple &lt;code&gt;location /&lt;/code&gt; fallback block to route static files safely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;        &lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I rebuilt and restarted the service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose build image-provider
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--force-recreate&lt;/span&gt; image-provider
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This resolved the 403 error.&lt;/p&gt;




&lt;h3&gt;
  
  
  Issue B: The Silent Envoy Port Collision
&lt;/h3&gt;

&lt;p&gt;Although Nginx was serving images, the browser console showed &lt;code&gt;404 Not Found&lt;/code&gt; for product images because I was accessing the application on port &lt;code&gt;38411&lt;/code&gt;/&lt;code&gt;34753&lt;/code&gt; (direct React frontend).&lt;/p&gt;

&lt;p&gt;Static resources like product images are mapped relative to the proxy (e.g., &lt;code&gt;/images/Banner.png&lt;/code&gt;). Envoy (acting as the proxy) is configured on port &lt;code&gt;8080&lt;/code&gt; to intercept &lt;code&gt;/images/&lt;/code&gt; and route them to Nginx.&lt;/p&gt;

&lt;p&gt;However, SigNoz was already running on host port &lt;code&gt;8080&lt;/code&gt;. This conflict prevented Envoy from binding to port &lt;code&gt;8080&lt;/code&gt; on the host, causing it to fail silently.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Fix:
&lt;/h4&gt;

&lt;p&gt;I remapped Envoy's host port to &lt;code&gt;8090&lt;/code&gt; in &lt;code&gt;compose.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;frontend-proxy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${IMAGE_NAME}:${DEMO_VERSION}-frontend-proxy&lt;/span&gt;
    &lt;span class="s"&gt;...&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8090:${ENVOY_PORT}"&lt;/span&gt; &lt;span class="c1"&gt;# Mapped to host port 8090&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${ENVOY_ADMIN_PORT}:${ENVOY_ADMIN_PORT}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After updating the port and restarting Envoy, accessing the site on &lt;code&gt;http://localhost:8090&lt;/code&gt; loaded the store correctly with all images rendering as expected!&lt;/p&gt;

&lt;h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm6iv5s4ctd514kkj8au8.png" alt=" " width="800" height="500"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Issue C: OTel Collector Data Drops
&lt;/h3&gt;

&lt;p&gt;With the UI fixed, I noticed the following warnings looping in the &lt;code&gt;image-provider&lt;/code&gt; logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;image-provider  | [error] OTel export failure: data refused due to high memory usage
image-provider  | [error] OTel export failure: sending queue is full
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Checking the resources via &lt;code&gt;docker stats&lt;/code&gt; revealed the &lt;code&gt;otel-collector&lt;/code&gt; container was consuming 176MB of its 200MB limit. &lt;/p&gt;

&lt;p&gt;In &lt;code&gt;otel-config.yml&lt;/code&gt;, the collector's &lt;code&gt;memory_limiter&lt;/code&gt; processor starts dropping metrics and span exports at 80% memory saturation (160MB) to prevent an out-of-memory container crash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;processors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;memory_limiter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;check_interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5s&lt;/span&gt;
    &lt;span class="na"&gt;limit_percentage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
    &lt;span class="na"&gt;spike_limit_percentage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  The Fix:
&lt;/h4&gt;

&lt;p&gt;I increased the memory resources allocated to the collector in &lt;code&gt;compose.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;otel-collector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${COLLECTOR_CONTRIB_IMAGE}&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;otel-collector&lt;/span&gt;
    &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;300M&lt;/span&gt; &lt;span class="c1"&gt;# Bumped from 200M&lt;/span&gt;
    &lt;span class="s"&gt;...&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;GOMEMLIMIT=240MiB&lt;/span&gt; &lt;span class="c1"&gt;# Bumped from 160MiB&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I restarted the collector:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--no-deps&lt;/span&gt; &lt;span class="nt"&gt;--force-recreate&lt;/span&gt; otel-collector
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The collector memory stabilized around 33% (100MB / 300MB), eliminating the backpressure log errors.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Visualizing Telemetry in SigNoz
&lt;/h2&gt;

&lt;p&gt;With the pipelines cleared, I logged into my local SigNoz instance to verify telemetry data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Collector Metrics Dashboard
&lt;/h3&gt;

&lt;p&gt;The OpenTelemetry Collector dashboard shows active spans, metrics, and logs streaming in with &lt;strong&gt;0 refused or failed spans&lt;/strong&gt;:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqlutemqnbea3s0l47smp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqlutemqnbea3s0l47smp.png" alt=" " width="799" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Log Analysis &amp;amp; System Metrics
&lt;/h3&gt;

&lt;p&gt;I navigated to the Logs explorer in SigNoz, which successfully captured structured logs from various demo containers (e.g. ad category requests, task completions) alongside real-time container CPU and Memory metrics:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpb4y1bkxybrdmcp9y7gz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpb4y1bkxybrdmcp9y7gz.png" alt=" " width="799" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Traces Explorer
&lt;/h3&gt;

&lt;p&gt;In the Traces panel, I traced exact span transactions, including direct &lt;code&gt;GET /status&lt;/code&gt; hits from the &lt;code&gt;image-provider&lt;/code&gt; service:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fthbq0t12dn7y1dml8uzb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fthbq0t12dn7y1dml8uzb.png" alt=" " width="799" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Metrics Explorer
&lt;/h3&gt;

&lt;p&gt;Finally, using the Metrics panel, I plotted active time-series data for system attributes like total CPU time:&lt;/p&gt;

&lt;h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftcum4qg5r4z56afffy9o.png" alt=" " width="799" height="416"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Key Lessons Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep Ports Clean&lt;/strong&gt;: Avoid hardcoding port mappings like &lt;code&gt;:8080&lt;/code&gt; if you plan on deploying multiple observability tools concurrently on the same host. Remap proxy routes to distinct ports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account for Limiter Headroom&lt;/strong&gt;: Set up appropriate resource limits. An OTel collector running on default parameters will drop client data quickly if it hits backpressure limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify Route Configuration&lt;/strong&gt;: When setting up unprivileged static image servers like Nginx, ensure index and generic location mappings are declared so request fallbacks don't trigger &lt;code&gt;403&lt;/code&gt; permissions issues.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;By troubleshooting web server route defaults, remapping port bindings, and upgrading Collector system resource limits, we transformed a failing sandbox deployment into a fully operational observability pipeline. &lt;br&gt;
Now, the entire shop works smoothly, and every microservice transaction is observable in real-time. Happy tracing!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;By Mathavan &amp;amp; Suresh Krishna — &lt;a href="https://www.wemakedevs.org/" rel="noopener noreferrer"&gt;WeMakeDevs&lt;/a&gt; — SigNoZ Hackathon&lt;/em&gt;&lt;/p&gt;

</description>
      <category>signoz</category>
      <category>wemakesdev</category>
      <category>hackathon</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
