← Back to Home

Self-Hosted Agentic Observability with Superlog

Self-Hosted Agentic Observability with Superlog

Traditional monitoring tells you a service is down. But what if your observability stack could also tell you why — without you having to open five different dashboards and trace through logs manually?

Enter Superlog: an open-source, self-hosted agentic telemetry system. It ingests OpenTelemetry traces, logs, and metrics, groups noisy signals into actionable incidents, and runs AI agents to investigate root causes automatically. Think of it as a self-healing observability platform that watches your infrastructure while you sleep.

Why Is Superlog Trending?

Superlog has gathered over 900 GitHub stars in less than a month, and it's backed by Y Combinator (P26 batch). The convergence of OpenTelemetry standardization and LLM-powered agents makes this the right idea at the right time:

  • OpenTelemetry-native — no proprietary agents, no vendor lock-in. Your services emit OTLP, Superlog ingests it.
  • AI-driven incident grouping — the worker process groups related alerts into incidents and runs an LLM agent to investigate, producing a plain-English summary of what happened.
  • Self-hosted with Docker — one docker compose up gets you a complete stack: ClickHouse for telemetry, PostgreSQL for metadata, and an OTel collector for ingestion.
  • Pluggable agent runners — the default "community" agent runner records a local incident summary, and you can swap in custom runners for deeper integrations.
  • GitHub and Linear integrations — auto-create issues and tickets from incidents directly.

Prerequisites

  • A Linux server (or VM) with Docker and Docker Compose installed
  • Node.js 20+ and pnpm 9+ (for local development)
  • 4 GB RAM minimum (ClickHouse is hungry)
  • An Anthropic or OpenAI API key (optional, for AI investigation)

Installation and Setup

Step 1: Clone the Repository

git clone https://github.com/superloglabs/superlog.git
cd superlog

Step 2: Install Dependencies

Superlog uses pnpm workspaces and Turborepo:

pnpm install

Step 3: Start the Backing Services

Bring up PostgreSQL, ClickHouse, and the OpenTelemetry Collector:

docker compose up -d

This starts three containers:

  • PostgreSQL (postgres:16) — port 5434, stores metadata, incidents, and users
  • ClickHouse (clickhouse/clickhouse-server:26.1) — ports 8123 and 9000, stores telemetry (traces, logs, metrics)
  • Collector (otel/opentelemetry-collector-contrib) — ports 4317 and 4318, routes OTLP intake to ClickHouse

Step 4: Run Database Migrations

pnpm --filter @superlog/db db:migrate

Step 5: Start the Development Stack

pnpm dev

This starts four services:

  • Web UIhttp://localhost:5173
  • API Serverhttp://localhost:4100
  • OTLP Intake Proxyhttp://localhost:4101
  • Worker — background incident processing

Step 6: Configure an API Key (Optional)

For AI-powered incident investigation, set an LLM provider key in the worker's environment:

# apps/worker/.env
ANTHROPIC_API_KEY=sk-ant-...

Architecture

Architecture

The architecture follows a clean ingestion → storage → processing → visualization pipeline.

Data Ingestion: Your applications emit OpenTelemetry telemetry (traces, logs, metrics) via OTLP gRPC/HTTP. The OpenTelemetry Collector receives this data, strips any tenant-spoofing attributes, stamps each signal with a project ID, and exports everything to ClickHouse.

Storage Layer: ClickHouse stores all telemetry data in optimized columnar tables (one per signal type). PostgreSQL holds metadata: projects, users, incidents, and configuration.

Application Layer: The API Server provides an HTTP API for the web frontend and handles authentication. The Worker runs two critical processes: incident grouping (correlating related telemetry signals) and the agent runner (invoking an LLM to investigate each incident). The Web UI is a React dashboard built with Vite.

AI & Integrations: When an incident is created, the agent runner can call an LLM (Anthropic or OpenAI) for root-cause analysis. It can also auto-create GitHub issues or Linear tickets from incidents.

Sending Telemetry to Superlog

Point your OpenTelemetry exporter to the collector:

# otel-collector-config.yaml (in your app)
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

exporters:
  otlp:
    endpoint: your-server:4317  # or :4318 for HTTP
    tls:
      insecure: true  # disable for production

Or use any OTLP-compatible SDK (Python, Node.js, Go, Java, etc.):

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider

provider = TracerProvider(
    resource=Resource.create({"service.name": "my-app"})
)
provider.add_span_processor(
    BatchSpanProcessor(OTLPSpanExporter(endpoint="http://your-server:4317"))
)
trace.set_tracer_provider(provider)

Verification Checklist

  • All four services (PostgreSQL, ClickHouse, Collector, API) are running: docker compose ps
  • Web UI loads at http://localhost:5173
  • API responds at http://localhost:4100/health
  • You can send a test trace and see it in the dashboard
  • Incidents appear when the worker groups related signals

Resources

← Retour à l'Accueil

Observabilité Agentique Auto-Hébergée avec Superlog

Observabilité Agentique Auto-Hébergée avec Superlog

La surveillance traditionnelle vous dit qu'un service est tombé. Mais si votre stack d'observabilité pouvait aussi vous dire pourquoi — sans que vous ayez à ouvrir cinq tableaux de bord différents et à parcourir les logs manuellement ?

C'est là qu'intervient Superlog : un système de télémétrie agentique open-source et auto-hébergé. Il ingère les traces, logs et métriques OpenTelemetry, regroupe les signaux bruyants en incidents exploitables, et exécute des agents IA pour enquêter automatiquement sur les causes racines. Considérez-le comme une plateforme d'observabilité auto-réparatrice qui surveille votre infrastructure pendant que vous dormez.

Pourquoi Superlog est-il Tendance ?

Superlog a rassemblé plus de 900 étoiles GitHub en moins d'un mois, et il est soutenu par Y Combinator (batch P26). La convergence de la standardisation OpenTelemetry et des agents alimentés par LLM fait de ce projet la bonne idée au bon moment :

  • Natif OpenTelemetry — pas d'agents propriétaires, pas de verrouillage fournisseur. Vos services émettent de l'OTLP, Superlog l'ingère.
  • Regroupement d'incidents par IA — le processus worker regroupe les alertes connexes en incidents et exécute un agent LLM pour enquêter, produisant un résumé en langage clair de ce qui s'est passé.
  • Auto-hébergé avec Docker — un docker compose up vous donne une stack complète : ClickHouse pour la télémétrie, PostgreSQL pour les métadonnées, et un collecteur OTel pour l'ingestion.
  • Exécuteurs d'agents enfichables — l'exécuteur "community" par défaut enregistre un résumé local des incidents, et vous pouvez le remplacer par des exécuteurs personnalisés pour des intégrations plus poussées.
  • Intégrations GitHub et Linear — créez automatiquement des issues et des tickets à partir des incidents.

Prérequis

  • Un serveur Linux (ou VM) avec Docker et Docker Compose installés
  • Node.js 20+ et pnpm 9+ (pour le développement local)
  • 4 Go de RAM minimum (ClickHouse est gourmand)
  • Une clé API Anthropic ou OpenAI (optionnelle, pour l'enquête IA)

Installation et Configuration

Étape 1 : Cloner le Dépôt

git clone https://github.com/superloglabs/superlog.git
cd superlog

Étape 2 : Installer les Dépendances

Superlog utilise pnpm workspaces et Turborepo :

pnpm install

Étape 3 : Démarrer les Services Supports

Lancez PostgreSQL, ClickHouse et le collecteur OpenTelemetry :

docker compose up -d

Cela démarre trois conteneurs :

  • PostgreSQL (postgres:16) — port 5434, stocke métadonnées, incidents et utilisateurs
  • ClickHouse (clickhouse/clickhouse-server:26.1) — ports 8123 et 9000, stocke la télémétrie (traces, logs, métriques)
  • Collecteur (otel/opentelemetry-collector-contrib) — ports 4317 et 4318, achemine l'ingestion OTLP vers ClickHouse

Étape 4 : Exécuter les Migrations

pnpm --filter @superlog/db db:migrate

Étape 5 : Démarrer la Stack de Développement

pnpm dev

Cela démarre quatre services :

  • Interface Webhttp://localhost:5173
  • Serveur APIhttp://localhost:4100
  • Proxy d'ingestion OTLPhttp://localhost:4101
  • Worker — traitement des incidents en arrière-plan

Étape 6 : Configurer une Clé API (Optionnel)

Pour l'enquête d'incidents par IA, définissez une clé de fournisseur LLM dans l'environnement du worker :

# apps/worker/.env
ANTHROPIC_API_KEY=sk-ant-...

Architecture

Architecture

L'architecture suit un pipeline propre : ingestion → stockage → traitement → visualisation.

Ingestion des données : Vos applications émettent de la télémétrie OpenTelemetry (traces, logs, métriques) via OTLP gRPC/HTTP. Le collecteur OpenTelemetry reçoit ces données, supprime les attributs usurpés, estampille chaque signal avec un ID de projet, et exporte le tout vers ClickHouse.

Couche de stockage : ClickHouse stocke toutes les données de télémétrie dans des tables columnaires optimisées (une par type de signal). PostgreSQL contient les métadonnées : projets, utilisateurs, incidents et configuration.

Couche applicative : Le serveur API fournit une interface HTTP pour le frontend web et gère l'authentification. Le Worker exécute deux processus critiques : le regroupement d'incidents (corrélation des signaux de télémétrie connexes) et l'exécuteur d'agent (invocation d'un LLM pour enquêter sur chaque incident). L'interface Web est un tableau de bord React construit avec Vite.

IA et intégrations : Lorsqu'un incident est créé, l'exécuteur d'agent peut appeler un LLM (Anthropic ou OpenAI) pour une analyse des causes racines. Il peut également créer automatiquement des issues GitHub ou des tickets Linear à partir des incidents.

Envoyer de la Télémétrie à Superlog

Pointez votre exportateur OpenTelemetry vers le collecteur :

# otel-collector-config.yaml (dans votre app)
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

exporters:
  otlp:
    endpoint: votre-serveur:4317  # ou :4318 pour HTTP
    tls:
      insecure: true  # désactiver en production

Ou utilisez n'importe quel SDK compatible OTLP (Python, Node.js, Go, Java, etc.) :

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider

provider = TracerProvider(
    resource=Resource.create({"service.name": "mon-app"})
)
provider.add_span_processor(
    BatchSpanProcessor(OTLPSpanExporter(endpoint="http://votre-serveur:4317"))
)
trace.set_tracer_provider(provider)

Liste de Vérification

  • Les quatre services (PostgreSQL, ClickHouse, Collecteur, API) fonctionnent : docker compose ps
  • L'interface Web se charge sur http://localhost:5173
  • L'API répond sur http://localhost:4100/health
  • Vous pouvez envoyer une trace de test et la voir dans le tableau de bord
  • Les incidents apparaissent lorsque le worker regroupe les signaux connexes

Ressources