Skip to content

07. RAG Observability

Category: Production RAG Engineering
Module: Part V β€” Advanced Retrieval-Augmented Generation
Difficulty: Advanced


πŸ“– Overview

A production RAG system is not observable simply because application logs exist.

Enterprise RAG introduces a multi-stage execution pipeline:

User Query
    ↓
Query Processing
    ↓
Query Rewriting
    ↓
Embedding
    ↓
Retrieval
    ↓
Filtering
    ↓
Reranking
    ↓
Context Selection
    ↓
Prompt Assembly
    ↓
LLM Generation
    ↓
Response Validation
    ↓
Citation
    ↓
Enterprise Response

When a user receives a poor answer, engineers need to determine:

Was the query rewritten incorrectly?

Did embedding fail?

Did retrieval return the wrong documents?

Did metadata filtering remove valid evidence?

Did reranking select poor results?

Was useful context discarded?

Was the prompt assembled incorrectly?

Did the LLM hallucinate?

Did response validation fail?

Were citations incorrect?

Was the request slow because of retrieval or generation?

Why did token usage increase?

Why did cost increase?

Traditional application logs are often insufficient to answer these questions.

Production RAG therefore requires end-to-end observability across the complete retrieval, reasoning, generation, and response pipeline.

The objective is not simply to collect more logs.

The objective is to create a system where every important RAG decision can be:

Observed
    ↓
Traced
    ↓
Measured
    ↓
Correlated
    ↓
Debugged
    ↓
Optimized

Production RAG observability connects system execution with answer quality, performance, cost, security, and user experience.


🎯 Learning Objectives

After completing this chapter, you will be able to:

  • Understand observability in RAG systems
  • Understand RAG observability vs traditional application observability
  • Design end-to-end RAG traces
  • Design RAG spans
  • Trace retrieval pipelines
  • Trace reranking
  • Trace query rewriting
  • Trace context selection
  • Trace prompt assembly
  • Trace LLM calls
  • Trace response validation
  • Trace citation generation
  • Capture token usage
  • Monitor latency
  • Monitor throughput
  • Monitor errors
  • Monitor retries
  • Monitor fallbacks
  • Monitor retrieval quality signals
  • Monitor context quality signals
  • Monitor generation quality signals
  • Monitor citation quality signals
  • Monitor cost
  • Implement structured logging
  • Implement distributed tracing
  • Design RAG-specific metrics
  • Design RAG dashboards
  • Build production alerts
  • Perform trace-based debugging
  • Correlate quality with infrastructure metrics
  • Detect RAG regressions
  • Detect retrieval failures
  • Detect model failures
  • Detect prompt failures
  • Detect cost anomalies
  • Detect latency regressions
  • Implement tenant-aware observability
  • Design privacy-aware observability
  • Build enterprise-grade RAG observability architecture

🧠 1. What Is RAG Observability?

RAG observability is the ability to understand:

What happened?
Why did it happen?
Where did it happen?
How long did it take?
How much did it cost?
What evidence was used?
What answer was generated?
Was the answer trustworthy?

A useful model is:

RAG Observability
       β”‚
       β”œβ”€β”€ Logs
       β”œβ”€β”€ Metrics
       β”œβ”€β”€ Traces
       β”œβ”€β”€ Events
       β”œβ”€β”€ Quality Signals
       β”œβ”€β”€ Cost Signals
       └── Security Signals

🧠 2. Traditional Observability vs RAG Observability

Traditional backend observability often focuses on:

CPU
Memory
Latency
HTTP Errors
Database Errors
Throughput

RAG requires those metrics plus AI-specific signals:

Retrieved Documents
Retrieval Scores
Reranker Scores
Context Size
Prompt Size
LLM Tokens
Model
Temperature
Citations
Grounding
Faithfulness
Answer Quality
Cost

🧠 3. The Three Pillars

The classic observability model is:

                 OBSERVABILITY
                      β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β–Ό           β–Ό           β–Ό
        LOGS       METRICS      TRACES

For RAG, extend this with:

                 RAG OBSERVABILITY
                       β”‚
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β–Ό               β–Ό                β–Ό
     Logs            Metrics          Traces
       β”‚               β”‚                β”‚
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β–Ό
                 AI QUALITY
                       β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β–Ό            β–Ό            β–Ό
      Retrieval     Generation    Citation
       Quality       Quality       Quality

🧠 4. Logs

Logs answer:

What happened?

Example:

INFO retrieval completed
query_id=Q123
top_k=10
results=10
latency_ms=82

Logs are useful for:

Errors
Warnings
Important decisions
Audit events
Fallbacks
Security events

🧠 5. Metrics

Metrics answer:

How often and how much?

Examples:

RAG requests / second
p95 latency
retrieval failure rate
average top-K
average context tokens
LLM tokens
cost / request
citation coverage

Metrics are ideal for:

Dashboards
Alerts
Capacity Planning
Trend Analysis
SLOs

🧠 6. Traces

Traces answer:

What happened during this particular request?

Example:

Trace
 β”‚
 β”œβ”€β”€ Query Processing       12 ms
 β”œβ”€β”€ Embedding              25 ms
 β”œβ”€β”€ Vector Search          42 ms
 β”œβ”€β”€ BM25 Search            31 ms
 β”œβ”€β”€ Reranking              88 ms
 β”œβ”€β”€ Context Selection      14 ms
 β”œβ”€β”€ LLM                   920 ms
 β”œβ”€β”€ Validation             18 ms
 └── Citation               11 ms

🧠 7. Why Traces Matter

Suppose:

Total Latency = 1.8 seconds

Without tracing:

Why?

With tracing:

Embedding       20 ms
Retrieval       60 ms
Reranking      140 ms
LLM           1450 ms
Validation      30 ms

The bottleneck becomes obvious.


🧠 8. End-to-End RAG Trace

flowchart TD
    A["User Request"] --> B["Query Processing"]
    B --> C["Query Rewriting"]
    C --> D["Embedding"]

    D --> E["Retrieval"]

    E --> F["Filtering"]
    F --> G["Reranking"]

    G --> H["Context Selection"]
    H --> I["Prompt Assembly"]

    I --> J["LLM"]

    J --> K["Response Validation"]
    K --> L["Citation"]
    L --> M["Final Response"]

    A -.-> N["Trace"]
    B -.-> N
    C -.-> N
    D -.-> N
    E -.-> N
    F -.-> N
    G -.-> N
    H -.-> N
    I -.-> N
    J -.-> N
    K -.-> N
    L -.-> N

🧠 9. Trace and Span

A trace represents the complete request.

A span represents one operation.

Trace
β”‚
β”œβ”€β”€ Query Processing Span
β”œβ”€β”€ Embedding Span
β”œβ”€β”€ Retrieval Span
β”œβ”€β”€ Reranking Span
β”œβ”€β”€ Context Span
β”œβ”€β”€ Prompt Span
β”œβ”€β”€ LLM Span
β”œβ”€β”€ Validation Span
└── Citation Span

🧠 10. Parent-Child Spans

RAG Request
    β”‚
    β”œβ”€β”€ Retrieval
    β”‚     β”œβ”€β”€ Vector Search
    β”‚     └── BM25 Search
    β”‚
    β”œβ”€β”€ Reranking
    β”‚
    β”œβ”€β”€ Generation
    β”‚     └── LLM Call
    β”‚
    └── Validation

This allows engineers to see both:

High-Level Flow
+
Detailed Execution

🧠 11. RAG Trace Context

A trace should propagate through services:

API Gateway
    ↓
RAG Service
    ↓
Retrieval Service
    ↓
Vector DB
    ↓
Reranker Service
    ↓
LLM Gateway
    ↓
Validation Service

The same trace context should be maintained where supported.


🧠 12. Trace ID

Every request should have a unique trace identifier.

trace_id:
4c9d8c7e-91f1-4a87-a9f3-12c8a71f10e3

Use it to correlate:

Logs
Metrics
Spans
Errors
Evaluation
User Feedback

🧠 13. Request ID vs Trace ID

They solve different problems.

Request ID
    ↓
Identify an individual request

Trace ID
    ↓
Follow execution across services

A single user request may cross multiple microservices.


🧠 14. Correlation IDs

Useful identifiers include:

trace_id
request_id
conversation_id
session_id
tenant_id
user_id
evaluation_id
experiment_id

Be careful with:

PII
Sensitive User Data
Secrets
Authentication Tokens

These should not be blindly logged.


🧠 15. RAG Trace Data

A RAG trace can capture:

{
  "trace_id": "abc-123",
  "request_id": "req-901",
  "model": "enterprise-llm",
  "retriever": "hybrid",
  "top_k": 10,
  "context_tokens": 4200,
  "input_tokens": 5100,
  "output_tokens": 340,
  "latency_ms": 1820
}

🧠 16. Query Processing Observability

Track:

Original Query
Query Type
Query Length
Language
Query Rewrite
Number of Generated Queries
Classification
Routing Decision

Example:

Original:
"What DB does payment use?"

Rewritten:
"payment service database technology"

Queries Generated:
3

🧠 17. Query Rewrite Observability

For advanced query rewriting:

Original Query
      ↓
Rewritten Query
      ↓
Retriever

Capture:

Rewrite Strategy
Rewrite Count
Rewrite Latency
Rewrite Tokens
Rewrite Model

🧠 18. Multi-Query Observability

Example:

Original Query
      β”‚
      β”œβ”€β”€ Query A
      β”œβ”€β”€ Query B
      └── Query C

Track:

Generated Queries
Successful Queries
Duplicate Queries
Retrieval Results per Query
Final Merged Results

🧠 19. Embedding Observability

Track:

Embedding Model
Embedding Dimensions
Batch Size
Latency
Request Count
Failure Rate
Token Usage

Example:

Embedding Model:
text-embedding-model-v3

Dimensions:
1536

Latency:
24 ms

🧠 20. Retrieval Observability

Track:

Retriever Type
Top-K
Returned Results
Search Latency
Search Score
Index
Collection
Filter

Example:

Retriever:
Hybrid

Top-K:
20

Returned:
20

Latency:
72 ms

🧠 21. Retrieval Score Distribution

Scores can help detect retrieval problems.

Score
1.0 ─
0.8 ─       ●
0.6 ─    ●  ●  ●
0.4 ─ ●  ●  ●  ●
0.2 ─ ●  ●  ●  ●
    └────────────────
      1  2  3  4  5
          Rank

A sudden drop in score distribution may indicate:

Query Drift
Embedding Problem
Index Problem
Corpus Change

🧠 22. Retrieval Score Observability

Track:

Top-1 Score
Top-K Average Score
Score Variance
Minimum Score
Score Gap

Example:

Top-1 = 0.91
Top-5 Avg = 0.78
Top-10 Avg = 0.61

These are diagnostic signals, not universal quality guarantees.


🧠 23. Retrieval Result Observability

Track:

Document ID
Chunk ID
Score
Rank
Source
Metadata
Timestamp
Retriever

Example:

{
  "document_id": "DOC-1024",
  "chunk_id": "C-17",
  "rank": 1,
  "score": 0.91,
  "source": "architecture-guide"
}

🧠 24. Metadata Filtering Observability

Track:

Filter Applied
Filter Fields
Filter Values
Documents Before Filter
Documents After Filter

Example:

Before Filter: 100
After Filter:  18

If this suddenly becomes:

Before Filter: 100
After Filter:   0

it may indicate a filtering problem.


🧠 25. Tenant-Aware Retrieval Observability

For enterprise systems:

Tenant A
   ↓
Tenant A Documents

must remain isolated.

Observe:

tenant_id
filter_policy
collection
authorization decision

Never expose sensitive tenant data through unrestricted logs.


🧠 26. Reranking Observability

Track:

Input Candidates
Output Candidates
Reranker Model
Reranker Latency
Score Distribution
Top-N

Example:

Candidates:
50

After Reranking:
5

Latency:
94 ms

🧠 27. Reranking Score Changes

Useful diagnostic:

Before:

D1 β†’ 0.61
D2 β†’ 0.83
D3 β†’ 0.74

After:

D2 β†’ 0.96
D3 β†’ 0.88
D1 β†’ 0.62

This can help diagnose ranking behavior.


🧠 28. Context Selection Observability

Track:

Retrieved Chunks
Selected Chunks
Removed Chunks
Context Tokens
Compression Ratio
Context Ordering

Example:

Retrieved:
20 chunks

Selected:
6 chunks

Context:
4,200 tokens

🧠 29. Context Compression Ratio

A useful operational signal:

Compression Ratio
=
Selected Context Size
────────────────────
Original Context Size

Example:

Original = 12,000 tokens
Selected = 4,000 tokens

Ratio = 33.3%

🧠 30. Prompt Observability

Track:

Prompt Version
Prompt Template
System Prompt Version
Context Tokens
Instruction Tokens
Total Input Tokens

Avoid storing sensitive raw prompts unless required and appropriately protected.


🧠 31. Prompt Versioning

Example:

prompt_version:
rag-enterprise-v12

When answer quality changes:

Model unchanged
Retriever unchanged
Prompt changed

the prompt becomes a candidate cause.


🧠 32. LLM Observability

Track:

Provider
Model
Model Version
Temperature
Max Tokens
Input Tokens
Output Tokens
Total Tokens
Latency
Time to First Token
Finish Reason
Errors
Retries

🧠 33. LLM Latency

Separate:

Time to First Token

from:

Total Generation Time

This helps distinguish:

Startup Latency
+
Generation Throughput

🧠 34. Token Observability

Track:

Query Tokens
Context Tokens
Prompt Tokens
Input Tokens
Output Tokens
Total Tokens

Example:

Input:
5,200

Output:
380

Total:
5,580

🧠 35. Token Growth Detection

Monitor:

Average Context Tokens

over time.

Example:

Week 1 β†’ 3,200
Week 2 β†’ 4,100
Week 3 β†’ 6,800

Possible causes:

Top-K Increase
Chunk Size Increase
Context Selection Failure
Prompt Growth
Duplicate Retrieval

🧠 36. Cost Observability

Track:

Embedding Cost
Retrieval Cost
Reranker Cost
LLM Input Cost
LLM Output Cost
Evaluation Cost
Infrastructure Cost

🧠 37. Cost Per Request

Example:

Embedding       $0.0002
Reranking       $0.0015
LLM Input       $0.0120
LLM Output      $0.0030
Infrastructure  $0.0010
-----------------------
Total           $0.0177

🧠 38. Cost by Tenant

Enterprise systems may require:

Tenant A β†’ $120
Tenant B β†’ $480
Tenant C β†’ $75

This helps with:

Chargeback
Cost Allocation
Optimization
Usage Governance

🧠 39. Cost by Model

Model A
    ↓
$0.012 / request

Model B
    ↓
$0.028 / request

Compare:

Quality
Latency
Cost

rather than cost alone.


🧠 40. RAG Error Observability

Classify failures:

QUERY_ERROR
EMBEDDING_ERROR
RETRIEVAL_ERROR
FILTER_ERROR
RERANKING_ERROR
CONTEXT_ERROR
PROMPT_ERROR
LLM_ERROR
VALIDATION_ERROR
CITATION_ERROR
TIMEOUT
RATE_LIMIT
SECURITY_ERROR

🧠 41. Error Rate

Track:

Failed Requests
────────────────
Total Requests

But also classify errors.

An overall:

Error Rate = 1%

does not tell you whether the failures are:

LLM Timeout

or:

Authorization Failure

🧠 42. Retry Observability

Track:

Retry Count
Retry Reason
Retry Latency
Retry Success
Retry Cost

Example:

Attempt 1 β†’ Timeout
Attempt 2 β†’ Success

Retries can improve reliability but increase:

Latency
Cost
Load

🧠 43. Fallback Observability

Example:

Primary LLM
    ↓
Failure
    ↓
Fallback LLM

Track:

Fallback Rate
Fallback Reason
Fallback Model
Fallback Latency
Fallback Quality
Fallback Cost

🧠 44. Circuit Breaker Observability

For external services:

LLM
Vector DB
Reranker
Embedding Service

track:

Circuit State
Open Count
Half-Open Attempts
Recovery Time

🧠 45. RAG SLOs

Production RAG can define SLOs such as:

Availability >= 99.9%

p95 Latency <= 2 seconds

Error Rate <= 0.5%

Citation Accuracy >= 95%

Faithfulness >= 90%

Quality thresholds should be defined according to the application and risk level.


🧠 46. Quality SLOs

Unlike traditional services, RAG can have AI quality SLOs:

Faithfulness
Citation Accuracy
Answer Relevance
Retrieval Recall
Abstention Accuracy

This creates:

Reliability SLO
+
AI Quality SLO

🧠 47. Error Budget

Traditional:

Availability Error Budget

RAG can also track:

Quality Error Budget

Example:

Target Faithfulness:
95%

Allowed degradation:
5%

🧠 48. RAG Health Score

A dashboard may combine:

Availability
Latency
Retrieval
Grounding
Citation
Cost

into a health view.

However:

Do not hide critical failures behind a single aggregate health score.


🧠 49. RAG Observability Dashboard

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              RAG OVERVIEW                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Requests/sec                  142           β”‚
β”‚ p95 Latency                  1.82s          β”‚
β”‚ Error Rate                   0.31%          β”‚
β”‚                                             β”‚
β”‚ Retrieval Recall              93.1%          β”‚
β”‚ Faithfulness                  95.7%          β”‚
β”‚ Citation Accuracy             97.2%         β”‚
β”‚                                             β”‚
β”‚ Avg Context Tokens            4,210         β”‚
β”‚ Avg Total Tokens              5,020         β”‚
β”‚ Cost / Request                $0.018        β”‚
β”‚                                             β”‚
β”‚ Fallback Rate                  0.8%          β”‚
β”‚ Abstention Rate                3.2%          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Values are illustrative.


🧠 50. Retrieval Dashboard

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       RETRIEVAL OBSERVABILITY       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Recall@5                 88.4%       β”‚
β”‚ Recall@10                94.1%       β”‚
β”‚ Hit Rate                 96.2%       β”‚
β”‚ MRR                      81.7%       β”‚
β”‚ NDCG@5                   79.8%       β”‚
β”‚                                     β”‚
β”‚ Avg Top-1 Score           0.91       β”‚
β”‚ Avg Top-K Score           0.74       β”‚
β”‚ Avg Results                10        β”‚
β”‚ Retrieval p95             96 ms      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🧠 51. Generation Dashboard

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       GENERATION QUALITY            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Faithfulness              95.7%     β”‚
β”‚ Answer Relevance          93.8%     β”‚
β”‚ Completeness              91.2%     β”‚
β”‚ Groundedness              96.1%     β”‚
β”‚ Citation Accuracy         97.2%     β”‚
β”‚ Citation Coverage         95.9%     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🧠 52. Latency Dashboard

Total p95 Latency
        β”‚
        β”œβ”€β”€ Query Processing     20ms
        β”œβ”€β”€ Embedding            35ms
        β”œβ”€β”€ Retrieval            70ms
        β”œβ”€β”€ Reranking           120ms
        β”œβ”€β”€ Context              15ms
        β”œβ”€β”€ LLM               1,420ms
        β”œβ”€β”€ Validation            25ms
        └── Citation              12ms

🧠 53. Cost Dashboard

Monthly Cost
β”‚
β”œβ”€β”€ LLM                  68%
β”œβ”€β”€ Embeddings           12%
β”œβ”€β”€ Reranking             8%
β”œβ”€β”€ Vector DB             7%
└── Observability         5%

This helps prioritize optimization.


🧠 54. Trace Visualization

A production trace might look like:

TRACE: 4c9d8c7e

0ms ───────────────────────────────────────── 1800ms

Query       β–ˆβ–ˆβ–ˆ
Embedding      β–ˆβ–ˆβ–ˆβ–ˆ
Retrieval          β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ
Reranking                β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ
Context                          β–ˆβ–ˆβ–ˆ
Prompt                             β–ˆβ–ˆβ–ˆ
LLM                                  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ
Validation                                             β–ˆβ–ˆ
Citation                                               β–ˆβ–ˆ

This quickly exposes latency bottlenecks.


🧠 55. Trace Waterfall

sequenceDiagram
    participant U as User
    participant API as RAG API
    participant R as Retriever
    participant RR as Reranker
    participant L as LLM
    participant V as Validator
    participant C as Citation

    U->>API: Query
    API->>R: Retrieve
    R-->>API: Documents
    API->>RR: Rerank
    RR-->>API: Ranked Context
    API->>L: Generate
    L-->>API: Answer
    API->>V: Validate
    V-->>API: Valid
    API->>C: Attribute Sources
    C-->>API: Citations
    API-->>U: Response

🧠 56. Span Attributes

A retrieval span may include:

retriever.type
retriever.top_k
retriever.index
retriever.collection
retriever.filter
retriever.result_count
retriever.latency_ms

A generation span:

llm.provider
llm.model
llm.temperature
llm.input_tokens
llm.output_tokens
llm.total_tokens
llm.latency_ms
llm.finish_reason

🧠 57. Span Events

Events can record important moments:

query_rewritten
retrieval_completed
reranking_completed
context_compressed
llm_retry
validation_failed
citation_added
fallback_triggered

🧠 58. Structured Logging

Prefer structured logs:

{
  "timestamp": "2026-08-11T10:15:30Z",
  "level": "INFO",
  "service": "rag-service",
  "trace_id": "abc123",
  "event": "retrieval_completed",
  "retriever": "hybrid",
  "top_k": 10,
  "result_count": 10,
  "latency_ms": 72
}

Structured logs are easier to query and aggregate.


🧠 59. Bad Logging

Avoid:

INFO:
User asked something and retrieval happened

This is difficult to search or aggregate.

Prefer:

event=retrieval_completed
trace_id=abc123
retriever=hybrid
top_k=10
latency_ms=72

🧠 60. Sensitive Data Logging

Never blindly log:

Passwords
API Keys
Access Tokens
Secrets
Payment Data
Personal Data
Private Documents

RAG systems may process highly sensitive enterprise information.


🧠 61. Prompt Logging Strategy

Possible levels:

Level 0
No prompt content

Level 1
Metadata only

Level 2
Redacted prompt

Level 3
Encrypted prompt storage

Level 4
Full prompt with strict access controls

Choose based on:

Security
Compliance
Debugging Requirements

🧠 62. Document Logging Strategy

Avoid storing complete sensitive documents inside traces.

Instead capture:

Document ID
Chunk ID
Source
Rank
Score
Metadata Hash

Example:

{
  "document_id": "DOC-1024",
  "chunk_id": "C-17",
  "rank": 1,
  "score": 0.91
}

🧠 63. Trace Sampling

Tracing every request can be expensive.

Possible strategies:

100% Errors
100% High-Latency Requests
100% Security Events
10% Normal Requests
1% Low-Value Requests

Actual sampling should depend on system requirements.


🧠 64. Tail-Based Sampling

Instead of deciding sampling before seeing the result:

Request
   ↓
Trace
   ↓
Inspect Outcome
   ↓
Sample?

Keep traces with:

High Latency
Errors
Poor Quality
Fallbacks
Security Events

🧠 65. Quality-Based Sampling

A powerful RAG-specific strategy:

Low Quality
    ↓
Keep Trace

High Quality
    ↓
Lower Sampling Probability

Possible triggers:

Low Retrieval Score
Low Groundedness
Low Citation Coverage
User Negative Feedback
Abstention

🧠 66. User Feedback Observability

Capture:

Thumbs Up
Thumbs Down
Regenerate
Copy
Citation Click
Follow-Up Question
Escalation

User behavior can become an important quality signal.


🧠 67. Feedback Correlation

Correlate:

User Feedback
      +
Trace
      +
Retrieval
      +
Generation

Example:

Negative Feedback
      ↓
Trace ID
      ↓
Retrieval Recall Low
      ↓
Likely Retrieval Failure

🧠 68. Citation Click Observability

If citations are interactive:

Citation Presented
      ↓
User Clicked?
      ↓
Source Opened?

Track:

Citation Click Rate
Citation Source
Citation Position

This can help understand whether users trust and use citations.


🧠 69. Conversation Observability

For conversational RAG:

Session
  β”‚
  β”œβ”€β”€ Turn 1
  β”œβ”€β”€ Turn 2
  β”œβ”€β”€ Turn 3
  └── Turn 4

Track:

Conversation Length
Context Growth
Memory Usage
Retrieval Changes
Follow-Up Queries

🧠 70. Conversation Context Growth

Long conversations can create:

Token Growth
Latency Growth
Cost Growth
Context Noise

Monitor:

Conversation Tokens
Memory Tokens
Retrieved Tokens
Total Prompt Tokens

🧠 71. Memory Observability

For memory-enabled RAG:

Memory Read
Memory Write
Memory Retrieval
Memory Relevance
Memory Size
Memory Latency

🧠 72. Agentic RAG Observability

Agentic RAG requires additional tracing:

Plan
 ↓
Tool Selection
 ↓
Tool Call
 ↓
Observation
 ↓
Replan
 ↓
Tool Call
 ↓
Final Answer

🧩 73. Agentic RAG Trace

flowchart TD
    A["User Query"] --> B["Planner"]

    B --> C["Tool Selection"]

    C --> D["Retriever"]

    D --> E["Observation"]

    E --> F{"Enough Evidence?"}

    F -->|No| B

    F -->|Yes| G["Generation"]

    G --> H["Validation"]

    H --> I["Final Answer"]

Track:

Planning Steps
Tool Calls
Retrieval Calls
Replanning
Loop Count
Token Usage
Latency
Cost

🧠 74. Graph RAG Observability

Track:

Entities Retrieved
Relationships Retrieved
Graph Traversal Depth
Nodes Visited
Edges Visited
Subgraph Size
Graph Query Latency

Example:

Start Entity:
PaymentService

Traversal:
3 hops

Nodes:
42

Edges:
57

🧠 75. SQL RAG Observability

Track:

Generated SQL
Schema Selected
Tables
Columns
Execution Time
Rows Returned
Query Success
Validation Result

Do not expose sensitive SQL or data without appropriate controls.


🧠 76. SQL Safety Observability

Track whether generated SQL attempted:

DROP
DELETE
UPDATE
INSERT
Unauthorized Tables
Cross-Tenant Access

Production SQL RAG should have explicit read/write policies.


🧠 77. Multimodal RAG Observability

Track:

Image ID
Document ID
OCR
Vision Model
Image Embedding
Text Embedding
Cross-Modal Retrieval
Visual Context

🧠 78. Evaluation + Observability

These systems complement each other.

Observability
    ↓
"What happened?"

Evaluation
    ↓
"Was it good?"

Together:

Trace
  ↓
Failure
  ↓
Evaluation
  ↓
Root Cause

🧠 79. Quality-Trace Correlation

Suppose:

Faithfulness ↓

Trace analysis may show:

Top-1 Retrieval Score ↓

which may show:

Embedding Model Changed

The chain becomes:

Model Change
    ↓
Embedding Change
    ↓
Retrieval Degradation
    ↓
Context Degradation
    ↓
Faithfulness Degradation

This is the real value of RAG observability.


🧠 80. Root Cause Analysis

A production debugging workflow:

User Complaint
      ↓
Find Trace
      ↓
Inspect Latency
      ↓
Inspect Retrieval
      ↓
Inspect Ranking
      ↓
Inspect Context
      ↓
Inspect Prompt
      ↓
Inspect LLM
      ↓
Inspect Validation
      ↓
Inspect Citation

🧠 81. Retrieval Failure Debugging

Wrong Answer
     ↓
Trace
     ↓
Retrieved Documents
     ↓
Relevant Document Missing
     ↓
Retrieval Failure

Potential causes:

Bad Embeddings
Wrong Chunking
Wrong Metadata Filter
Low Top-K
Poor Query Rewrite
Index Problem

🧠 82. Generation Failure Debugging

Correct Evidence
      ↓
Correct Context
      ↓
Incorrect Answer

Possible causes:

Prompt Problem
Model Problem
Context Ordering
Instruction Conflict
Context Overload

🧠 83. Citation Failure Debugging

Correct Answer
      ↓
Wrong Citation

Potential causes:

Citation Mapping
Claim Extraction
Source Tracking
Response Transformation

🧠 84. Latency Failure Debugging

p95 Latency ↑
      ↓
Trace
      ↓
LLM Span = 1.5s
      ↓
Generation Bottleneck

or:

Reranker Span = 900ms

The optimization target becomes obvious.


🧠 85. Cost Failure Debugging

Cost ↑
  ↓
Token Usage ↑
  ↓
Context Tokens ↑
  ↓
Top-K ↑

Possible root cause:

Retrieval Configuration Changed

🧠 86. Observability Data Model

A useful conceptual model:

Trace
 β”‚
 β”œβ”€β”€ Request
 β”‚
 β”œβ”€β”€ Query
 β”‚
 β”œβ”€β”€ Retrieval
 β”‚     β”œβ”€β”€ Documents
 β”‚     └── Scores
 β”‚
 β”œβ”€β”€ Context
 β”‚
 β”œβ”€β”€ Prompt
 β”‚
 β”œβ”€β”€ LLM
 β”‚
 β”œβ”€β”€ Validation
 β”‚
 β”œβ”€β”€ Citation
 β”‚
 β”œβ”€β”€ Metrics
 β”‚
 └── Feedback

🧠 87. Event Model

Example:

{
  "event": "reranking_completed",
  "trace_id": "abc123",
  "candidate_count": 50,
  "selected_count": 5,
  "latency_ms": 94
}

🧠 88. Metric Types

Use:

Counter
Gauge
Histogram
Distribution

Examples:

Counter

rag_requests_total

Gauge

active_rag_requests

Histogram

rag_latency_seconds

Distribution

context_token_distribution

🧠 89. RAG Counters

Useful counters:

rag_requests_total
rag_errors_total
retrieval_requests_total
retrieval_failures_total
llm_requests_total
llm_failures_total
fallbacks_total
validation_failures_total
citation_failures_total

🧠 90. RAG Histograms

Useful histograms:

rag_latency
retrieval_latency
reranking_latency
llm_latency
context_tokens
input_tokens
output_tokens
cost_per_request

🧠 91. Prometheus-Style Metrics

Example:

rag_requests_total{
  service="rag-api",
  environment="prod"
}

Latency:

rag_request_duration_seconds{
  service="rag-api"
}

Retrieval:

rag_retrieval_duration_seconds{
  retriever="hybrid"
}

🧠 92. Metric Cardinality

Be careful with labels.

Bad:

user_id
query
document_id
conversation_id

as high-cardinality metric labels.

This can create huge metric stores.

Prefer:

service
environment
model
retriever
region

and keep high-cardinality identifiers in traces/logs.


🧠 93. Logs vs Metrics vs Traces

Data Best For
Logs Detailed events
Metrics Trends and alerts
Traces Request-level debugging
Evaluation Quality measurement
Feedback User experience

🧠 94. Observability Architecture

flowchart LR
    A["RAG Application"] --> B["Telemetry SDK"]

    B --> C["Logs"]
    B --> D["Metrics"]
    B --> E["Traces"]

    C --> F["Log Backend"]
    D --> G["Metrics Backend"]
    E --> H["Trace Backend"]

    F --> I["Observability Platform"]
    G --> I
    H --> I

    J["RAG Evaluation"] --> I

    I --> K["Dashboards"]
    I --> L["Alerts"]
    I --> M["Root Cause Analysis"]

🧠 95. OpenTelemetry Concept

An enterprise RAG architecture can use an open telemetry standard for:

Traces
Metrics
Logs

The application instruments:

API
Retriever
Vector DB
Reranker
LLM
Validation
Citation

and exports telemetry to the organization's observability platform.


🧠 96. Instrumentation Strategy

Instrument at these boundaries:

HTTP
Database
Vector Store
Message Queue
LLM Provider
External APIs

and RAG-specific boundaries:

Query
Retrieval
Reranking
Context
Generation
Validation
Citation

🧠 97. Custom RAG Spans

Examples:

rag.query
rag.rewrite
rag.embedding
rag.retrieve
rag.rerank
rag.context
rag.prompt
rag.generate
rag.validate
rag.citation

These provide a consistent vocabulary.


🧠 98. Trace Naming

Good:

rag.retrieve
rag.rerank
rag.generate

Avoid inconsistent names such as:

search_docs
retrieveStuff
vectorSearch2
doRagSearch

A consistent naming convention improves observability across teams.


🧠 99. Production RAG Trace

TRACE
β”‚
β”œβ”€β”€ rag.query
β”‚     └── query classification
β”‚
β”œβ”€β”€ rag.rewrite
β”‚     β”œβ”€β”€ query-1
β”‚     β”œβ”€β”€ query-2
β”‚     └── query-3
β”‚
β”œβ”€β”€ rag.embedding
β”‚
β”œβ”€β”€ rag.retrieve
β”‚     β”œβ”€β”€ dense
β”‚     └── sparse
β”‚
β”œβ”€β”€ rag.rerank
β”‚
β”œβ”€β”€ rag.context
β”‚
β”œβ”€β”€ rag.prompt
β”‚
β”œβ”€β”€ rag.generate
β”‚
β”œβ”€β”€ rag.validate
β”‚
└── rag.citation

🧠 100. Distributed RAG

In a microservice architecture:

Client
  ↓
API Gateway
  ↓
RAG Orchestrator
  ↓
Retrieval Service
  ↓
Vector Service
  ↓
Reranker
  ↓
LLM Gateway
  ↓
Validation Service

Trace context should propagate across the service boundaries.


🧠 101. Service Dependency Map

flowchart TD
    A["RAG API"] --> B["Query Service"]
    A --> C["Retrieval Service"]
    C --> D["Vector DB"]
    C --> E["Search Engine"]

    A --> F["Reranker"]
    A --> G["LLM Gateway"]

    A --> H["Validation Service"]
    A --> I["Citation Service"]

    A --> J["Telemetry"]

    B --> J
    C --> J
    F --> J
    G --> J
    H --> J
    I --> J

🧠 102. Dependency Observability

Monitor:

Availability
Latency
Error Rate
Rate Limits
Retries
Circuit Breakers

for:

Vector DB
Search Engine
Embedding Service
Reranker
LLM Provider

🧠 103. External LLM Provider Monitoring

Track:

Provider
Model
Region
Request Count
Latency
Errors
Rate Limits
Token Usage
Cost
Fallbacks

🧠 104. Model Routing Observability

For multi-model RAG:

Simple Query
   ↓
Small Model

Complex Query
   ↓
Large Model

Track:

Routing Decision
Model Selected
Quality
Latency
Cost
Fallback

🧠 105. Multi-Model RAG

Example:

Query Classifier
       β”‚
       β”œβ”€β”€ Simple β†’ Model A
       β”‚
       β”œβ”€β”€ Complex β†’ Model B
       β”‚
       └── Multimodal β†’ Model C

Observability must explain:

Why was this model selected?

🧠 106. Router Observability

Track:

Route
Reason
Confidence
Selected Model
Selected Retriever
Latency
Cost

🧠 107. Cache Observability

RAG systems often use:

Embedding Cache
Retrieval Cache
LLM Response Cache
Prompt Cache

Track:

Cache Hits
Cache Misses
Hit Rate
Saved Tokens
Saved Cost
Latency Reduction

🧠 108. Cache Hit Rate

Cache Hits
──────────
Total Requests

Example:

Cache Hits = 7,500
Requests   = 10,000

Hit Rate = 75%

🧠 109. Cache Correctness

A cache hit is useful only if the cached result remains valid.

Track:

Cache Age
Source Version
Knowledge Version
Invalidations
Stale Responses

🧠 110. Knowledge Base Observability

RAG quality depends on the knowledge base.

Monitor:

Documents
Chunks
Embeddings
Index Size
Ingestion Failures
Duplicate Documents
Stale Documents
Deleted Documents

🧠 111. Ingestion Observability

Document
   ↓
Parsing
   ↓
Chunking
   ↓
Metadata
   ↓
Embedding
   ↓
Indexing

Track each stage.


🧠 112. Ingestion Trace

DOC-1024

Parsing        120 ms
Chunking        20 ms
Embedding      240 ms
Indexing       110 ms

Total           490 ms

🧠 113. Data Freshness

Monitor:

Document Updated
      ↓
Indexed
      ↓
Available for Retrieval

Measure:

Freshness Lag

Example:

Source Update:
10:00

Indexed:
10:03

Freshness Lag:
3 minutes

🧠 114. Stale Knowledge Detection

Track:

Document Age
Index Age
Last Refresh
Last Successful Ingestion

This is particularly important for:

Policies
Pricing
Configuration
Operational Runbooks
Compliance Documents

🧠 115. Knowledge Graph Observability

Track:

Nodes
Edges
Entity Extraction
Relationship Extraction
Graph Updates
Graph Query Latency
Graph Traversal

🧠 116. Graph Update Monitoring

Documents
    ↓
Entity Extraction
    ↓
Relationship Extraction
    ↓
Knowledge Graph

Failures at any stage can affect Graph RAG.


🧠 117. SQL RAG Observability

Monitor:

Question
Schema Retrieval
SQL Generation
SQL Validation
SQL Execution
Result Size
Answer Generation

This creates a full SQL RAG trace.


🧠 118. Security Observability

Enterprise RAG must observe:

Authorization Decisions
Tenant Filters
Access Denials
Prompt Injection Detection
Sensitive Data Detection
Policy Violations

🧠 119. Prompt Injection Events

Example:

event:
prompt_injection_detected

trace_id:
abc123

source:
retrieved_document

action:
blocked

Security events should be highly visible.


🧠 120. Data Leakage Monitoring

Monitor whether responses expose:

Unauthorized Documents
Secrets
PII
Credentials
Internal URLs
Private Business Data

🧠 121. Auditability

For regulated enterprise systems, maintain appropriate audit information:

Who requested
When requested
What system version
What sources were used
What policies applied
What response was produced

Do not retain more sensitive content than necessary.


🧠 122. Observability Retention

Not every telemetry type needs the same retention.

Example:

Metrics:
90 days

Traces:
30 days

Debug Logs:
7 days

Audit Events:
Longer according to policy

Retention should follow:

Compliance
Security
Cost
Operational Requirements

🧠 123. Observability Cost

Observability itself can become expensive.

Costs include:

Log Storage
Trace Storage
Metric Storage
LLM Evaluation
Dashboard Infrastructure
Data Transfer

Avoid logging everything blindly.


🧠 124. High-Value Telemetry

Prioritize:

Errors
Slow Requests
Low-Quality Requests
Security Events
Fallbacks
Cost Anomalies
Retrieval Failures

🧠 125. Low-Value Telemetry

Avoid excessive:

Duplicate Logs
Large Documents
Repeated Prompts
Repeated Context
High-Cardinality Metrics

🧠 126. Observability Governance

Define:

What is logged?
What is traced?
What is sampled?
What is retained?
Who can access it?
How is it redacted?

🧠 127. PII Redaction

Before telemetry storage:

User Input
   ↓
PII Detection
   ↓
Redaction
   ↓
Telemetry

Example:

Email:
mihir@example.com

Stored:
[REDACTED_EMAIL]

Use an appropriate enterprise redaction mechanism.


🧠 128. Secrets Redaction

Never expose:

API Keys
Bearer Tokens
Passwords
Private Keys
Connection Strings

in:

Logs
Traces
Metrics
Evaluation Data

🧠 129. Access Control

Observability systems themselves contain sensitive information.

Use:

RBAC
Least Privilege
Tenant Isolation
Audit Logs
Encryption

🧠 130. Enterprise Observability Architecture

                        USERS
                          β”‚
                          β–Ό
                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                   β”‚  RAG API    β”‚
                   β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
                          β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚ RAG ORCHESTRATORβ”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β–Ό                  β–Ό                  β–Ό
   Retrieval           Reranking          LLM
       β”‚                  β”‚                  β”‚
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β–Ό
                  Response Validation
                          β”‚
                          β–Ό
                      Citation
                          β”‚
                          β–Ό
                      RESPONSE

                          β”‚
                          β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚ TELEMETRY LAYER β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β–Ό               β–Ό               β–Ό
        Logs            Metrics         Traces
          β”‚               β”‚               β”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β–Ό
                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                β”‚ OBSERVABILITY    β”‚
                β”‚ PLATFORM         β”‚
                β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β–Ό              β–Ό              β–Ό
      Dashboard        Alerts       Analytics
                         β”‚
                         β–Ό
                   Root Cause
                         β”‚
                         β–Ό
                  System Improvement

🧠 131. RAG Observability Data Flow

flowchart LR
    A["User Query"] --> B["RAG Pipeline"]

    B --> C["Telemetry"]

    C --> D["Logs"]
    C --> E["Metrics"]
    C --> F["Traces"]

    B --> G["Evaluation"]

    G --> H["Quality Signals"]

    D --> I["Observability Platform"]
    E --> I
    F --> I
    H --> I

    I --> J["Dashboard"]
    I --> K["Alerts"]
    I --> L["Root Cause Analysis"]

🧠 132. RAG Observability Golden Signals

Traditional services often monitor:

Latency
Traffic
Errors
Saturation

RAG should extend this to:

Latency
Traffic
Errors
Saturation

+

Retrieval Quality
Context Quality
Generation Quality
Citation Quality
Token Usage
Cost

🧠 133. RAG Golden Signals

                 RAG GOLDEN SIGNALS
                         β”‚
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β–Ό                 β–Ό                 β–Ό
    System             AI Quality        Economics
       β”‚                 β”‚                 β”‚
    Latency          Retrieval          Tokens
    Traffic          Grounding          Cost
    Errors           Citation           Model Usage
    Saturation       Relevance
                     Completeness

🧠 134. RAG Health Model

System Health
      β”‚
      β”œβ”€β”€ Availability
      β”œβ”€β”€ Latency
      β”œβ”€β”€ Errors
      β”œβ”€β”€ Retrieval
      β”œβ”€β”€ Generation
      β”œβ”€β”€ Grounding
      β”œβ”€β”€ Citation
      β”œβ”€β”€ Security
      └── Cost

🧠 135. Alerting

Alerts should be actionable.

Bad:

RAG problem!

Good:

ALERT:
RAG p95 latency exceeded SLO.

Current:
3.2 seconds

Target:
2.0 seconds

Primary contributor:
Reranker latency

Trace samples:
Available

🧠 136. Quality Alert

ALERT:
Faithfulness degradation detected.

Current:
88.7%

Baseline:
95.1%

Change:
-6.4 percentage points

Potential correlation:
Embedding model changed 2 hours ago.

🧠 137. Cost Alert

ALERT:
Average RAG cost increased by 42%.

Previous:
$0.018/request

Current:
$0.025/request

Primary signal:
Context tokens +61%

🧠 138. Retrieval Alert

ALERT:
Recall proxy degradation detected.

Top-1 retrieval score:
0.91 β†’ 0.63

Affected retriever:
hybrid-v3

Affected tenant:
tenant-group-a

🧠 139. Alert Severity

Use severity levels:

INFO
WARNING
CRITICAL

Example:

WARNING:
p95 latency > 2 seconds

CRITICAL:
Tenant isolation violation detected

🧠 140. Alert Fatigue

Too many alerts create:

Alert Fatigue
    ↓
Ignored Alerts
    ↓
Missed Incidents

Only alert when:

Action is Required

🧠 141. Trace-Based Debugging Workflow

1. Find affected request
        ↓
2. Open trace
        ↓
3. Check total latency
        ↓
4. Inspect retrieval
        ↓
5. Inspect ranking
        ↓
6. Inspect context
        ↓
7. Inspect prompt
        ↓
8. Inspect LLM
        ↓
9. Inspect validation
        ↓
10. Inspect citations
        ↓
11. Compare evaluation score
        ↓
12. Identify root cause

🧠 142. Incident Example

User reports:

"The assistant gave an outdated policy."

Trace:

Query
 ↓
Retrieval
 ↓
Old document ranked #1
 ↓
New document ranked #8
 ↓
Context selection selected #1
 ↓
LLM generated answer

Root cause:

Retrieval / freshness ranking problem

not necessarily:

LLM hallucination

🧠 143. Another Incident

User reports:

"The answer is wrong."

Trace:

Retrieval β†’ Correct
Reranking β†’ Correct
Context β†’ Correct
LLM β†’ Incorrect

Root cause:

Generation failure

🧠 144. Another Incident

User reports:

"The answer is correct but citation is wrong."

Trace:

Retrieval β†’ Correct
Generation β†’ Correct
Citation Mapping β†’ Incorrect

Root cause:

Citation subsystem

🧠 145. Observability and RAG Evaluation

                   RAG REQUEST
                        β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β–Ό                           β–Ό
    OBSERVABILITY                 EVALUATION
          β”‚                           β”‚
     What happened?              Was it good?
          β”‚                           β”‚
     Trace / Logs               Quality Metrics
     Metrics                    Judge
          β”‚                     Human Review
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β–Ό
                   ROOT CAUSE
                        β”‚
                        β–Ό
                 SYSTEM IMPROVEMENT

🧠 146. Production Feedback Loop

flowchart TD
    A["Production Request"] --> B["RAG Execution"]

    B --> C["Telemetry"]

    B --> D["User Feedback"]

    C --> E["Observability"]

    D --> F["Evaluation"]

    E --> G["Failure Detection"]

    F --> G

    G --> H["Root Cause Analysis"]

    H --> I["Engineering Change"]

    I --> J["Regression Evaluation"]

    J --> K{"Quality Gate"}

    K -->|Pass| L["Deploy"]

    K -->|Fail| I

    L --> A

🧠 147. Production RAG Observability Checklist

☐ Trace every important RAG stage
☐ Propagate trace context across services
☐ Use structured logging
☐ Define RAG-specific metrics
☐ Monitor p50/p95/p99 latency
☐ Monitor throughput
☐ Monitor error rates
☐ Monitor retries
☐ Monitor fallbacks
☐ Monitor circuit breakers

☐ Monitor query rewriting
☐ Monitor embedding
☐ Monitor retrieval
☐ Monitor retrieval scores
☐ Monitor metadata filtering
☐ Monitor reranking
☐ Monitor context selection
☐ Monitor context size
☐ Monitor prompt version
☐ Monitor LLM calls
☐ Monitor token usage
☐ Monitor validation
☐ Monitor citations

☐ Monitor retrieval quality
☐ Monitor grounding
☐ Monitor faithfulness
☐ Monitor answer relevance
☐ Monitor citation accuracy
☐ Monitor citation coverage

☐ Monitor cost
☐ Monitor cost by model
☐ Monitor cost by tenant
☐ Monitor cost anomalies

☐ Monitor knowledge freshness
☐ Monitor ingestion failures
☐ Monitor index health
☐ Monitor stale documents

☐ Monitor prompt injection
☐ Monitor authorization
☐ Monitor tenant isolation
☐ Monitor sensitive data leakage

☐ Implement dashboards
☐ Implement alerts
☐ Implement trace sampling
☐ Implement quality-based sampling
☐ Implement PII redaction
☐ Implement secrets redaction
☐ Implement RBAC
☐ Implement retention policies

☐ Correlate traces with evaluations
☐ Correlate traces with user feedback
☐ Implement failure taxonomy
☐ Implement root-cause analysis
☐ Implement continuous improvement

πŸ§ͺ 148. Practical Project

Build a Production RAG Observability Platform.

The platform should capture:

Query
Retrieval
Reranking
Context
Prompt
LLM
Validation
Citation

and expose:

Logs
Metrics
Traces
Quality Signals
Cost Signals
Security Signals

πŸ§ͺ 149. Suggested Project Structure

rag-observability/
β”‚
β”œβ”€β”€ instrumentation/
β”‚   β”œβ”€β”€ query.py
β”‚   β”œβ”€β”€ retrieval.py
β”‚   β”œβ”€β”€ reranking.py
β”‚   β”œβ”€β”€ context.py
β”‚   β”œβ”€β”€ generation.py
β”‚   β”œβ”€β”€ validation.py
β”‚   └── citation.py
β”‚
β”œβ”€β”€ telemetry/
β”‚   β”œβ”€β”€ logging/
β”‚   β”œβ”€β”€ metrics/
β”‚   └── tracing/
β”‚
β”œβ”€β”€ evaluation/
β”‚   β”œβ”€β”€ quality/
β”‚   β”œβ”€β”€ grounding/
β”‚   └── citation/
β”‚
β”œβ”€β”€ dashboards/
β”‚
β”œβ”€β”€ alerts/
β”‚
β”œβ”€β”€ security/
β”‚   β”œβ”€β”€ redaction/
β”‚   └── access-control/
β”‚
β”œβ”€β”€ storage/
β”‚
└── configuration/

πŸ§ͺ 150. Example Instrumentation

class RAGRetriever:

    def retrieve(self, query):

        with tracer.start_as_current_span(
            "rag.retrieve"
        ) as span:

            span.set_attribute(
                "retriever.type",
                "hybrid"
            )

            span.set_attribute(
                "retriever.top_k",
                10
            )

            results = self.search(query)

            span.set_attribute(
                "retriever.result_count",
                len(results)
            )

            return results

πŸ§ͺ 151. LLM Instrumentation

class LLMService:

    def generate(self, prompt):

        with tracer.start_as_current_span(
            "rag.generate"
        ) as span:

            response = self.llm.generate(
                prompt
            )

            span.set_attribute(
                "llm.model",
                self.model_name
            )

            span.set_attribute(
                "llm.input_tokens",
                response.input_tokens
            )

            span.set_attribute(
                "llm.output_tokens",
                response.output_tokens
            )

            return response

πŸ§ͺ 152. RAG Trace Record

{
  "trace_id": "trace-001",

  "query": {
    "length": 42,
    "language": "en"
  },

  "retrieval": {
    "type": "hybrid",
    "top_k": 10,
    "latency_ms": 72
  },

  "reranking": {
    "enabled": true,
    "candidates": 50,
    "selected": 5,
    "latency_ms": 94
  },

  "context": {
    "chunks": 5,
    "tokens": 4200
  },

  "generation": {
    "model": "enterprise-llm",
    "input_tokens": 5100,
    "output_tokens": 340,
    "latency_ms": 1420
  },

  "citation": {
    "count": 3
  }
}

πŸ§ͺ 153. Example Metrics

rag_requests = Counter(
    "rag_requests_total",
    "Total RAG requests"
)

rag_latency = Histogram(
    "rag_request_duration_seconds",
    "RAG request latency"
)

retrieval_latency = Histogram(
    "rag_retrieval_duration_seconds",
    "Retrieval latency"
)

llm_tokens = Counter(
    "rag_llm_tokens_total",
    "Total LLM tokens"
)

πŸ§ͺ 154. Observability Test

Create a test query:

"What database does the payment service use?"

Expected trace:

rag.query
    ↓
rag.embedding
    ↓
rag.retrieve
    ↓
rag.rerank
    ↓
rag.context
    ↓
rag.prompt
    ↓
rag.generate
    ↓
rag.validate
    ↓
rag.citation

πŸ§ͺ 155. Observability Acceptance Criteria

The project should be able to answer:

What happened?

How long did it take?

Which documents were retrieved?

What scores did they receive?

Which documents were selected?

How many context tokens were used?

Which model generated the answer?

How many tokens were consumed?

How much did the request cost?

Were citations generated?

Was validation successful?

Did the request use a fallback?

Did the user provide negative feedback?

🧠 156. Advanced Production Exercise

Extend the platform to support:

☐ Distributed tracing
☐ OpenTelemetry instrumentation
☐ Trace sampling
☐ Tail-based sampling
☐ Quality-based sampling
☐ Structured logs
☐ Prometheus metrics
☐ RAG dashboards
☐ Quality dashboards
☐ Cost dashboards
☐ Tenant dashboards
☐ Alerting
☐ Error budgets
☐ RAG SLOs
☐ User feedback correlation
☐ Evaluation correlation
☐ Failure taxonomy
☐ Root cause analysis
☐ Knowledge freshness
☐ Cache observability
☐ Multi-model routing
☐ Agentic RAG tracing
☐ Graph RAG tracing
☐ SQL RAG tracing
☐ Multimodal RAG tracing
☐ PII redaction
☐ Secret redaction
☐ RBAC
☐ Auditability

🧠 157. Production RAG Observability Maturity

Level 1 β€” Application Logs

Request
Error
Response

Level 2 β€” Metrics

Latency
Errors
Throughput

Level 3 β€” Distributed Tracing

End-to-End Request Trace

Level 4 β€” RAG-Aware Observability

Retrieval
Context
LLM
Tokens
Citations

Level 5 β€” Quality Observability

Grounding
Faithfulness
Citation
User Feedback

Level 6 β€” Enterprise AI Observability

Quality
+
Performance
+
Cost
+
Security
+
Governance
+
Continuous Evaluation

🧠 158. Observability Maturity Model

                         Enterprise AI
                              β–²
                              β”‚
                    Quality + Governance
                              β”‚
                    RAG-Aware Telemetry
                              β”‚
                     Distributed Tracing
                              β”‚
                          Metrics
                              β”‚
                            Logs
                              β”‚
                              └──────────────►

🧠 159. Final Production Architecture

                         USER
                           β”‚
                           β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚  RAG API   β”‚
                    β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
                          β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚ RAG ORCHESTRATORβ”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β–Ό                 β–Ό                 β–Ό
     Query             Retrieval          Model
        β”‚                 β”‚                 β”‚
        β–Ό                 β–Ό                 β–Ό
    Rewrite            Reranker           LLM
                          β”‚                 β”‚
                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                   β–Ό
                              Validation
                                   β”‚
                                   β–Ό
                                Citation
                                   β”‚
                                   β–Ό
                                Response

                                   β”‚
                                   β–Ό
                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚    TELEMETRY     β”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β”‚
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β–Ό                β–Ό                β–Ό
               Logs            Metrics           Traces
                 β”‚                β”‚                β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β–Ό
                         Observability Platform
                                  β”‚
             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
             β–Ό                    β–Ό                    β–Ό
         Dashboard             Alerts              Analysis
             β”‚                    β”‚                    β”‚
             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β–Ό
                           RAG Evaluation
                                  β”‚
                                  β–Ό
                          Root Cause Analysis
                                  β”‚
                                  β–Ό
                           System Improvement
                                  β”‚
                                  β–Ό
                          Regression Testing
                                  β”‚
                                  β–Ό
                              Deployment

🧠 160. Final Mental Model

                         RAG OBSERVABILITY
                                β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β–Ό                       β–Ό                       β–Ό
      SYSTEM                  AI QUALITY             ECONOMICS
        β”‚                       β”‚                       β”‚
    Latency                 Retrieval                Tokens
    Traffic                 Grounding                Cost
    Errors                  Faithfulness             Model Usage
    Saturation              Citation                 Cache
        β”‚                    Relevance
        β”‚                    Completeness
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                β”‚
                                β–Ό
                           SECURITY
                                β”‚
                     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                     β–Ό          β–Ό          β–Ό
                  Access     Leakage    Injection
                                β”‚
                                β–Ό
                         USER EXPERIENCE
                                β”‚
                     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                     β–Ό          β–Ό          β–Ό
                  Feedback   Citations   Escalation
                                β”‚
                                β–Ό
                         ROOT CAUSE ANALYSIS
                                β”‚
                                β–Ό
                        CONTINUOUS IMPROVEMENT

The fundamental production loop is:

Observe
   ↓
Measure
   ↓
Evaluate
   ↓
Correlate
   ↓
Diagnose
   ↓
Improve
   ↓
Benchmark
   ↓
Deploy
   ↓
Observe Again

Production RAG observability is not simply monitoring infrastructure. It is the engineering discipline that connects every retrieval, context, generation, citation, quality, cost, security, and user-experience signal into one explainable system.


πŸ“š 161. Key Takeaways

  • Logs tell you what happened.
  • Metrics tell you what is happening at scale.
  • Traces tell you how an individual request executed.
  • RAG requires AI-specific observability in addition to infrastructure telemetry.
  • Every major RAG stage should have appropriate telemetry.
  • Query rewriting should be observable.
  • Embedding generation should be observable.
  • Retrieval should expose diagnostic metadata.
  • Reranking should expose candidate and ranking information.
  • Context selection should expose context size and selection behavior.
  • Prompt versions should be tracked.
  • LLM model, token, latency, and finish information should be captured.
  • Response validation should generate observable events.
  • Citation generation should be traceable.
  • Retrieval quality should be correlated with final response quality.
  • Token usage is both a performance and cost signal.
  • Context growth can cause latency and cost regressions.
  • RAG observability should include quality signals such as groundedness and faithfulness.
  • User feedback can be correlated with traces to identify failure patterns.
  • Production RAG requires observability for agentic workflows.
  • Graph RAG requires graph-specific telemetry.
  • SQL RAG requires SQL generation and execution telemetry.
  • Multimodal RAG requires cross-modal telemetry.
  • Enterprise systems require tenant-aware observability.
  • Sensitive prompts and documents should not be blindly logged.
  • PII and secrets must be appropriately redacted.
  • Observability platforms themselves require access control.
  • Trace sampling can reduce observability costs.
  • Tail-based and quality-based sampling can preserve high-value traces.
  • Knowledge-base freshness should be observable.
  • Ingestion pipelines should be observable.
  • Cache behavior should be observable.
  • Model routing should be observable.
  • Quality SLOs can complement traditional infrastructure SLOs.
  • RAG error budgets can help manage AI quality degradation.
  • Alerts should be actionable rather than noisy.
  • Trace-based debugging enables root-cause analysis.
  • Evaluation tells you whether the result was good.
  • Observability tells you what happened.
  • Combining both enables continuous RAG improvement.

🧭 162. Chapter Navigation

Part V β€” Advanced Retrieval-Augmented Generation

Previous:
06. RAG Evaluation & Benchmarking

Next:
08. RAG Performance Optimization

Section:
06 β€” Production RAG Engineering

Production RAG Engineering Path

01 Prompt Assembly
        ↓
02 Context Selection & Context Engineering
        ↓
03 Response Validation
        ↓
04 Citation & Source Attribution
        ↓
05 Enterprise Response
        ↓
06 RAG Evaluation & Benchmarking
        ↓
07 RAG Observability
        ↓
08 RAG Performance Optimization
        ↓
09 RAG Cost Optimization
        ↓
10 Production Retrieval Architecture
        ↓
11 Building Production RAG Systems

Enterprise AI Engineering Handbook
Building Production-Grade Enterprise AI Systems β€” One Chapter at a Time.