Skip to content

florianl/firepit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔥 firepit

A lightweight OpenTelemetry (OTel) profile receiver with a non-persistent storage and visualizer that displays OTel profiles as interactive flame graphs in your browser.

Features

  • Multi-Protocol Support: Receive OTel profiles via gRPC (port 4317) and HTTP/JSON (port 4318)
  • Multiple Sample Types: View separate flame graphs for CPU, memory, and other profile types
  • Multiple Views: Interactive flame graph view and flamescope view for time-based performance analysis
  • Real-time Visualization: Auto-refreshing flame graphs with pause/resume controls
  • Resource Filtering: Filter flame graphs by resource attributes (e.g., service.name)
  • Frame Filtering: Search and highlight specific functions within flame graphs
  • Data Export: Export profiles as json enabling integration with other tools and data pipelines
  • Time-Based and Memory-Limited Storage: Non-persistent in-memory storage with configurable retention windows and memory thresholds for lightweight operation

Getting Started

Run firepit:

$ make docker-run
docker run -it --rm \
	-p 4317:4317 \
	-p 4318:4318 \
	-p 8080:8080 \
	firepit
2026/04/28 06:19:26 INFO Configuration loaded grpc_addr=:4317 http_addr=:4318 web_addr=:8080 base_path="" profile_ttl=5m0s cleanup_interval=30s max_body_size=33554432 max_storage_bytes=524288000
2026/04/28 06:19:26 INFO OTLP HTTP server listening addr=:4318
2026/04/28 06:19:26 INFO Web UI listening addr=:8080
2026/04/28 06:19:26 INFO Open browser to url=http://localhost:8080
2026/04/28 06:19:26 INFO gRPC server listening addr=:4317

Then open http://localhost:8080 in your browser.

Configure an OTel collector to report profiles to firepit:

receivers:
  profiling: {}

exporters:
  otlp_grpc/firepit:
    endpoint: 127.0.0.1:4317
    tls:
      insecure: true
      insecure_skip_verify: true

service:
  pipelines:
    profiles:
      receivers: [profiling]
      exporters: [otlp_grpc/firepit]

Screenshots

Flame Graph View

The flame graph view aggregates all collected profiles into a single interactive visualization. Each frame represents a function call, with width proportional to its share of total samples. Use the filter controls at the top to narrow down by resource attribute (e.g. process.executable.name) and switch between different reported sample types.

Flame graph view showing aggregated CPU profiles

Flamescope View

The flamescope view plots samples across a two-dimensional heatmap, wall-clock time on the x-axis and sub-second offset on the y-axis. This makes periodic or time-correlated performance patterns immediately visible, helping to correlate spikes with external events.

Flamescope view showing time-based profile heatmap

⚠️ Development and Demo Use Only

Firepit is designed for development and demo purposes only. It is not intended for production use.

Key limitations:

  • No authentication: The API and web UI are completely open with no access control
  • No persistence: All profile data is stored in memory and will be lost on restart

Use firepit in isolated development environments or protected demo settings only. Do not expose it to untrusted networks or use it to store sensitive profiling data.

About

Lightweight OpenTelemetry profiles receiver featuring non-persistent storage and interactive flame graph visualization

Resources

License

Stars

4 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors