Network Diagnostics¶
A self-contained, fully open-source observability stack for a Gridweave cluster — every service log, worker/job pod log, service up/down history, and GPU/host metrics — surfaced in the admin Diagnostics page so an operator never has to SSH into the master.
The browser only ever talks to platform_service; the diagnostics router
(platform_service/routers/diagnostics.py, prefix /v1/diagnostics) proxies
the two backends below and forces require_admin. None of these services
publish a host port.
Components (all Apache-2.0 / permissive)¶
| Service | Image | Role |
|---|---|---|
| VictoriaLogs | victoriametrics/victoria-logs |
log store + LogsQL query + live /tail (7d retention) |
| Fluent Bit | fluent/fluent-bit |
tails every container's JSON log → VictoriaLogs |
| Prometheus | prom/prometheus |
metric store + query (15d retention) |
| cAdvisor | cadvisor/cadvisor |
per-container CPU / mem / up → Prometheus |
| node-exporter | prometheus/node-exporter |
master host metrics → Prometheus |
| DCGM exporter | nvidia/dcgm-exporter |
per-GPU util / temp / VRAM (k8s DaemonSet on GPU nodes) |
Data flow¶
docker container logs ─┐
├─ Fluent Bit (master, docker) ─┐
k3s pod logs ──────────┘ Fluent Bit (DaemonSet) ─────┴─→ VictoriaLogs ─┐
├─→ platform /v1/diagnostics → admin UI
cAdvisor / node-exporter (master) ─┐ │
DCGM exporter (GPU nodes) ─────────┴────────────────────→ Prometheus ────┘
Service names enrich each log line (enrich.lua strips the gridweave-
prefix / parses the pod name), so the UI can filter by service, node, or job.
Deploy — nothing extra to run¶
The five services are part of the main docker/deploy/docker-compose.yml, so
the normal deploy.sh brings them up with everything else (configs here are
bind-mounted in). The platform reaches victorialogs:9428 and
prometheus:9090 over gridweave-network via the compose service aliases —
no env vars needed (VICTORIALOGS_URL / PROMETHEUS_URL override the defaults
if you relocate them).
deploy.sh also applies the k8s DaemonSets:
kubectl apply -f diagnostics/k8s/ # fluent-bit (pod logs) + dcgm (GPU metrics)
- fluent-bit runs on every node, shipping pod logs to the master's mesh IP
10.100.0.1:9428. - dcgm-exporter runs only on GPU nodes (
nodeSelector gridweave.io/gpu-vendor=nvidia), exposing metrics on<mesh-ip>:9400.
GPU nodes are scraped automatically: when kuberay_service enrolls an NVIDIA
node (/register), it writes a Prometheus file_sd target
(prometheus/targets/dcgm-<node>.json) and removes it on /disconnect —
event-driven, no restart, no sweep. The targets dir is bind-mounted into both
the kuberay (rw) and prometheus (ro) containers.
On rate-limited / air-gapped GPU nodes, relay the
fluent-bitanddcgm-exporterimages via the master (docker save | ssh … docker load); the manifests useimagePullPolicy: IfNotPresent.
Retention¶
Logs 7d (VictoriaLogs -retentionPeriod), metrics 15d (Prometheus
--storage.tsdb.retention.time). Both persist in the named volumes
gridweave_vlogs / gridweave_prometheus, which survive a re-deploy.