What you'll get: Real-time visibility into HTTP/HTTPS traffic with console output
This is a simple configuration to get started with Qtap without any external dependencies. Everything outputs to your console for immediate visibility.
Quick Start Configuration
Save this as qtap-starter.yaml:
Running the Starter Config
Quick Test
Testing Your Configuration
Once QTap is running, test it with some HTTP requests on the same host:
You should see output in your QTap terminal showing the captured traffic.
version: 2
# Storage Configuration - Everything to console
services:
# Event metadata goes to stdout
event_stores:
- type: stdout
# Object data (headers) goes to stdout
object_stores:
- type: stdout
# Processing Stack - Simple HTTP capture
stacks:
starter_stack:
plugins:
# HTTP Capture plugin - outputs to console
- type: http_capture
config:
level: headers # Capture headers (use 'full' for bodies too)
format: text # Human-readable format (use 'json' for structured)
# Traffic Capture Settings
tap:
direction: egress # Capture outgoing traffic
ignore_loopback: true # Skip localhost traffic
audit_include_dns: false # Skip DNS queries for cleaner output
http:
stack: starter_stack
# Install/Update QTap
curl -s https://get.qpoint.io/install | sudo sh
# Run with the config (runs in foreground by default)
sudo qtap --config=qtap-starter.yaml
# In another terminal, make test requests:
# Test 1: Simple GET request
curl https://httpbin.org/get
# Test 2: POST with headers
curl -X POST https://httpbin.org/post \
-H "X-Test-Header: test-value" \
-d "test=data"
version: 2
services:
event_stores:
- type: stdout
object_stores:
- type: stdout
stacks:
debug_stack:
plugins:
- type: http_capture
config:
level: full # Capture everything including bodies
format: json # Structured output for parsing
tap:
direction: all # Capture both ingress and egress
ignore_loopback: false # Include localhost traffic
audit_include_dns: true # Include DNS queries
http:
stack: debug_stack
version: 2
services:
event_stores:
- type: stdout
object_stores:
- type: stdout
stacks:
filtered_stack:
plugins:
- type: http_capture
config:
level: summary # Default: just basic info
format: text
rules:
# Capture headers for specific domains
- name: "API calls"
expr: http.req.host contains "api"
level: headers
# Capture everything for errors
- name: "Error debugging"
expr: http.res.status >= 400
level: full
# Skip health checks entirely
- name: "Ignore health"
expr: http.req.path in ["/health", "/ping"]
level: none
tap:
direction: egress
ignore_loopback: true
audit_include_dns: false
http:
stack: filtered_stack