# From Zero to Observability: My First Experience Self-Hosting SigNoz with Python & Docker

## Introduction

Observability is becoming an essential skill for modern developers, but before this project I had never self-hosted an observability platform.

As part of the Agents of SigNoz Hackathon, I decided to set up SigNoz on my MacBook, connect it with a simple Python Flask application, and explore how traces and metrics are collected in real time.

In this blog, I'll share my complete hands-on experience—from installing Docker and SigNoz to instrumenting a Python application with OpenTelemetry and visualizing telemetry data inside the SigNoz dashboard.

## What is SigNoz?

SigNoz is an open-source observability platform that helps developers monitor applications using metrics, traces, and logs—all from a single dashboard.

Unlike many commercial monitoring tools, SigNoz can be self-hosted, making it an excellent choice for developers who want full control over their observability stack while learning modern cloud-native technologies.

For this project, I used:

*   Docker Desktop
    
*   Python 3.13
    
*   Flask
    
*   OpenTelemetry
    
*   SigNoz
    
*   macOS (MacBook Air M2)
    
*   The first step was installing Docker Desktop on my MacBook Air M2. After confirming Docker was running correctly, I cloned the SigNoz repository and started the observability stack using Docker Compose.
    
    Within a few minutes, all the required containers were running, and I accessed the SigNoz dashboard locally at:
    
    http://localhost:8080
    
    Seeing the dashboard open successfully was my first milestone. It confirmed that my local observability environment was ready to receive telemetry data from my application.
    
*   Instrumenting a Python Flask Application
    
    After setting up SigNoz, I created a simple Flask application with two routes.
    
    I then installed OpenTelemetry and instrumented the application using the `opentelemetry-instrument` command. This automatically generated traces whenever I accessed the application in my browser.
    
    Running the application with OpenTelemetry was straightforward:
    
    ```bash
    OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 \
    OTEL_SERVICE_NAME=python-demo \
    opentelemetry-instrument \
    flask --app app run --port=5002
    ```
    
    After opening the application in the browser and visiting `/` and `/hello`, telemetry data started flowing into SigNoz automatically.
    
*   Conclusion
    
    This project gave me my first hands-on experience with observability and OpenTelemetry.
    
    Setting up SigNoz locally, instrumenting a Python Flask application, and watching traces appear in real time was both exciting and educational.
    
    I now have a much better understanding of how modern applications are monitored, and I look forward to exploring more advanced observability features such as logs, metrics, dashboards, and alerts in future projects.
