bees-prometheus-exporter 2.0.0

Prometheus exporter for the bees deduplication daemon
Documentation
# Bees Prometheus Exporter

A Prometheus metrics exporter for the [Bees](https://github.com/zygo/bees) deduplication daemon.

## Installation

Install directly from crates.io:

```bash
cargo install bees-prometheus-exporter
```

## Usage

Basic usage with default settings:

```bash
bees-prometheus-exporter
```

The exporter will start on port 8080 and read Bees statistics from `/run/bees/`.

### Command Line Options

```bash
bees-prometheus-exporter [OPTIONS]
```

- `-b, --bees-work-dir PATH`: Path to Bees work directory (default: `/run/bees`)
- `-p, --port PORT`: Port to bind the HTTP server to (default: `8080`)
- `-a, --address ADDRESS`: Address to bind the HTTP server to (default: `::0`)
- `-l, --log-level LEVEL`: Logging level - error, warn, info, debug, trace (default: `info`)

### Examples

Bind to localhost only:

```bash
bees-prometheus-exporter --address 127.0.0.1
```

Enable debug logging:

```bash
bees-prometheus-exporter --log-level debug
```

## Metrics

The exporter reads Bees status files (`<fs-uuid>.status`) from bees' stats directory, by default `/run/bees`.

The available metrics are described in https://github.com/Zygo/bees/blob/master/docs/event-counters.md

Additionally, the exporter reads the per-extent-size progress summary.

### Metric Format

All metrics follow the pattern `bees_{metric_name}_total` and include a `uuid` label identifying the filesystem.

The per-extent-size progress summary is formatted as `bees_progress_summary_{column_name}`, with the columns `datasz_bytes`, `point`, `gen_min` and `gen_max`. The extent size is provided as a label.  
When `point` is idle, `bees_progress_summary_point_idle` reports 1, else 0

## Configuration

Note that, by default, `/run/bees` is root-owned. The exporter requires read access to the directory.  
The exporter uses landlock to confine filesystem and network access. Landlock operates on fds, not paths, which means that deleting and recreating the bees directory will not show up in the exporter.

### Prometheus Configuration

Add the exporter to your Prometheus configuration:

```yaml
scrape_configs:
  - job_name: "bees"
    static_configs:
      - targets: ["localhost:8080"]
    scrape_interval: 1s # bees updates the stats file once per second
```

## Monitoring Examples

### Grafana Dashboard Queries

Deduplication ratio:

```promql
rate(bees_bytes_deduped_total[5m]) / rate(bees_bytes_scanned_total[5m])
```

Deduplication rate in MiB/s:

```promql
rate(bees_bytes_deduped_total[5m]) / 1024 / 1024
```

Files processed per second:

```promql
rate(bees_files_scanned_total[5m])
```

## Requirements

- Rust 1.85+ (for building from source)
- Bees deduplication daemon running and producing status files