/qtrace

Quick function latency analysis and visualization based on Erlang tracing (with histograms!)

Primary LanguageElixirMIT LicenseMIT

Qtrace

Quick function latency analysis and visualization based on Erlang tracing.

Traces function calls and collects latency measurements in microseconds. Uses histogram-based aggregation to provide quantile analysis (P50, P95, P99) and terminal-based visualization of performance distributions across multiple functions.

Usage

# Start a tracing session, tracing all processes
session = Qtrace.start_session(:all)

# Trace specific functions
Qtrace.trace_function(session, MyApp, :my_function, 2)
Qtrace.trace_function(session, MyApp, :another_function, 1)

# ... run your code ...

# Visualize all traced functions
Qtrace.plot_all_histograms(session)

# Get specific quantiles
p95 = Qtrace.get_quantile(session, 0.95, MyModule, :my_function, 2)

Example Output

Latency Histogram: Qtrace.Demo.web_request/0
================================================================================
            0              13             26             39             52
      5.9ms  │███ (3)
      6.9ms  │█ (1)
      8.1ms  │██ (2)
      10.3ms │█ (1)
      11.2ms │██████ (5)
      12.1ms │█████ (4)
      13.2ms │███ (3)
      14.2ms │███████ (6)
      15.4ms │████████████████ (14)
      16.7ms │█████████████████ (15)
      18.1ms │████████████████████ (17)
      19.6ms │█████████████████████████████████ (29)
      21.3ms │██████████████████████████████████████████████████████████ (50)
      23.0ms │██████████████████████████████████████████ (36)
      24.9ms │███████████████████████████████████████████████ (41)
      27.0ms │████████████████████████████████████████████████████████████ (52)
      29.3ms │█████████████████████████████████████████████████████████ (49)
      31.7ms │███████████████████████████████████████████████████████████ (51)
      34.4ms │██████████████████████████████████████ (33)
      37.2ms │████████████████████████████████████████ (35)
      40.3ms │████████████████████████ (21)
      43.7ms │███████ (6)
      47.3ms │███ (3)
      51.3ms │██ (2)
    134.0ms  │██ (2)
    157.2ms  │█ (1)
    199.9ms  │█ (1)
    216.6ms  │█████████ (8)
    234.6ms  │██ (2)
    254.2ms  │██ (2)
    275.4ms  │███ (3)
    298.3ms  │██ (2)
    323.2ms  │██ (2)
              └────────────────────────────────────────────────────────────
            0              13             26             39             52
Stats:
  Min: 5.9ms
  Max: 323.2ms
  Samples: 502
  P50: 27.0ms
  P95: 47.3ms
  P99: 275.4ms

Installation

Add qtrace to your list of dependencies in mix.exs:

def deps do
  [
    {:qtrace, "~> 1.0"}
  ]
end

Documentation

Full documentation is available at https://hexdocs.pm/qtrace.

License

MIT License