Self-Hosted Grafana Observability Stack
Architecture
┌──────────────────────────────────────────────────────────────────┐
│ YOUR INFRASTRUCTURE │
│ │
│ ┌───────┐ │
│ │ Qtap │──── Events (metadata) ───► OTel Collector (:4317) │
│ │ Agent │ │ │
│ │ │ ▼ │
│ │ │ Loki (:3100) │
│ │ │ │ │
│ │ │ ▼ │
│ │ │ Grafana (:3000) │
│ │ │ ▲ │
│ │ │ │ click artifact URL │
│ │ │ ▼ │
│ │ │ nginx proxy (:3904) │
│ │ │ │ │
│ │ │ ▼ │
│ │ │── Objects (payloads) ──► Garage S3 (:3900) │
│ └───────┘ │
└──────────────────────────────────────────────────────────────────┘Service
Role
Port
Prerequisites
Understanding the Two Data Paths
Events
Objects
Configuration Files
OTel Collector
Loki
Garage (S3-Compatible Object Storage)
Nginx Proxy
Grafana Datasource
Qtap
Docker Compose
Running the Stack
Step 1: Start the Services
Step 2: Initialize Garage
Step 3: Start Qtap
Step 4: Wait for Initialization
Step 5: Generate Test Traffic
Step 6: Verify Data Is Flowing
Exploring Data in Grafana
Viewing Events
Useful LogQL Queries
Query
Description
Expanding Log Entries
Object Linking — From Events to Full Payloads
How It Works
Walkthrough
The access_url Template
Cleanup
Next Steps
Last updated