Skip to content

rogercoll/eprofiler-tui

Repository files navigation

eprofiler-tui

CI Dependency status

A terminal-based flamegraph viewer that receives profiling data via an OTLP gRPC endpoint and renders a live, interactive flamegraph in the terminal. It can be used to visualize profiling data generated by opentelemetry-ebpf-profiler.

Features

  • OTLP gRPC profiles receiver (default 0.0.0.0:4317, configurable via --port)
  • Live icicle-style flamegraph with hot/warm color scheme
  • Freeze/live toggle to pause updates for smooth navigation
  • Frame type annotations ([Native], [Kernel], [JVM], etc.)
  • Thread/process grouping via thread.name sample attribute
  • Keyboard-driven navigation and zoom
  • Thread search (/) with fuzzy filtering
  • Experimental: Flamescope tab (https://www.brendangregg.com/flamescope.html)
  • Experimental: Executables tab β€” load debug symbols from ELF/DWARF binaries for inline-aware symbolization (persistent LSM-tree store survives restarts)

Demo

Installation

No Rust toolchain required β€” you can run eprofiler-tui directly with Docker or Podman:

podman run -it -p 4317:4317 ghcr.io/rogercoll/eprofiler-tui:latest --data-dir /tmp

Replace podman with docker if preferred.

Alternatively, install from source with Cargo:

cargo install --git https://github.com/rogercoll/eprofiler-tui

Usage

The TUI will start and listen for OTLP profile data on port 4317. Point your OpenTelemetry profiling agent at localhost:4317.

To use a different port:

# With Cargo install:
eprofiler-tui --port 4318
Option Description
-p, --port <PORT> OTLP gRPC listen port (default: 4317)
-d, --data-dir <PATH> Symbol store directory (default: platform data dir)
-h, --help Print help

Building

Requires Rust 2024 edition and protobuf definitions from the opentelemetry-proto submodule.

The symbolization feature (symblib) pulls in native C/C++ dependencies that need extra build tools:

  • cmake and make β€” used by the zydis disassembler crate
  • g++ (or any C++ compiler) β€” compiles zydis's bundled C sources
  • protobuf-compiler (protoc) β€” used by prost-build to compile .proto definitions inside symblib
git submodule update --init
cargo build --release

Keybindings

Global: Tab switch tab, Ctrl-c / q quit.

Flamegraph tab

Key Action
f / Space Toggle freeze/live mode
j / ↓ k / ↑ Navigate depth
h / ← l / β†’ Navigate siblings
Enter / Esc Zoom in / out
/ Search threads
r Reset

Executables tab (experimental β€” under testing, may be removed for simplification)

Key Action
j / k Navigate list
Enter Load symbols for selected executable
/ Add new executable by path
r Remove loaded symbols

About

eBPF profiler flamegraph based TUI 🐧🐝

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors