henrygd/beszel · error

no configured GPU collectors are available

Error message

no configured GPU collectors are available

What it means

During GPUManager initialization, if GPU_COLLECTOR is explicitly set, the manager only starts collectors from that priority list. This error is returned when zero of the explicitly configured collectors could be started, i.e. the operator forced collectors that are unavailable on this host. It aborts GPU monitoring startup.

Source

Thrown at agent/gpu.go:772

func NewGPUManager() (*GPUManager, error) {
	if skipGPU, _ := utils.GetEnv("SKIP_GPU"); skipGPU == "true" {
		return nil, nil
	}
	var gm GPUManager
	caps := gm.discoverGpuCapabilities()
	gm.GpuDataMap = make(map[string]*system.GPUData)

	// Jetson devices should always use tegrastats (ignore GPU_COLLECTOR).
	if caps.hasTegrastats {
		gm.startTegraStatsCollector("3700")
		return &gm, nil
	}

	// Respect explicit collector selection before capability auto-detection.
	if collectorConfig, ok := utils.GetEnv("GPU_COLLECTOR"); ok && strings.TrimSpace(collectorConfig) != "" {
		priorities := parseCollectorPriority(collectorConfig)
		if gm.startCollectorsByPriority(priorities, caps) == 0 {
			return nil, fmt.Errorf("no configured GPU collectors are available")
		}
		return &gm, nil
	}

	if !hasAnyGpuCollector(caps) {
		return nil, fmt.Errorf(noGPUFoundMsg)
	}

	// auto-detect and start collectors when GPU_COLLECTOR is unset.
	if gm.startCollectorsByPriority(gm.resolveLegacyCollectorPriority(caps), caps) == 0 {
		return nil, fmt.Errorf(noGPUFoundMsg)
	}

	return &gm, nil
}

View on GitHub (pinned to b38fb7dafa)

Solutions

  1. Check GPU_COLLECTOR spelling against the supported collector identifiers (nvtop, nvidia-smi, rocm, intel, macmon, powermetrics, tegrastats)
  2. Install the binaries for the configured collectors or remove GPU_COLLECTOR to enable auto-detection
  3. Verify the host actually has GPUs matching the configured collectors
  4. Inside containers, ensure the GPU device + tool are present in the image and device is passed through

Example fix

// before: forces collectors absent on this host
GPU_COLLECTOR=intel_gpu_top
// after: either install the tool or let auto-detection choose
unset GPU_COLLECTOR  # or install intel-gpu-tools
Defensive patterns

Strategy: validation

Validate before calling

// validate GPU_COLLECTOR against available tools before starting the agent
for _, c := range strings.Split(os.Getenv("GPU_COLLECTOR"), ",") {
    if _, err := exec.LookPath(strings.TrimSpace(c)); err != nil {
        log.Warn("configured GPU collector missing", "collector", c)
    }
}

Try / catch

gm, err := newGPUManager()
if err != nil && strings.Contains(err.Error(), "no configured GPU collectors") {
    log.Warn("GPU monitoring disabled: configured collectors unavailable")
    return
}

Prevention

When it happens

Trigger: GPU_COLLECTOR env var is set (e.g. 'nvtop,intel') but startCollectorsByPriority returns 0 — none of the named binaries exist, none have the required capabilities, or all fail their initial collection check.

Common situations: GPU_COLLECTOR copied from another machine's config where different GPUs/tools exist; typo in collector name (e.g. 'nvidia' instead of the expected identifier); tools not installed in a containerized agent image; missing capabilities in restricted environments.

Related errors


AI-assisted analysis of henrygd/beszel@b38fb7dafa (2026-08-31). Data as JSON: /api/errors/6a6ce8fa0a43dd95. Report an issue: GitHub.