Observability
Logs
Kubius’s log viewer is built on live kubectl logs -f streams with reconnect logic, multi-pod aggregation, search, regex, and a popout floating-window mode.
Pod logs
Open any pod and switch to the Logs tab. The viewer:
- Fetches the last 200 lines as one HTTP batch (no flicker on initial load)
- Switches to a follow stream - new lines stream in at the top
- Reconnects automatically on stream errors with exponential backoff (starts at 2s, caps at 30s)
Container picker
For multi-container pods, the picker at the top of the toolbar lets you switch between containers. The first entry - All Containers - aggregates logs from every container in the pod, with each line prefixed by container name in a distinct colour.
Init containers and sidecars that have terminated do a one-shot fetch instead of perpetually reconnecting. The status indicator stays green as long as at least one container is actively streaming.
Multi-pod logs
For Deployment, StatefulSet, ReplicaSet, and DaemonSet detail views, the Logs tab opens an aggregator that streams from every backing pod. Each line is prefixed by pod name with a colour drawn from a 16-colour palette so you can visually distinguish sources.
Pod names in the prefix are clickable - they navigate to the source pod.
You can also reach this view by multi-selecting pods in the Pod list (⌘-click / shift-click) and clicking the Combined Logs (N) pill that appears.
Search & regex
The search field at the top of every log view filters lines in real time.
- Plain text - case-insensitive substring match
- Regex - toggle the
.*button and your query is treated as a regular expression - Counter -
12 / 47shows the active match index out of total matches - ↑ / ↓ buttons - jump between matches
- ⌘F - focus the search field
Matches are highlighted yellow; the currently-selected match gets a brighter accent.
Tail (follow)
The Tail toggle in the toolbar controls whether new lines auto-scroll to view:
- On - viewport snaps to the newest line as lines arrive (but only if you were already at the top - Kubius won’t yank you away from reading older logs)
- Off - new lines arrive but the viewport stays put
Tailing state is intentionally not captured by back/forward navigation - it’s a runtime preference, not a navigation state.
Refresh + new lines badge
- The Refresh button (circular arrow) re-issues the initial fetch so you can pull in the most recent buffer without restarting the stream.
- When you scroll away from the top and new lines arrive, a N new lines pill floats over the viewer. Click it to snap back to the newest line - useful when you’re investigating an older chunk and want to jump back without losing your reading place.
Floating windows
Click the Float button to detach the log view into its own borderless window. The detached window:
- Stays on top of every other window (toggle pin to revert to normal)
- Has a minimal toolbar - level picker, search, tail toggle, close button
- Can be dragged from any non-control area
- Closes with the X button or ⌘W
Useful for tailing one pod’s logs while debugging another resource .
Export
The Export button downloads the current buffer as a plain-text file. For multi-pod views the output retains the pod-name prefix on every line.
Log levels
Lines are coloured by detected log level (ERROR, WARN, DEBUG) using a heuristic match against the line text. Severity colours:
- Red - error
- Orange - warn
- Grey - debug
- Default - info or unmatched
Node logs
Open a node and - if the node actually serves logs - a Logs tab appears alongside Overview / Diagnostics / Conditions / Pods. Node host logs are read over the kubelet proxy (/api/v1/nodes/<node>/proxy/logs/…, which needs nodes/proxy RBAC), and Kubius probes for what’s available when you open the node:
/var/logfiles -syslog,messages,kern.log,kubelet.log,auth.log- only the ones the node actually lists are offered.- journald units -
kubelet,containerd- read via the Node Log Query API (?query=<unit>). This requires the kubelet’sNodeLogQueryfeature gate to be enabled.
The source dropdown is built from whatever the probe finds. If nothing is available, the Logs tab is hidden entirely rather than showing a permanently empty tab.
Why the tab is often missing on managed clusters
On the node OSes used by EKS (Amazon Linux 2023) and GKE (Container-Optimized OS), system, kernel, and kubelet logs go to systemd-journald, not flat /var/log files - so the file sources come back empty or 404. The journald sources would work, but the NodeLogQuery feature gate is usually off on managed clusters. When neither is available, there’s no Logs tab. To get the kernel OOM-kill record on these nodes you still need host access - see Diagnosing Node OOM.
No live tail - user-paced auto-refresh instead
Unlike pod logs, node logs cannot be streamed/followed over the Kubernetes API - neither the file endpoint nor the Node Log Query supports follow. So instead of a live stream, the node log viewer has:
- a Tail toggle that turns on auto-refresh, and
- an interval dropdown (every 1 / 2 / 3 / 5 / 10 / 30 / 60 seconds) so you control how often it re-pulls.
Each refresh re-fetches the latest lines in order. Pick a tight interval (1–2s) when watching a node actively misbehave, or a relaxed one to reduce load. Pod and container log tailing is unaffected - those remain true live streams.