Skip to content

Event Filtering

Jean-Marc Strauven edited this page Aug 6, 2025 · 2 revisions

Event Filtering

Learn how to effectively filter, analyze, and understand different types of events captured by ChronoTrace.

Understanding Event Types

ChronoTrace captures comprehensive event data across multiple categories:

  • πŸ“Š Database Events - SQL queries, transactions, connections, bindings
  • πŸ—„οΈ Cache Events - Hits, misses, writes, deletions, store operations
  • 🌐 HTTP Events - External API calls, responses, failures, timeouts

πŸ” Database Event Filtering

Basic Database Filtering

Filter database events to focus on specific aspects of your application's data layer:

# Show only database events
php artisan chronotrace:replay {trace-id} --filter=database

# Show only slow database queries (>100ms)
php artisan chronotrace:replay {trace-id} --filter=database --min-duration=100

# Show database events with specific patterns
php artisan chronotrace:replay {trace-id} --filter=database --search="users"

Database Query Analysis

# Example database event output
β”Œβ”€ DATABASE EVENTS (8 queries, 145ms total) ──────────────────┐
β”‚ [+0ms] SELECT * FROM users WHERE id = ? [123] (5ms)
β”‚        Connection: mysql, Rows: 1
β”‚ 
β”‚ [+15ms] SELECT * FROM posts WHERE user_id = ? [123] (25ms)
β”‚         Connection: mysql, Rows: 50
β”‚ 
β”‚ [+45ms] SELECT * FROM comments WHERE post_id IN (?, ?, ...) (85ms) ⚠️
β”‚         Connection: mysql, Rows: 1,500
β”‚ 
β”‚ [+135ms] UPDATE users SET last_seen = ? WHERE id = ? (5ms)
β”‚          Connection: mysql, Affected: 1
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

What to look for:

  • ⚠️ Slow queries (>100ms) - Usually indicate missing indexes
  • πŸ”„ N+1 patterns - Multiple similar queries in sequence
  • πŸ“Š Large result sets - High row counts may need pagination
  • πŸ”— Connection issues - Multiple connections when one should suffice

Advanced Database Filtering

# Filter by query type
php artisan chronotrace:replay {trace-id} --filter=database --query-type=select
php artisan chronotrace:replay {trace-id} --filter=database --query-type=insert,update

# Filter by table
php artisan chronotrace:replay {trace-id} --filter=database --table=users,posts

# Filter by connection
php artisan chronotrace:replay {trace-id} --filter=database --connection=mysql,pgsql

πŸ’Ύ Cache Event Filtering

Basic Cache Filtering

# Show only cache events
php artisan chronotrace:replay {trace-id} --filter=cache

# Show cache misses only
php artisan chronotrace:replay {trace-id} --filter=cache --cache-result=miss

# Show cache operations on specific keys
php artisan chronotrace:replay {trace-id} --filter=cache --search="user:"

Cache Performance Analysis

# Example cache event output
β”Œβ”€ CACHE EVENTS (6 operations) ───────────────────────────────┐
β”‚ [+25ms] GET user:123:profile (HIT) 
β”‚         Store: redis, TTL: 3600s, Size: 2.1KB
β”‚ 
β”‚ [+35ms] GET products:featured (MISS) ⚠️
β”‚         Store: redis, Fallback to database
β”‚ 
β”‚ [+180ms] SET products:featured (TTL: 1800s, Size: 15.6KB)
β”‚          Store: redis, Operation: 12ms
β”‚ 
β”‚ [+195ms] GET shipping:rates:90210 (HIT)
β”‚          Store: redis, TTL: 7200s, Size: 890B
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

What to look for:

  • ⚠️ Cache misses followed by expensive operations
  • πŸ”„ Cache stampeding - Multiple misses for same key
  • ⏰ TTL optimization - Keys expiring too quickly/slowly
  • πŸ“ Large cache values - May indicate inefficient caching

Cache Efficiency Analysis

# Analyze cache hit rates
php artisan chronotrace:replay {trace-id} --filter=cache --stats

# Expected output:
Cache Statistics:
- Total Operations: 15
- Cache Hits: 12 (80%)
- Cache Misses: 3 (20%)
- Average Operation Time: 3ms
- Total Cache Size: 45.7KB

🌐 HTTP Event Filtering

Basic HTTP Filtering

# Show only HTTP events
php artisan chronotrace:replay {trace-id} --filter=http

# Show failed HTTP requests only
php artisan chronotrace:replay {trace-id} --filter=http --status=4xx,5xx

# Show slow HTTP requests (>1 second)
php artisan chronotrace:replay {trace-id} --filter=http --min-duration=1000

HTTP Request Analysis

# Example HTTP event output
β”Œβ”€ HTTP EVENTS (3 requests) ───────────────────────────────────┐
β”‚ [+78ms] POST https://api.stripe.com/v1/charges (1,234ms)
β”‚         Status: 200 OK
β”‚         Request: 2.1KB, Response: 890B
β”‚         Connection: 45ms, DNS: 12ms
β”‚
β”‚ [+1,350ms] GET https://api.shipping.com/rates (2,156ms) ⚠️
β”‚            Status: 200 OK  
β”‚            Request: 456B, Response: 1.2KB
β”‚            Connection: 1,200ms (slow), DNS: 15ms
β”‚
β”‚ [+3,520ms] POST https://webhook.example.com/notify (567ms)
β”‚            Status: 200 OK
β”‚            Request: 1.8KB, Response: 125B
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

What to look for:

  • ⚠️ Slow connections - High connection time indicates network issues
  • πŸ”„ Failed requests - 4xx/5xx status codes
  • ⏰ Timeout patterns - Requests approaching timeout limits
  • πŸ“Š Large payloads - Oversized requests/responses

HTTP Error Analysis

# Focus on failed requests
php artisan chronotrace:replay {trace-id} --filter=http --status=error

# Show timeout issues
php artisan chronotrace:replay {trace-id} --filter=http --min-duration=30000

# Filter by specific hosts
php artisan chronotrace:replay {trace-id} --filter=http --host="api.stripe.com"

πŸ”„ Queue Job Filtering

Basic Job Filtering

# Show only job events
php artisan chronotrace:replay {trace-id} --filter=jobs

# Show failed jobs only
php artisan chronotrace:replay {trace-id} --filter=jobs --status=failed

# Show jobs from specific queues
php artisan chronotrace:replay {trace-id} --filter=jobs --queue=emails,payments

Job Performance Analysis

# Example job event output
β”Œβ”€ QUEUE EVENTS (4 jobs) ──────────────────────────────────────┐
β”‚ [+195ms] DISPATCH SendWelcomeEmail
β”‚          Queue: emails, Delay: 0s, Tries: 3
β”‚          Payload: {"user_id": 123, "template": "welcome"}
β”‚
β”‚ [+200ms] DISPATCH ProcessPayment
β”‚          Queue: payments, Delay: 5s, Tries: 5
β”‚          Payload: {"order_id": 789, "amount": 99.99}
β”‚
β”‚ [+205ms] DISPATCH UpdateInventory
β”‚          Queue: default, Delay: 0s, Tries: 1
β”‚          Payload: {"product_id": 456, "quantity": -2}
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🎯 Combined Filtering

Multi-Event Analysis

# Combine multiple event types
php artisan chronotrace:replay {trace-id} --filter=database,http
php artisan chronotrace:replay {trace-id} --filter=cache,jobs

# Show all events but filter by duration
php artisan chronotrace:replay {trace-id} --min-duration=50

# Complex filtering
php artisan chronotrace:replay {trace-id} --filter=database,http --min-duration=100 --search="payment"

Performance Correlation

# Identify performance bottlenecks across event types
php artisan chronotrace:replay {trace-id} --performance-analysis

# Expected output:
Performance Breakdown:
- Database: 145ms (32% of total)
- HTTP: 289ms (64% of total) ⚠️ Bottleneck
- Cache: 8ms (2% of total)
- Jobs: 12ms (3% of total)

Recommendations:
- Optimize HTTP calls to external APIs
- Consider caching API responses
- Implement timeout strategies

πŸ“Š Advanced Filtering Techniques

Pattern Recognition

# Find N+1 query patterns
php artisan chronotrace:replay {trace-id} --detect-n-plus-one

# Identify cache stampeding
php artisan chronotrace:replay {trace-id} --detect-cache-stampede

# Find slow operation chains
php artisan chronotrace:replay {trace-id} --detect-slow-chains

Custom Filtering

# Use grep-like patterns
php artisan chronotrace:replay {trace-id} --filter=database --grep="SELECT.*users"
php artisan chronotrace:replay {trace-id} --filter=http --grep="stripe\.com"

# Exclude specific patterns
php artisan chronotrace:replay {trace-id} --filter=database --exclude="session"

Timeline Filtering

# Show events in specific time ranges
php artisan chronotrace:replay {trace-id} --time-range=0-100ms
php artisan chronotrace:replay {trace-id} --time-range=100ms-500ms

# Show events before/after specific timestamp
php artisan chronotrace:replay {trace-id} --before=100ms
php artisan chronotrace:replay {trace-id} --after=200ms

πŸ”§ Filtering Best Practices

1. Start Broad, Then Narrow

# 1. First, see the complete picture
php artisan chronotrace:replay {trace-id}

# 2. Identify the problem area
php artisan chronotrace:replay {trace-id} --min-duration=100

# 3. Focus on specific event types
php artisan chronotrace:replay {trace-id} --filter=database --min-duration=50

2. Use Performance-Based Filtering

# Focus on slow operations first
php artisan chronotrace:replay {trace-id} --min-duration=100

# Then drill down by event type
php artisan chronotrace:replay {trace-id} --filter=http --min-duration=1000

3. Combine Filters Strategically

# Database performance issues
php artisan chronotrace:replay {trace-id} --filter=database --min-duration=50 --search="SELECT"

# API integration problems
php artisan chronotrace:replay {trace-id} --filter=http --status=error,timeout

# Cache efficiency analysis
php artisan chronotrace:replay {trace-id} --filter=cache --cache-result=miss

4. Save Useful Filter Combinations

# Create aliases for common patterns
alias ct-db-slow="php artisan chronotrace:replay \$1 --filter=database --min-duration=100"
alias ct-api-errors="php artisan chronotrace:replay \$1 --filter=http --status=error"
alias ct-cache-analysis="php artisan chronotrace:replay \$1 --filter=cache --stats"

# Usage
ct-db-slow abc123def456
ct-api-errors abc123def456

πŸ“ˆ Filtering for Different Scenarios

Debugging Performance Issues

# 1. Find the bottleneck
php artisan chronotrace:replay {trace-id} --performance-analysis

# 2. Focus on the slow area
php artisan chronotrace:replay {trace-id} --filter=http --min-duration=1000

# 3. Analyze patterns
php artisan chronotrace:replay {trace-id} --filter=http --detect-timeout-patterns

Debugging Database Issues

# 1. Check for N+1 queries
php artisan chronotrace:replay {trace-id} --filter=database --detect-n-plus-one

# 2. Find slow queries
php artisan chronotrace:replay {trace-id} --filter=database --min-duration=100

# 3. Analyze query patterns
php artisan chronotrace:replay {trace-id} --filter=database --search="SELECT.*WHERE.*IN"

Debugging Cache Issues

# 1. Check cache efficiency
php artisan chronotrace:replay {trace-id} --filter=cache --stats

# 2. Find cache misses
php artisan chronotrace:replay {trace-id} --filter=cache --cache-result=miss

# 3. Look for stampeding
php artisan chronotrace:replay {trace-id} --detect-cache-stampede

πŸ“š Related Documentation


Master event filtering to quickly identify and solve issues! Use these filtering techniques to focus on specific problems and reduce noise in your trace analysis.

Clone this wiki locally