Skip to content

iopsystems/rezolus

Repository files navigation

Rezolus

Rezolus captures and exports high resolution data about systems performance. It sets itself apart from other telemetry agents by using:

  • eBPF: Uses eBPF on Linux to instrument individual events and aggregate them into distributions. Rezolus will report on things like block io size and latency distributions, system call latency, TCP segment sizes, and more. By using eBPF we are able to instrument low-level events efficiently and provide new insights into system performance and workload characteristics.

  • Perf Events: On x86_64 we support gathering data from the CPU using performance counters. Rezolus gathers information about instructions being retired, the number of CPU cyles, and fine-grained CPU frequency data. This helps expose how efficient workload execution is on the hardware.

  • High frequency sampling: For traditional telemetry sources, Rezolus will sample at high frequency and provide summary statistics about behavior over time. By capturing data at high resolution, Rezolus is able to see spikes in utilization. Normally more data makes it more expensive to collect and store in your observability stack. But with Rezolus' summary statistics, these spikes will be reflected in percentile summaries. It's cheaper to export a few percentiles for each metrics than it is to collect on a secondly (or finer) basis.

Overview

Rezolus is designed to produce high resolution systems performance telemetry. It has a collection of samplers which instrument various aspects of systems performance including CPU, GPU, task scheduling, system calls, TCP, block IO, and more.

All of Rezolus's sampler focus on capturing key signals that can be used to understand how the workload is running on the underlying system. These insights are useful for understanding where bottlenecks and optimization opportunities might be. With high frequency sampling and eBPF, Rezolus can also provide insights into your workload itself like what typical block and network IO sizes are, the number and type of system calls being executed, and if there's spikes in utilization metrics.

Rezolus provides valuable data about systems performance and can be used to root cause production performance issues, capture better data in test environments, and provide signals for optimization efforts.

Configuration

Rezolus uses a TOML configuration. See config.toml in this project for an example config file.

Dashboard

If you are running Prometheus and Grafana for collecting and visualizing metrics, the dashboard.json file is an example Grafana dashboard that demonstrates some ways to use the collected data. This can help you get started on your own dashboards.

Getting Help

Join our Discord server to ask questions and have discussions.

If you have a problem using Rezolus or a question about Rezolus that you can't find an answer to, please open a new issue on GitHub

Building

Rezolus is built using the Rust toolchain. If you do not have the Rust toolchain installed, please see rust-lang.org to get started with Rust.

Build Dependencies

Rust >= 1.70.0

A default build of Rezolus that targets Linux systems will have BPF support enabled by default. For this build, in addition to the rust toolchain, you will need:

  • clang >= 11.0
  • libelf-dev >= 0.183
  • make >= 4.3
  • pkg-config >= 0.29.2

When building for non-Linux systems or without the default features to disable the bpf feature, the only dependencies aside from the rust toolchain are:

  • clang >= 11.0

Debian and Ubuntu users can install all the required dependencies for a default build with:

sudo apt install clang libelf-dev make pkg-config

Steps

  • clone this repository or transfer the contents of the repository to your build machine
  • change directory into the repository root
  • run cargo build in release mode
git clone https://github.com/iopsystems/rezolus
cd rezolus
cargo build --release

NOTE: If you want to disable BPF support, you should build Rezolus with:

cargo build --release --no-default-features

Configuration

At this time, the configuration for Rezolus is very minimal with the only option being the listen address of the agent. See the config.toml file for an example.

Installation

You can either manually install Rezolus and register it with your init system (eg systemd) or if you're using Debian or Ubuntu you can build a package for Rezolus using dpkg-buildpackage -b in the repository root. Note: you will need both devscripts and jq installed to generate the package.

Running

You may also run Rezolus manually after building from source. In the repository root you can run:

sudo target/release/rezolus config.toml

Contributing

To contribute to Rezolus first check if there are any open pull requests or issues related to the bugfix or feature you wish to contribute. If there is not, please start by opening a new issue on GitHub to either report the bug or get feedback on a new feature. This will allow one of the maintainers to confirm the bug and provide early input on new features.

Once you're ready to contribute some changes, the workflow is:

  • create a fork of this repository
  • clone your fork and create a new feature branch
  • make your changes and write a helpful commit message
  • push your feature branch to your fork
  • open a new pull request

License

Rezolus is dual-licensed under the Apache License v2.0 and the MIT License, unless otherwise specified.

Detailed licensing information can be found in the COPYRIGHT document