A TUI for monitoring your server fleet in real-time. Built with Go and the Charm stack.
- Real-time Monitoring: Track CPU, RAM, network usage, uptime, and systemd status
- Cards: Each node displayed in a detailed card with progress bars and status indicators
- List View: Compact tabular view for monitoring many nodes at once
- Interactive SSH Panel: Open an in-app SSH terminal for the selected node (
S) - Live Logs Panel: Tail logs in-app (
L) with follow/pause, filter, wrap mode, cursor navigation, and yank-to-clipboard - Built-in Search/Filter: Filter nodes from the UI with
/(supports negation via!query) - Parallel Collection: Fetches metrics from all hosts concurrently using goroutines
- Long-lived SSH Connections: Reuses SSH connections for metrics collection
- Configurable: Enable/disable specific metrics via YAML configuration
go install github.com/justalternate/fleettuinix run github:JustAlternate/fleettuigit clone https://github.com/JustAlternate/fleettui.git
cd fleettui
go install .# Run with default config (~/.config/fleettui/)
fleettui
# Specify custom hosts file
fleettui -hosts ./hosts.yamlq: Quittab: Switch cards/table view/: Open node filterr: Manual refreshS: Open SSH panel for selected nodeL: Open logs panel for selected node
j/k: Up/downh/l: Left/right (cards view)g/G: Top/bottom
ctrl+q: Close panel
ctrl+q: Close panelf: Toggle follow (streaming/pause)w: Toggle line wrapc: Clear buffered logs/: Filter logsesc: Exit/clear filter or exit selection modej/k,g/G: Cursor/navigationV: Toggle multi-line selectiony: Yank selected line(s) to clipboard
hosts:
- name: server-01 # Display name (also used as IP if ip omitted)
ip: 192.168.1.10 # IP address (default SSH port 22). Optional if name resolves.
user: root # SSH user (default: root)
ssh_key_path: ~/.ssh/id_rsa # Optional: uses ssh-agent if not specified
- name: server-02
ip: 192.168.1.11:2222 # Custom SSH port supported
user: adminNotes:
- If
ipis not specified, thenameis used as the hostname/IP - If
useris not specified, defaults toroot - If
ssh_key_pathis not specified, usesssh-agentif available - Custom SSH port can be specified in
ipfield (e.g.,192.168.1.10:2222) - SSH host keys use Trust On First Use (TOFU) and are stored in
~/.ssh/known_hosts
refresh_rate: 5s # How often to refresh metrics
metrics: # Enabled metrics
- cpu # CPU usage percentage
- ram # RAM usage percentage
- network # Network I/O rates (MB/s)
- connectivity # SSH connectivity status
- uptime # System uptime
- systemd # Failed systemd units
- os # OS name from /etc/os-release- Remote hosts must have SSH access and read access to
/procfilesystem (standard on Linux)
# Clone and build
git clone https://github.com/JustAlternate/fleettui.git
cd fleettui
go build .Run all tests:
go test ./...Run with coverage:
go test -cover ./...When interface changes require new mocks, run:
mockery --allMIT License.
Inspired by k9s, a terminal UI for Kubernetes clusters.
