DEV Community

Cover image for Leveling Up My MERN Stack Observability with SigNoz
Sujal Arse
Sujal Arse

Posted on

Leveling Up My MERN Stack Observability with SigNoz

Leveling Up My MERN Stack Observability with SigNoz

As a developer, there is nothing quite as frustrating as building a solid backend, pushing it, and then staring blankly at terminal logs when a route mysteriously slows down.

With an upcoming project sprint on the horizon, I decided to take on the SigNoz pre-event challenge to warm up. I wanted to move away from relying on console.log() and implement a proper observability backend. I decided to self-host SigNoz and wire it up to RoaVista, a full-stack room booking platform my team and I are currently developing.

Here is how it went, and why one specific feature completely changed how I look at my API routes.

The Setup: Self-Hosting and Wiring it Up

Getting SigNoz running locally was surprisingly frictionless. A quick docker-compose up -d and I had the entire observability stack running on my machine.

The next step was wiring it into RoaVista's backend. Since we are using a Node.js/Express environment, I used OpenTelemetry to instrument the application. It essentially wraps the Express app and automatically pushes data to the SigNoz OTLP endpoint.

> JavaScript
> // tracing.js
> const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
> const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base');
> const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
> const provider = new NodeTracerProvider();
> const exporter = new OTLPTraceExporter({
>   url: 'http://localhost:4318/v1/traces' // SigNoz endpoint
> });
> provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
> provider.register();
> console.log('Tracing initialized');
Enter fullscreen mode Exit fullscreen mode

Once I fired up the server and started hitting our booking routes and authentication endpoints, data immediately started flowing into the SigNoz dashboard.

My Favorite Feature: Distributed Tracing

While the metrics and dashboards are beautiful, the absolute standout feature for me is Distributed Tracing.

In a MERN stack application, a single user action—like booking a hotel room—triggers a cascade of events. The frontend hits an Express route, auth middleware verifies the JWT, the controller checks room availability, and finally, MongoDB executes the read/write operations.

Before SigNoz, if the booking route took 800ms, I had no idea where the bottleneck was. Was it the database query? Was it the auth middleware?

With SigNoz's tracing, I get a clear, visual flame graph of every single request.

Why Tracing is a Game Changer:

1. Database Query Visibility: I can see exactly how long my MongoDB aggregations take. If a query to fetch available rooms is scanning too many documents, the trace highlights the latency immediately.

2. Visualizing Middleware: It breaks down the time spent in each Express middleware function. I can easily spot if our authentication validation is slowing down the pipeline.

3. Error Pinpointing: If a request fails, the trace captures the exact point of failure along with the error logs, meaning no more hunting through terminal outputs to figure out what broke.

Final Thoughts

Self-hosting SigNoz and hooking it up to a real project like RoaVista was the perfect warm-up before diving into the next sprint. It has completely shifted my mindset from reactive debugging to proactive monitoring.

If you are building a Node.js API and are tired of guessing where your bottlenecks are, I highly recommend giving SigNoz a spin.

This post was written as part of the SigNoz Pre-Event Blog Prize.

Tags: #webdev #node #observability #javascript

Top comments (0)