Quick-start observabilité IA
monsys.ai propose une couche d’observabilité passive et de niveau audit pour vos applications LLM. Ce guide vous mène d’un compte vide à votre premier evidence pack signé en environ quinze minutes.
Ce que vous obtenez
- Un token d’ingestion lié à une application (un par application).
- Un SDK (Python, Node ou Go, ~150 LOC) qui enveloppe chaque appel LLM dans une trace.
- Rédaction PII à la source (IBAN-BE, RRN, BTW, KBO, email, téléphone).
- Coûts et tokens par requête dans le dashboard.
- Alertes d’anomalies (pics de coût, pics de refus, taux de fuite PII…).
- Un evidence pack signé Ed25519 téléchargeable par période, avec un vérifieur offline pour votre auditeur.
0. Prérequis
Votre tenant doit avoir ai_observability_enabled = true. C’est
désactivé par défaut. Demandez-le via info@be-hosted.be ou via
votre ticket d’onboarding beta — nous activons le flag dans les 24h
après signature de l’avenant IA du DPA.
1. Générer un token d’ingestion
Dans le dashboard :
- Nav à gauche → IA
- Applications → Nouvelle
- Remplissez
name(ex.bot-support) - Choisissez un redaction_level :
off— aucune rédaction (sandbox/test uniquement)hash-only— seuls les hashes de contenu sont stockéspattern-redact— IBAN/RRN/BTW remplacés par des jetons, reste préservé (défaut, recommandé)full-content-strip— chaînes vides pour tous les champs texte libre
- Cliquez Créer — le token (
aiv_...) n’est affiché qu’une fois. Sauvegardez-le maintenant ; seul le SHA256 est conservé.
2. Installer un SDK
Python
# Pas de pip install — copiez monsys_ai.py depuis /sdk/python/export MONSYS_AI_ENDPOINT=https://api.monsys.ai/api/v1/ai/ingestexport MONSYS_AI_TOKEN=aiv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfrom monsys_ai import Tracer
tracer = Tracer()
with tracer.trace("rag.chat") as t: with t.span("openai.chat", provider="openai", model="gpt-4o") as s: s.prompt = user_msg resp = client.chat.completions.create(...) s.completion = resp.choices[0].message.content s.input_tokens = resp.usage.prompt_tokens s.output_tokens = resp.usage.completion_tokensUn POST HTTP par trace, pas de batching, pas de threads en arrière-plan. Les erreurs sont loggées ; elles ne lèvent jamais d’exception.
Node (TypeScript)
import { Tracer } from "./monsys-ai";
const tracer = new Tracer();await tracer.trace("rag.chat", async (t) => { await t.span("openai.chat", { provider: "openai", model: "gpt-4o" }, async (s) => { const resp = await openai.chat.completions.create({...}); s.record({ prompt: userMsg, completion: resp.choices[0].message.content!, inputTokens: resp.usage!.prompt_tokens, outputTokens: resp.usage!.completion_tokens, }); });});Go
tracer, _ := monsysai.New(monsysai.Options{})_ = tracer.Trace(ctx, "rag.chat", func(t *monsysai.Trace) error { return t.Span(ctx, "openai.chat", monsysai.SpanOpts{Provider: "openai", Model: "gpt-4o"}, func(s *monsysai.Span) error { s.Prompt = userMsg return nil })})3. Vérifier dans le dashboard
En quelques secondes vous verrez :
- IA → Traces — liste chronologique, cliquez pour l’arbre de spans avec provider, modèle, tokens, latence, coût, hits PII.
- IA → Applications → bot-support — totaux par app.
- IA → Résumé — KPIs sur les dernières 24h.
4. Déverrouiller du contenu (TOTP-gated)
Si votre tenant utilise redaction_level=hash-only ou plus strict, le
contenu brut n’est pas visible dans le dashboard. Pour une enquête
incident, un admin peut déverrouiller le contenu d’un span spécifique :
- Ouvrez la trace.
- Cliquez sur un span → Déverrouiller le contenu.
- Confirmez avec votre code TOTP 6 chiffres + une raison (audit log).
- Le contenu original (rédigé) s’affiche pendant 5 minutes.
Chaque déverrouillage est enregistré avec user_id, span_id, raison et timestamp.
5. Configurer des règles d’alerte
IA → Règles d’alerte → Nouvelle règle. Exemples :
- Pic de coût :
cost_per_minute > 1.00 EUR pour app=bot-support - Pic de refus :
refusal_rate_pct > 30% sur 15min - Fuite PII :
pii_hit_rate_pct > 5% - Anomalie tool-call :
tool_call_zscore > 3(vs baseline 7 jours)
Les alertes vont vers votre canal ntfy et/ou webhooks. Les payloads webhook contiennent uniquement des hashes, pas de texte brut — voir ADR-0009 invariant 9.
6. Exporter un evidence pack
IA → Evidence packs → Nouveau pack :
- Période : ex.
2026-04-01à2026-04-30 - App : toutes ou une spécifique
include_blobs: activé (pour preuves complètes avec contenu rédigé)
Cliquez Créer. Vous obtenez une URL de téléchargement pour
pack-N.tar.gz.
Layout :
manifest.json — métadonnées + hashes de contenu (signé Ed25519)manifest.sig — signature Ed25519 (base64)traces.jsonl — une ligne par tracespans.jsonl — une ligne par spanblobs/HASH.txt — contenu rédigé par hash7. Vérification offline (pour votre auditeur)
Donnez à votre auditeur :
- Le
pack-N.tar.gz - Le script
tools/evidence-pack-verify.py - (Optionnel) notre clé publique de signature depuis https://monsys.ai/security/keys
L’auditeur lance :
pip install cryptographypython3 evidence-pack-verify.py pack-N.tar.gzCode de sortie :
0— signature valide + tous les hashes d’artifacts matchent1— mismatch (altération ou corruption)
L’auditeur n’a pas besoin de compte monsys. Le script utilise la clé publique embarquée dans le manifest ; vous la croisez avec ce que monsys publie publiquement.
Étapes suivantes
- Lisez les trois invariants stricts (passif, PII à la source, packs signés).
- Lisez le spec de l’enveloppe si vous construisez votre propre SDK.
- Lisez le format des evidence packs pour votre auditeur.