<?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>Forem: Afe Damilare</title>
    <description>The latest articles on Forem by Afe Damilare (@afe_damilare).</description>
    <link>https://forem.com/afe_damilare</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%2F3604129%2F7ac25da8-9939-493b-89ac-bd90b4b205b6.png</url>
      <title>Forem: Afe Damilare</title>
      <link>https://forem.com/afe_damilare</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/afe_damilare"/>
    <language>en</language>
    <item>
      <title>How I Used WireGuard to Secure API Communication Between Cloud Servers — Plus a PyAirbyte Custom Connector Tutorial</title>
      <dc:creator>Afe Damilare</dc:creator>
      <pubDate>Mon, 10 Nov 2025 19:24:10 +0000</pubDate>
      <link>https://forem.com/afe_damilare/how-i-used-wireguard-to-secure-api-communication-between-cloud-servers-plus-a-pyairbyte-custom-3dj8</link>
      <guid>https://forem.com/afe_damilare/how-i-used-wireguard-to-secure-api-communication-between-cloud-servers-plus-a-pyairbyte-custom-3dj8</guid>
      <description>&lt;p&gt;&lt;strong&gt;INTRO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re dealing with data pipelines or APIs between cloud servers, you know how important it is to keep those connections locked down and secure. I recently tackled this by using WireGuard; a lightweight VPN tool that’s surprisingly easy to set up and super effective. In this post, I’ll show you how I set up WireGuard between my cloud servers to create a secure tunnel. Then, I’ll walk you through building a custom connector using PyAirbyte that uses this tunnel to keep my data transfers safe and sound. No fancy jargon, just practical steps you can follow.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;WHAT’S THE PROBLEM?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First off, unsecured API communication is a real risk. Data sniffing, man-in-the-middle attacks — these are nightmares you want to avoid when moving info around. That’s why I decided to take a fresh look at VPNs and ended up with WireGuard.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;WHY WIREGUARD?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WireGuard is modern, fast, and much simpler than old-school VPNs. It’s perfect if you want security without headaches.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;SETTING UP WIREGUARD&lt;/strong&gt;&lt;br&gt;
I'll show you how to get WireGuard up and running on two cloud servers. It took me less than 30 minutes, and it’s mostly copy-paste commands.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;PYAIRBYTE AND CUSTOM CONNECTORS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re new to Airbyte or PyAirbyte, no worries. I’ll give you a quick intro, then dive into how I built a custom connector that actually sends data through the WireGuard tunnel.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;BUILDING THE CONNECTOR — STEP BY STEP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the code, the config, and all the little details you need to get this working.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;TESTING IT ALL OUT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once everything’s in place, I’ll show you how to run the pipeline and make sure your data’s traveling securely.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;WRAP UP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So yeah — securing APIs with WireGuard and PyAirbyte is doable and doesn’t have to be complicated. Give it a shot and feel free to ask questions or share your experiences.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>cloud</category>
      <category>security</category>
      <category>api</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Afe Damilare</dc:creator>
      <pubDate>Mon, 10 Nov 2025 15:26:58 +0000</pubDate>
      <link>https://forem.com/afe_damilare/-2plm</link>
      <guid>https://forem.com/afe_damilare/-2plm</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://dev.to/afe_damilare/how-i-used-wireguard-to-secure-api-communication-between-cloud-servers-5bkl" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" 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%2Fz5jlno62c6nylm2wqk90.png" height="565" class="m-0" width="543"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://dev.to/afe_damilare/how-i-used-wireguard-to-secure-api-communication-between-cloud-servers-5bkl" rel="noopener noreferrer" class="c-link"&gt;
            How I Used WireGuard to Secure API Communication Between Cloud Servers - DEV Community
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            INTRODUCTION   In modern cloud architectures, microservices and APIs often communicate over the...
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" 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%2F8j7kvp660rqzt99zui8e.png" width="300" height="299"&gt;
          dev.to
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>wireguard</category>
      <category>backend</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How I Used WireGuard to Secure API Communication Between Cloud Servers</title>
      <dc:creator>Afe Damilare</dc:creator>
      <pubDate>Mon, 10 Nov 2025 15:26:04 +0000</pubDate>
      <link>https://forem.com/afe_damilare/how-i-used-wireguard-to-secure-api-communication-between-cloud-servers-5bkl</link>
      <guid>https://forem.com/afe_damilare/how-i-used-wireguard-to-secure-api-communication-between-cloud-servers-5bkl</guid>
      <description>&lt;p&gt;&lt;strong&gt;INTRODUCTION&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;In modern cloud architectures, microservices and APIs often communicate over the public internet. While HTTPS provides encryption in transit, sometimes you want an additional layer of security, especially when sensitive data flows between servers.&lt;/p&gt;

&lt;p&gt;In this article, I’ll show how I used WireGuard, a lightweight and high-performance VPN, to secure API communication between two cloud servers. This setup ensures that all API traffic flows over an encrypted tunnel, reducing the risk of interception or tampering.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;WHY WIREGUARD&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;WireGuard offers several advantages for cloud-to-cloud communication:&lt;/p&gt;

&lt;p&gt;Simplicity: Easy to configure compared to traditional VPNs like OpenVPN or IPsec.&lt;/p&gt;

&lt;p&gt;Performance: High throughput with minimal latency.&lt;/p&gt;

&lt;p&gt;Modern cryptography: Uses state-of-the-art protocols (ChaCha20, Poly1305).&lt;/p&gt;

&lt;p&gt;Cross-platform: Works on Linux, Windows, macOS, and even mobile devices.&lt;/p&gt;

&lt;p&gt;With WireGuard, you can create a private network between servers and secure all API calls automatically.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;PREREQUISITES&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before you start, you’ll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Two cloud servers (e.g., AWS EC2, DigitalOcean Droplets) with root access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux OS on both servers (Ubuntu 22.04 recommended).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basic familiarity with the terminal and SSH.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s call the servers:&lt;/p&gt;

&lt;p&gt;Server A — the API client&lt;/p&gt;

&lt;p&gt;Server B — the API server&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: &lt;strong&gt;INSTALL WIREGUARD&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On both servers, install WireGuard:&lt;/p&gt;

&lt;h1&gt;
  
  
  Update package list
&lt;/h1&gt;

&lt;p&gt;sudo apt update&lt;/p&gt;

&lt;h1&gt;
  
  
  Install WireGuard
&lt;/h1&gt;

&lt;p&gt;sudo apt install wireguard -y&lt;/p&gt;

&lt;p&gt;Verify installation:&lt;/p&gt;

&lt;p&gt;wg --version&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: &lt;strong&gt;GENERATE KEYS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WireGuard uses public/private key pairs for authentication. On each server:&lt;/p&gt;

&lt;h1&gt;
  
  
  Generate private key
&lt;/h1&gt;

&lt;p&gt;wg genkey | tee privatekey | wg pubkey &amp;gt; publickey&lt;/p&gt;

&lt;p&gt;This will create two files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;privatekey → Keep secret&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;publickey → Share with the other server&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: &lt;strong&gt;CONFIGURE WIREGUARD INTERFACES&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On Server A (wg0.conf):&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[Interface]&lt;br&gt;
PrivateKey = &lt;br&gt;
Address = 10.0.0.1/24&lt;br&gt;
ListenPort = 51820&lt;/p&gt;

&lt;p&gt;[Peer]&lt;br&gt;
PublicKey = &lt;br&gt;
Endpoint = :51820&lt;br&gt;
AllowedIPs = 10.0.0.2/32&lt;br&gt;
PersistentKeepalive = 25&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On Server B (wg0.conf):&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[Interface]&lt;br&gt;
PrivateKey = &lt;br&gt;
Address = 10.0.0.2/24&lt;br&gt;
ListenPort = 51820&lt;/p&gt;

&lt;p&gt;[Peer]&lt;br&gt;
PublicKey = &lt;br&gt;
Endpoint = :51820&lt;br&gt;
AllowedIPs = 10.0.0.1/32&lt;br&gt;
PersistentKeepalive = 25&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explanation:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Address → Private IP for WireGuard interface&lt;/p&gt;

&lt;p&gt;Endpoint → Public IP and port of the peer&lt;/p&gt;

&lt;p&gt;AllowedIPs → IPs to route through the VPN&lt;/p&gt;

&lt;p&gt;PersistentKeepalive → Keeps the connection alive behind NAT&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: &lt;strong&gt;ENABLE AND START WIREGUARD&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Start WireGuard
&lt;/h1&gt;

&lt;p&gt;sudo wg-quick up wg0&lt;/p&gt;

&lt;h1&gt;
  
  
  Enable at boot
&lt;/h1&gt;

&lt;p&gt;sudo systemctl enable wg-quick@wg0&lt;/p&gt;

&lt;p&gt;Check connection status:&lt;/p&gt;

&lt;p&gt;sudo wg&lt;/p&gt;

&lt;p&gt;You should see handshake information, indicating that both servers are connected.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;: &lt;strong&gt;TEST API COMMUNICATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Assume Server B is running an API on port 8000. On Server A:&lt;/p&gt;

&lt;p&gt;curl &lt;a href="http://10.0.0.2:8000/health" rel="noopener noreferrer"&gt;http://10.0.0.2:8000/health&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The request should succeed over the encrypted WireGuard tunnel, even if the API port is not exposed publicly.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;: &lt;strong&gt;OPTIONAL — RESTRICT PUBLIC ACCESS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For maximum security, update the firewall on Server B to only allow API requests via WireGuard:&lt;/p&gt;

&lt;p&gt;sudo ufw allow from 10.0.0.0/24 to any port 8000&lt;br&gt;
sudo ufw deny 8000&lt;/p&gt;

&lt;p&gt;Now, the API is effectively private to the VPN.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;BENEFITS OF THIS SETUP&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;End-to-end encryption for API communication&lt;/p&gt;

&lt;p&gt;Private network between cloud servers&lt;/p&gt;

&lt;p&gt;Minimal latency and easy deployment&lt;/p&gt;

&lt;p&gt;Works for multi-cloud or hybrid cloud architectures&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By using WireGuard, I was able to secure API communication between servers with minimal configuration and excellent performance. This approach is particularly useful when sensitive data flows across cloud providers or when you want to avoid exposing APIs publicly.&lt;/p&gt;

&lt;p&gt;WireGuard is lightweight, fast, and easy to manage — making it a go-to solution for secure cloud-to-cloud networking.&lt;/p&gt;




&lt;p&gt;If you found this tutorial helpful, follow me on Dev.to for more cloud security and networking tips!&lt;/p&gt;

</description>
      <category>wireguard</category>
      <category>backend</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Monitor a Node.js App with SigNoz (Step-by-Step Guide)</title>
      <dc:creator>Afe Damilare</dc:creator>
      <pubDate>Mon, 10 Nov 2025 12:26:41 +0000</pubDate>
      <link>https://forem.com/afe_damilare/how-to-monitor-a-nodejs-app-with-signoz-step-by-step-guide-2i71</link>
      <guid>https://forem.com/afe_damilare/how-to-monitor-a-nodejs-app-with-signoz-step-by-step-guide-2i71</guid>
      <description>&lt;p&gt;🚀 &lt;strong&gt;WHAT YOU’LL LEARN&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How to set up SigNoz locally with Docker&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to instrument your Node.js app with OpenTelemetry&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to view metrics and traces inside SigNoz&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;⚙️ &lt;strong&gt;PREREQUISITES&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before you begin, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node.js installed (v14+ recommended)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Docker and Docker Compose installed&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Basic familiarity with running Node.js apps&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;🧱 &lt;strong&gt;Step 1&lt;/strong&gt;: &lt;strong&gt;SET UP SIGNOZ LOCALLY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SigNoz provides a quick Docker-based setup.&lt;br&gt;
Open your terminal and run:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/SigNoz/signoz.git" rel="noopener noreferrer"&gt;https://github.com/SigNoz/signoz.git&lt;/a&gt;&lt;br&gt;
cd signoz/deploy/docker&lt;br&gt;
./install.sh&lt;/p&gt;

&lt;p&gt;Once the setup is complete, visit:&lt;/p&gt;

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

&lt;p&gt;You should see the SigNoz dashboard running 🎉&lt;/p&gt;




&lt;p&gt;🪄 &lt;strong&gt;Step 2&lt;/strong&gt;: &lt;strong&gt;CREATE A SIMPLE&lt;/strong&gt; &lt;strong&gt;Node.js APP&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let’s create a small Express app that we can monitor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can copy and paste the following code:&lt;/p&gt;

&lt;p&gt;mkdir node-signoz-demo&lt;br&gt;
cd node-signoz-demo&lt;br&gt;
npm init -y&lt;br&gt;
npm install express&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now, create a file called app.js:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;const express = require("express");&lt;br&gt;
const app = express();&lt;/p&gt;

&lt;p&gt;app.get("/", (req, res) =&amp;gt; {&lt;br&gt;
  res.send("Hello from Node.js!");&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;app.listen(3000, () =&amp;gt; {&lt;br&gt;
  console.log("Server running on &lt;a href="http://localhost:3000%22" rel="noopener noreferrer"&gt;http://localhost:3000"&lt;/a&gt;);&lt;br&gt;
});&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run it with:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;node app.js&lt;/p&gt;

&lt;p&gt;Your app is now live on &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;📡 &lt;strong&gt;Step 3&lt;/strong&gt;: &lt;strong&gt;ADD OpenTelemetry TO SEND DATA TO SIGNOZ&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SigNoz works with OpenTelemetry, an open-source observability framework.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the necessary OpenTelemetry packages:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Then create a file called tracing.js with the following:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;const { NodeSDK } = require("@opentelemetry/sdk-node");&lt;br&gt;
const { getNodeAutoInstrumentations } = require("@opentelemetry/auto-instrumentations-node");&lt;/p&gt;

&lt;p&gt;const sdk = new NodeSDK({&lt;br&gt;
  instrumentations: [getNodeAutoInstrumentations()],&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;sdk.start();&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finally, update your app.js to import this tracing setup:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;require("./tracing"); // initialize telemetry before anything else&lt;/p&gt;

&lt;p&gt;const express = require("express");&lt;br&gt;
const app = express();&lt;/p&gt;

&lt;p&gt;app.get("/", (req, res) =&amp;gt; {&lt;br&gt;
  res.send("Hello from Node.js with SigNoz!");&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;app.listen(3000, () =&amp;gt; {&lt;br&gt;
  console.log("Server running on &lt;a href="http://localhost:3000%22" rel="noopener noreferrer"&gt;http://localhost:3000"&lt;/a&gt;);&lt;br&gt;
});&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Restart your app:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;node app.js&lt;/p&gt;




&lt;p&gt;📊 &lt;strong&gt;Step 4&lt;/strong&gt;: &lt;strong&gt;VIEW YOUR METRICS AND TRACES IN SigNoz&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Head back to your SigNoz dashboard (&lt;a href="http://localhost:3301" rel="noopener noreferrer"&gt;http://localhost:3301&lt;/a&gt;), and you should start seeing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Traces from your Node.js app&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Requests per second (RPS)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Latency&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Error rates&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can explore your services, view spans, and even drill into slow requests.&lt;/p&gt;




&lt;p&gt;✅ &lt;strong&gt;Step 5&lt;/strong&gt;: &lt;strong&gt;ADD SOME LOAD (Optional)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can test how SigNoz reacts to traffic by sending requests to your app:&lt;/p&gt;

&lt;p&gt;for i in {1..50}; do curl &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;; done&lt;/p&gt;

&lt;p&gt;Now, refresh your SigNoz dashboard — you’ll see data populating in real-time.&lt;/p&gt;




&lt;p&gt;🎯 &lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Congrats! You’ve successfully:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Set up SigNoz using Docker&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Created a simple Node.js application&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added OpenTelemetry instrumentation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Viewed live metrics and traces inside SigNoz&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monitoring your app is an essential step to improving reliability and performance.&lt;br&gt;
With SigNoz, you get powerful observability tools for free and open-source.&lt;/p&gt;




&lt;p&gt;🧩 &lt;strong&gt;Next Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Try monitoring a real API or microservice&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Explore SigNoz alerting and dashboards&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Read more: &lt;a href="https://signoz.io/docs/" rel="noopener noreferrer"&gt;https://signoz.io/docs/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;✅ If you enjoyed this tutorial, share it or comment below&lt;/p&gt;

</description>
      <category>node</category>
      <category>opensource</category>
      <category>resources</category>
    </item>
  </channel>
</rss>
