Architecture & transparence

Comment LogPulse est construit

La confiance commence par savoir ce qu'il y a sous le capot. Voici la stack qui fait tourner tes logs, les choix qu'on a faits, et où on va. On préfère trop partager que trop promettre.

La stack en un coup d'œil

Des composants ennuyeux et bien compris. Pas de magie.

Ingest

Fastify sur Node 22

GCP · Amsterdam (NL)

OTLP HTTP plus un endpoint JSON générique. Bearer-auth avec des clés API hashées en bcrypt. Rate-limited par clé.

Queue

BullMQ sur Redis

GCP · Amsterdam (NL)

Batche 100–1000 records avant chaque insert. Retry sur erreurs ClickHouse transitoires.

Stockage de logs

ClickHouse Cloud

GCP · Amsterdam (NL)

Colonnaire, partitionné par tenant_id et date. Order key (tenant_id, namespace, timestamp, log_id) fait que les requêtes scopées tenant tapent les bonnes partitions en premier. Compression 8–12× typique sur logs texte.

Métadonnées

PostgreSQL via Drizzle ORM

GCP · Amsterdam (NL)

Utilisateurs, organisations, clés API, dashboards, alertes, pipelines. Aucun contenu de log stocké ici.

Frontend

React 19 + Vite

Cloudflare Pages

TanStack Query pour l'état serveur, Zustand pour l'état UI, Tailwind + shadcn/ui. TypeScript strict partout.

IA

Anthropic Claude

Sous-traitant US

Alimente la traduction langage naturel → LPQL et l'AI Investigator. Listé dans nos sous-traitants. Les logs ne vont à la LLM que quand tu déclenches une requête IA.

Comment les données circulent

De tes apps à ClickHouse et retour.

  Your apps  ──OTLP HTTP──▶  Fastify ingest  ──▶  BullMQ (Redis)
                                  │                       │
                              auth + quota              batch
                                  │                       ▼
                                  │             ClickHouse (GCP · Amsterdam)
                                  │                       │
                                  ▼                       │
                              PostgreSQL                  │
                              (metadata)                  │
                                                          ▼
  Web UI  ◀── LPQL / AI ──  Fastify query  ──▶  ClickHouse (tenant-scoped)

Ingest push : agents et SDK envoient les logs via OTLP HTTP. L'API authentifie et met en queue ; un worker batche et écrit dans ClickHouse. Les requêtes vont dans l'autre sens : l'UI tape l'API, l'API exécute LPQL sur ClickHouse avec le scoping tenant imposé à la frontière.

Multi-tenancy & isolation

Séparation imposée dans la base, pas seulement dans l'app.

  • Les tenants Free, Pro et Business partagent une table ClickHouse partitionnée par tenant_id + date. Les clients Enterprise obtiennent un stack entièrement dédié : ingestion, compute et stockage isolés.
  • Chaque requête porte WHERE tenant_id = '…', imposé à la frontière API, paramétrisé, jamais concaténé. Le partition pruning fait que les données cross-tenant ne sont pas scannées.
  • Les clés API sont hashées en bcrypt dans PostgreSQL ; les clés brutes sont montrées une fois à la création et jamais loggées.
  • Le RBAC par namespace scope l'accès aux logs par équipe : les équipes Platform Engineering peuvent donner du self-service aux devs sans exposer d'autres namespaces.

Rétention & coût

Tarif forfaitaire = tu ne paies pas plus quand tu logues plus que prévu.

  • Rétention par plan : Free 7j, Starter 14j, Pro 30j. Les plans Team et Platform ont une rétention configurable avec gestion automatisée du cycle de vie.
  • Tarif forfaitaire : l'ingest quotidien est inclus jusqu'à ton quota. Pas de tarification au Go, pas de factures de dépassement surprise.
  • La compression colonnaire de ClickHouse atteint typiquement 8–12× sur les logs texte : c'est pour ça qu'on peut offrir un tarif forfaitaire sans saigner sur la marge.
  • Quand tu atteins ton quota, tu reçois un 429 et un mail à 80 %. On préfère que tu upgrades en connaissance de cause plutôt que facturer du dépassement en silence.

L'IA : un raccourci, pas une boîte noire

Chaque requête que l'IA exécute est montrée. Tu peux vérifier, éditer et sauvegarder.

  • Les questions en langage naturel sont traduites en LPQL par une LLM (Anthropic Claude). La LLM est listée dans nos sous-traitants et ne voit les données que quand tu déclenches une requête IA.
  • L'AI Investigator enchaîne les requêtes : chercher, corréler aux déploiements, comparer à la baseline. Chaque étape est montrée dans le chat avec la LPQL exécutée et les lignes de logs renvoyées.
  • Les hypothèses sont formulées comme 'cause racine probable' avec preuves, pas comme des déclarations. Tu vérifies avant d'agir.
  • Des options LLM hébergées en UE sont sur la roadmap pour les clients aux exigences strictes de résidence. D'ici là, les fonctionnalités IA sont opt-in par requête.
Honnête, pas hors d'haleine

Où on en est vs où on va

On préfère être honnête sur ce qui est en place et ce qui est encore en chantier.

RGPD

Conforme par défaut

DPA + SCC disponibles sur les plans payants. Chemin de données UE-only. Chiffrement au repos et en transit.

SOC 2 Type II

En cours · T3 2026

Contrôles Trust Services Criteria en place. Audit en cours.

ISO 27001

En préparation

Contrôles alignés ; pas encore certifiés.

Page d'uptime publique

Prévu

Page de statut avec uptime historique par service.

Benchmarks publics

Prévu

Posts reproductibles sur le throughput d'ingest et la latence des requêtes.

Repéré un trou ou envie d'aller plus loin ?

On préfère trop partager que trop promettre. Écris à [email protected] avec tes questions sur la stack, l'isolation, ou tout ce qu'on n'a pas couvert ici.

Nous utilisons des cookies pour analyser le trafic du site et améliorer ton expérience. Aucun cookie n'est placé sans ton consentement. Politique de confidentialité