What a Healthy Capture Looks Like
This guide shows what successful Qtap captures look like for different binaries and scenarios. Use these patterns as a reference when troubleshooting capture issues.
Understanding Healthy Captures
A healthy Qtap capture successfully:
✅ Detects the TLS handshake (SNI, TLS version)
✅ Identifies the HTTP protocol (http1, http2, http3)
✅ Captures process metadata (PID, binary path)
✅ Parses HTTP request/response headers and body
✅ Reports accurate byte counts and duration
Key indicator: "l7Protocol": "http1" or "http2" (NOT "other")
Quick Reference: Healthy Capture Checklist
When reviewing Qtap logs, a healthy capture shows:
If ANY of these are missing, investigate further with --bpf-trace.
curl: HTTP/2 over HTTPS
Complete HTTP Transaction JSON
Debug Log Indicators (curl)
TLS Handshake Detection:
Protocol Detection:
Connection Metadata:
Connection Report:
wget: HTTP/1.1 over HTTPS
Debug Log Indicators (wget)
TLS Handshake:
Protocol Detection:
HTTP Request Captured:
HTTP Response Captured:
Python requests: HTTP/1.1 over HTTPS
Debug Log Indicators (Python)
TLS Handshake:
Protocol Detection:
HTTP Transaction:
Debug Log Patterns
Healthy Capture Sequence
Socket Connection
TLS Detection (for HTTPS)
Protocol Detection
HTTP Capture
Connection Finalization
Key Fields to Check
✅ Success Indicators
"l7Protocol": "http1"or"http2"(NOT "other")"tlsProbeTypesDetected": ["openssl", ...]for HTTPS"gotTLSClientHelloEvent": truefor HTTPS"gotProtocolEvent": true"dataEventCount": > 0"bytesSent": > 0and"bytesReceived": > 0
❌ Failure Indicators
"l7Protocol": "other"- HTTP parsing failed"gotProtocolEvent": false- Protocol not detected"dataEventCount": 0- No data captured"write_bytes": 0, "read_bytes": 0- No traffic seen
BPF Trace Patterns
When to Use BPF Trace
Use --bpf-trace for deep troubleshooting of capture issues. See BPF Trace - Advanced Debugging for complete details.
What it shows:
Individual syscall invocations (read, write, writev)
File descriptor (FD) numbers per operation
Data transfer sizes per syscall
TLS/SSL detection decisions per-FD
Healthy BPF Trace Example (curl)
Connection Metadata
HTTP Transaction Artifact
Troubleshooting: What to Look For
Problem: HTTP Parsing Fails (l7Protocol: "other")
l7Protocol: "other")Check:
Was TLS detected? Look for
tlsProbeTypesDetectedWas protocol detected? Check
gotProtocolEvent: trueWas data captured? Check
dataEventCount > 0
Common causes:
Non-standard HTTP libraries (custom TLS wrappers)
Binary not using OpenSSL/BoringSSL (see
tlsProbeTypesDetected)Compression or encryption before TLS layer
Problem: No Capture at All
Check:
Is process filtered? Look for filter matches in debug logs
Is Qtap running? Check for
eBPF program loaded and listeningIs traffic direction captured? Verify
directionconfig matches traffic
Debug command:
Problem: Missing Headers or Body
Check capture level:
none: No capturesummary: Basic info only (no headers/body)details: Headers included (no body)full: Everything (headers + body)
Verify plugin config:
Problem: Zero Bytes Captured
Check:
Connection report:
write_bytesandread_bytesshould be > 0Socket close event: Should show non-zero byte counts
BPF trace: Look for syscall data transfer events
Common causes:
Qtap started after traffic (must start before)
Connection reused from before Qtap started
Traffic on different network interface
Additional Resources
BPF Trace Deep Dive: See BPF Trace - Advanced Debugging for complete BPF trace field reference
Configuration Examples: See Configuration Examples
Traffic Processing with Plugins: See Traffic Processing with Plugins
Last updated