Observo is a self-hosted centralized logging platform that ingests, stores, and surfaces logs in real time — so you can debug faster, alert smarter, and ship with confidence.
From ingestion to alerting, Observo covers the full observability lifecycle so you never miss a critical event.
Stream logs instantly via REST API or our Python handler. Millisecond precision timestamps, batched delivery, and zero dropped logs.
Find any log in seconds. Filter by level, project, timestamp, message, or custom metadata fields. Full-text search across all logs.
Define alert rules based on log patterns, error rates, or thresholds. Get notified via email, Slack, or webhooks the moment something goes wrong.
Organize logs across multiple projects and environments. Separate API keys per project. Keep dev, staging, and production completely isolated.
Visualize log volume, error rates, and trends over time. Spot anomalies before users report them. Built-in dashboards, no setup needed.
Ask questions about your logs in plain English. Our AI agent surfaces root causes, explains patterns, and suggests fixes automatically.
Get started in minutes, not hours. No infrastructure changes required.
Sign in and create your first project. Get a unique Project ID and API key instantly.
Install the Python handler or make a simple REST call. Works with any language or framework.
Watch logs stream in real time from your dashboard. Search, filter, and drill down into any event.
Set alert rules and get notified when errors spike. Use AI analysis to find root causes fast.
Add Observo to any project in under 5 minutes. Works with Django, Flask, FastAPI, or plain Python — and any other language via the REST API.
pip install observo-handler — no config files, no agents
From your project settings — regenerate any time
Use Python's standard logging module — zero lock-in
# Install: pip install observo-handler import logging from observo_handler import ObservoHandler handler = ObservoHandler( project_id="your-project-id", api_key="obs_live_xxxxxxxxxxxx", observo_url="https://observo-log.vendlyghana.space/api/v1/ingest/", ) logging.getLogger("myapp").addHandler(handler) # That's it — use standard logging logger = logging.getLogger("myapp") logger.info("App started") logger.error("Something went wrong", exc_info=True)
# settings.py LOGGING = { "version": 1, "handlers": { "observo": { "class": "observo_handler.ObservoHandler", "project_id": "your-project-id", "api_key": "obs_live_xxxxxxxxxxxx", "batch_size": 10, "flush_interval": 5, }, }, "root": { "handlers": ["observo"], "level": "INFO", }, } MIDDLEWARE = [ "observo_handler.middleware.RequestIDMiddleware", # ... your other middleware ]
# POST to the ingestion endpoint curl -X POST \ https://observo-log.vendlyghana.space/api/v1/ingest/ \ -H "X-Project-ID: your-project-id" \ -H "Authorization: Bearer obs_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "level": "ERROR", "message": "Payment failed", "logger": "payments.stripe", "extra": { "user_id": 42, "amount": 4999 } }' # Response 201 Created {"id": "log_01j...", "created": "2026-03-16T12:41:09Z"}
Comprehensive guides, API reference, and integration examples.
Self-host Observo for free. No vendor lock-in, no per-seat pricing. Full control over your data, forever.