v0.3.0

Clusters

Provision and manage InfluxDB 3 clusters with Docker-based container orchestration.

Overview

Clusters are the storage backbone of FacilFlow. Each cluster is an InfluxDB 3 deployment that can scale from a single node to a multi-node topology with dedicated querier, ingester, compactor, and router nodes.

Cluster List

Navigate to Infrastructure > Clusters to see all clusters:

Column Description
Name Cluster identifier
Status Running, stopped, provisioning, error
Nodes Number of container nodes
Uptime Time since last start
Storage Disk usage

Provisioning a Cluster

  1. Click Create Cluster
  2. Choose a name and configuration preset
  3. Select node types to include
  4. Configure resources (CPU, memory limits)
  5. Click Provision

FacilFlow uses the Docker SDK to create and manage containers for each node.

Node Types

Node Role
Router Accepts writes and queries, routes to appropriate nodes
Ingester Handles incoming data writes, buffers to WAL
Querier Executes SQL queries against stored data
Compactor Compacts Parquet files for query performance

For small deployments, a single all-in-one node handles all roles.

Container Lifecycle

Each node runs as a Docker container. Available operations:

Action Description
Start Start a stopped container
Stop Gracefully stop a container
Restart Stop and start a container
Remove Delete the container and its data
View Logs Stream container logs in real-time

Logs

Container logs stream via Server-Sent Events (SSE):

  • Click a node and open the Logs tab
  • Logs stream live as the container produces output
  • Filter by severity
  • Scroll through historical logs

Stats

Each node reports resource usage:

  • CPU utilization
  • Memory usage
  • Network I/O
  • Disk usage

Data Explorer

Each cluster includes a built-in data explorer:

  1. Select a cluster
  2. Open the Data Explorer tab
  3. Write SQL queries against the cluster’s data
  4. View results as tables or charts
  5. Set time ranges with the time picker

Example Queries

-- Recent sensor data
SELECT * FROM sensor_data
WHERE time > now() - INTERVAL '1 hour'
ORDER BY time DESC
LIMIT 100;

-- Aggregated averages
SELECT
  date_bin('5 minutes', time) AS bucket,
  avg(temperature) AS avg_temp
FROM sensor_data
WHERE time > now() - INTERVAL '24 hours'
GROUP BY bucket
ORDER BY bucket;
esc