AI-loggingarchitectuur
Wat je vastlegt in de logs van AI-systemen — prompts, completions, latency, tokens, tool-aanroepen — samen met opslagstrategieën, bewaarbeleid en privacyoverwegingen.
Waarom AI-logging anders is
Het loggen van AI-systemen gaat verder dan traditionele applicatielogging. In een standaard webapplicatie log je HTTP-requests, -responses en -fouten. In een AI-applicatie is de "request" een genuanceerde prompt in natuurlijke taal die gevoelige informatie kan bevatten, en de "response" is gegenereerde tekst die PII, gehallucineerde inhoud of veiligheidsschendingen kan bevatten. De inhoud van AI-logs verschilt kwalitatief van traditionele applicatielogs, en dit verandert alles aan hoe je ze vastlegt, opslaat en behandelt.
Wat je vastlegt
Kerngegevens van de interactie
Elke AI-interactie zou deze velden moeten vastleggen:
| Veld | Beschrijving | Securitywaarde |
|---|---|---|
| Request-ID | Unieke identificatie voor de interactie | Gebeurtenissen correleren over systemen heen |
| Tijdstempel | Wanneer de request werd ontvangen en de response werd voltooid | Reconstructie van de tijdlijn |
| Gebruikers-ID | Geauthenticeerde gebruiker of sessie-identificatie | Toeschrijving, patroonanalyse |
| Model | Welk model en welke versie de request afhandelde | Modelspecifieke kwetsbaarheden identificeren |
| System prompt | De geldende systeeminstructies (of een hash/versie-ID) | Integriteit van de system prompt verifiëren |
| Gebruikersprompt | De invoertekst van de gebruiker | Aanvalsforensiek, patroondetectie |
| Completion | De responstekst van het model | Outputanalyse, veiligheidsaudit |
| Parameters | Temperature, max_tokens, top_p, enz. | Aanvalsomstandigheden begrijpen |
| Tokenaantallen | Inputtokens, outputtokens, totaal | Kostenanalyse, extractiedetectie |
| Latency | TTFT en totale generatietijd | Prestatieanalyse, aanvalsdetectie |
| Reden van beëindiging | Waarom de generatie stopte (lengte, stop-token, contentfilter) | Activering van filters volgen |
Beslissingsgegevens van guardrails
| Veld | Beschrijving | Securitywaarde |
|---|---|---|
| Naam van de guard | Welke guardrail de interactie beoordeelde | Begrijpen welke controles geactiveerd werden |
| Beslissing | Toestaan, blokkeren of aanpassen | Effectiviteit van guardrails volgen |
| Score | Vertrouwens- of risicoscore | Drempelwaarden afstemmen, trendanalyse |
| Reden | Waarom de guardrail zijn beslissing nam | Regels verfijnen, onderzoek naar false positives |
| Latency | Tijd die de guardrail-evaluatie kostte | Prestatie-impact van securitycontroles |
Tool-aanroepgegevens
Voor agentic systemen vereisen tool-aanroepen gedetailleerde logging:
| Veld | Beschrijving | Securitywaarde |
|---|---|---|
| Toolnaam | Welke tool werd aangeroepen | Patronen van toolgebruik volgen |
| Argumenten | De argumenten die aan de tool werden doorgegeven | Injectie via toolparameters detecteren |
| Resultaat | Wat de tool teruggaf | Toolgedrag verifiëren |
| Duur | Hoe lang de tool-aanroep duurde | Hangende of misbruikte tools detecteren |
| Autorisatie | Of de tool-aanroep geautoriseerd was | Autorisatiebeslissingen volgen |
Ophaalgegevens (RAG-systemen)
| Veld | Beschrijving | Securitywaarde |
|---|---|---|
| Query-embedding | De embedding die gebruikt werd voor het ophalen (of een hash) | Manipulatie van het ophalen detecteren |
| Opgehaalde documenten | Document-ID's en relevantiescores | Vergiftigde ophalingen identificeren |
| Bron | Welke kennisbank werd bevraagd | Herkomst van gegevens volgen |
Loggingarchitectuur
Architectuurpatroon: dubbele pipeline
De aanbevolen architectuur gebruikt twee parallelle pipelines — één voor operationele realtimegegevens en één voor het loggen van volledige gesprekken:
┌─────────────────┐
│ AI Application │
└────────┬────────┘
│
┌────┴────┐
│ │
▼ ▼
┌────────┐ ┌──────────────┐
│ Real- │ │ Full Content │
│ time │ │ Pipeline │
│Pipeline│ │ │
│ │ │ Prompts + │
│Metrics,│ │ Completions │
│Counts, │ │ + Tool Calls │
│Latency │ │ │
│ │ │ ┌──────────┐ │
│ │ │ │PII Redact│ │
│ │ │ └────┬─────┘ │
│ │ │ │ │
└───┬────┘ └──────┼───────┘
│ │
▼ ▼
┌────────┐ ┌──────────┐
│Metrics │ │Encrypted │
│Store │ │Log Store │
│(Prom.) │ │(S3/GCS) │
└────────┘ └──────────┘
Realtime pipeline
De realtime pipeline legt gestructureerde metrics vast die met lage latency bevraagd kunnen worden:
- Time-seriesdatabase (Prometheus, InfluxDB, Datadog) voor numerieke metrics
- Streamingprocessor (Kafka, Kinesis) voor realtime patroondetectie
- Alerting-engine (Alertmanager, PagerDuty) voor onmiddellijke meldingen
- Bewaring: 30-90 dagen op volledige resolutie, 1 jaar geaggregeerd
Pipeline voor volledige inhoud
De contentpipeline legt de volledige tekst van interacties vast voor forensisch onderzoek:
- Voorbewerking: PII-detectie en optionele redactie vóór opslag
- Versleuteling: Alle gespreksgegevens versleuteld in rust en tijdens transport
- Toegangscontrole: Strikte rolgebaseerde toegang tot gespreksinhoud
- Bewaring: Volgens beleid, doorgaans 30 dagen tot 7 jaar afhankelijk van regelgevende vereisten
Opslagstrategieën
Gelaagde opslag
Gebruik opslaglagen om kosten en toegangssnelheid in balans te brengen:
| Laag | Opslag | Bewaring | Toegangstijd | Use case |
|---|---|---|---|---|
| Hot | Elasticsearch, PostgreSQL | 7-30 dagen | Milliseconden | Actief onderzoek, realtime zoeken |
| Warm | Object store (S3 Standard) | 30-90 dagen | Seconden | Onderzoek van recente incidenten |
| Cold | Archiefopslag (S3 Glacier) | 1-7 jaar | Uren | Compliance, historische analyse |
Schemaontwerp
Ontwerp logschema's met het oog op bevraagbaarheid. Veelvoorkomende querypatronen in AI-securityonderzoeken:
-- Find all interactions where the guardrail was triggered
-- but the user eventually received a response
SELECT request_id, user_id, user_prompt, completion
FROM ai_interactions
WHERE guardrail_triggered = true
AND response_delivered = true
AND timestamp > NOW() - INTERVAL '7 days';
-- Find users with unusually high refusal rates
-- (may indicate active jailbreak attempts)
SELECT user_id,
COUNT(*) as total_requests,
SUM(CASE WHEN finish_reason = 'content_filter' THEN 1 ELSE 0 END) as filtered,
ROUND(100.0 * SUM(CASE WHEN finish_reason = 'content_filter' THEN 1 ELSE 0 END)
/ COUNT(*), 2) as filter_rate
FROM ai_interactions
WHERE timestamp > NOW() - INTERVAL '24 hours'
GROUP BY user_id
HAVING filter_rate > 20
ORDER BY filter_rate DESC;Privacyoverwegingen
AI-logs zijn uitzonderlijk gevoelig omdat ze de volledige tekst bevatten van menselijke gesprekken met AI-systemen. De omgang met privacy is niet optioneel — het is een wettelijke en ethische vereiste.
Gegevensclassificatie
| Type inhoud | Classificatie | Behandeling |
|---|---|---|
| System prompts | Bedrijfsvertrouwelijk | Veilig opslaan; toegang beperken tot het securityteam |
| Gebruikersprompts | Persoonsgegevens (mogelijk gevoelig) | PII-redactiebeleid toepassen; versleutelen in rust |
| Completions | Gegenereerde inhoud (kan PII bevatten) | PII-detectie toepassen; mogelijk redactie nodig |
| Argumenten van tool-aanroepen | Variabel (kan credentials bevatten) | Scannen op secrets; redacteren vóór opslag |
| Metrics (numeriek) | Intern | Standaard toegangscontroles |
Strategieën voor de omgang met PII
Detecteer PII vóór opslag
Voer PII-detectie (NER + regex) uit op alle prompts en completions voordat ze de contentpipeline binnenkomen. Markeer interacties die PII bevatten voor verbeterde behandeling.
Beslis: redacteren, pseudonimiseren of behouden
Op basis van je beleid voor gegevensbehandeling kun je PII redacteren (vervangen door [REDACTED]), pseudonimiseren (vervangen door consistente nepwaarden) of behouden met verbeterde toegangscontroles.
Versleutel en beperk toegang
Versleutel alle gesprekslogs in rust. Implementeer strikte rolgebaseerde toegangscontroles. Vereis een rechtvaardiging voor toegang tot gespreksinhoud (break-glass-procedure).
Audit toegang
Log alle toegang tot gespreksinhoud. Neem op wie het bekeek, wanneer, waarom (rechtvaardiging) en wat ze zagen.
Regelgevende vereisten
| Regelgeving | Kernvereiste | Impact op logging |
|---|---|---|
| GDPR | Recht op verwijdering, doelbinding, dataminimalisatie | Moet de gegevens van specifieke gebruikers kunnen verwijderen; log alleen wat noodzakelijk is |
| CCPA/CPRA | Recht om te weten, recht op verwijdering, recht om af te zien | Moet bekendmaken wat er gelogd wordt; verwijdering op verzoek mogelijk maken |
| HIPAA | Waarborgen voor beschermde gezondheidsinformatie | Als de AI gezondheidsgegevens verwerkt, moeten logs voldoen aan de HIPAA-securityvereisten |
| SOC 2 | Controles op security, beschikbaarheid en vertrouwelijkheid | Toegangscontroles op logs en audit trails vereist |
Logging voor incidentrespons
Wanneer er een security-incident plaatsvindt, moeten je logs deze vragen binnen enkele minuten beantwoorden:
- Wat is er gebeurd? — Volledige tekst van de vijandige interactie
- Wanneer is het gebeurd? — Nauwkeurige tijdstempels
- Wie heeft het gedaan? — Gebruikersidentificatie en authenticatiedetails
- Hoe omzeilde het de controles? — Beslissingen en scores van guardrails
- Wat was de impact? — Welke gegevens werden blootgesteld of welke schadelijke inhoud werd gegenereerd
- Is het nog gaande? — Zijn er andere gebruikers die vergelijkbare patronen vertonen
Queries voor incidentrespons
Bouw vooraf geschreven queries voor veelvoorkomende incidenttypes:
- Extractie van de system prompt: Zoek naar completions die bekende fragmenten van de system prompt bevatten
- Lekken van PII: Zoek naar completions die door PII-detectie gemarkeerd zijn
- Jailbreak-campagne: Aggregeer patronen van guardrail-triggers per gebruiker, tijdvenster en techniek
- Toolmisbruik: Zoek naar ongebruikelijke patronen van tool-aanroepen (onverwachte tools, risicovolle argumenten)
- Data-exfiltratie: Zoek naar interacties met hoge aantallen outputtokens en extractiegerelateerde patronen
Anti-patronen om te vermijden
| Anti-patroon | Probleem | Juiste aanpak |
|---|---|---|
| Niets loggen | Onmogelijk om incidenten te onderzoeken | Log kerngegevens van de interactie met PII-redactie |
| Alles ongeredacteerd loggen | Privacyschending, regelgevend risico | Pas PII-detectie en -redactie toe vóór opslag |
| Geen bewaarbeleid | Onbegrensde opslagkosten en aansprakelijkheid | Definieer bewaring per laag met geautomatiseerd verlopen |
| Geen toegangscontroles op logs | Iedereen kan gebruikersgesprekken lezen | Implementeer rolgebaseerde toegang met break-glass-procedures |
| Alleen fouten loggen | Mist geslaagde aanvallen (200 OK-responses) | Log alle interacties, niet alleen fouten |
| Eén enkele opslaglaag | Ofwel te duur (alles hot) ofwel te traag (alles cold) | Implementeer gelaagde opslag met geautomatiseerde migratie |
Gerelateerde onderwerpen
- AI-monitoring en observability — de bredere monitoringcontext
- Anomaliedetectie — patronen detecteren in gelogde gegevens
- Runtime monitoring — monitoring gebruiken als securitycontrole
- Veilige levenscyclus van AI-ontwikkeling — waar logging past in de ontwikkellevenscyclus
Referenties
- "Logging and Monitoring for ML Systems" - Google SRE (2024) - Comprehensive guide to logging and monitoring practices for production ML systems
- "Privacy-Preserving Machine Learning Logging" - Tramèr et al. (2024) - Research on techniques for logging ML system behavior while minimizing privacy impact
- "GDPR Compliance for AI Systems" - European Data Protection Board (2025) - Guidelines on applying GDPR requirements to AI systems including data logging and retention
- "Building Secure and Observable LLM Applications" - OWASP (2025) - Security-focused guidance on LLM application logging and observability
Waarom zou AI-logging een dubbele-pipelinearchitectuur (realtime metrics + volledige inhoud) moeten gebruiken?