Skip to main content

Metrics

Pulse collects and visualizes key performance metrics for your Rails application, giving you insights into request latency, database performance, and background job health.

Built-in Metrics

Request Metrics

MetricDescription
request.durationTotal request time
request.db_timeTime spent in database
request.view_timeTime spent rendering
request.queue_timeTime waiting in queue

Latency Percentiles

Track P50, P95, and P99 latencies to understand your performance distribution:
  • P50 - Median response time (50% of requests faster)
  • P95 - 95th percentile (only 5% slower)
  • P99 - 99th percentile (catches outliers)

Database Metrics

MetricDescription
db.query_countQueries per request
db.query_durationQuery execution time
db.pool_sizeConnection pool usage
db.pool_waitingThreads waiting for connection

Background Job Metrics

MetricDescription
job.durationJob execution time
job.queue_timeTime in queue
job.retry_countNumber of retries
job.failure_ratePercentage of failed jobs

Custom Metrics

Track your own application-specific metrics:

Counter

Increment a counter for events:
# Simple increment
BrainzLab::Pulse.increment("orders.placed")

# With tags for segmentation
BrainzLab::Pulse.increment("orders.placed", tags: { plan: "pro" })

# Increment by value
BrainzLab::Pulse.increment("items.sold", 5)

Gauge

Set a point-in-time value:
# Current queue size
BrainzLab::Pulse.gauge("queue.size", queue.size)

# Active connections
BrainzLab::Pulse.gauge("connections.active", pool.active_count)

Histogram

Track value distributions:
# Order totals
BrainzLab::Pulse.histogram("payment.amount", order.total)

# File sizes
BrainzLab::Pulse.histogram("upload.size_bytes", file.size)

Timing

Measure duration of operations:
# Block-based timing
BrainzLab::Pulse.time("external_api.call") do
  ExternalAPI.fetch_data
end

# Manual timing
start = Time.now
result = perform_operation
BrainzLab::Pulse.timing("operation.duration", (Time.now - start) * 1000)

Metric Aggregations

Pulse automatically aggregates metrics:
AggregationDescription
avgAverage value
minMinimum value
maxMaximum value
sumTotal sum
countNumber of data points
p50, p95, p99Percentiles

Alerting

Set up alerts based on metric thresholds:
# In the Pulse dashboard, create alerts like:
# - P95 latency > 500ms for 5 minutes
# - Error rate > 1% for 2 minutes
# - Queue size > 1000
Notifications can be sent via:
  • Slack
  • Email
  • PagerDuty
  • Webhooks

Viewing Metrics

Access metrics in the Pulse dashboard:
  1. Overview - High-level health metrics
  2. Endpoints - Per-route performance
  3. Database - Query metrics and slow query analysis
  4. Jobs - Background job performance

What’s Next?