prometheus/node_exporter · error

unable to call supervisord

Error message

unable to call supervisord: %w

What it means

The supervisord collector's Update could not complete an XML-RPC call to the supervisord server (supervisor.getAllProcessInfo). This covers connection refusal, timeouts, HTTP errors, and malformed XML-RPC responses — supervisord is unreachable or not answering RPCs.

Solutions

  1. Verify supervisord is running and its XML-RPC server (unix_http_server or inet_http_server) is enabled in supervisord.conf.
  2. Check --collector.supervisord.url points at the correct socket/URL and the exporter has permission on the unix socket.
  3. Test manually: `supervisorctl status` from the same user should work.
  4. Disable the supervisord collector if the server is intentionally absent.
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at collector/supervisord.go:138 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of prometheus/node_exporter@17ddd77c59 (2026-09-07). Data as JSON: /api/errors/14bbc02d9efffa0d. Report an issue: GitHub.

Appendix: source

Thrown at collector/supervisord.go:138

func (c *supervisordCollector) Update(ch chan<- prometheus.Metric) error {
	var info struct {
		Name          string `xmlrpc:"name"`
		Group         string `xmlrpc:"group"`
		Start         int    `xmlrpc:"start"`
		Stop          int    `xmlrpc:"stop"`
		Now           int    `xmlrpc:"now"`
		State         int    `xmlrpc:"state"`
		StateName     string `xmlrpc:"statename"`
		SpawnErr      string `xmlrpc:"spanerr"`
		ExitStatus    int    `xmlrpc:"exitstatus"`
		StdoutLogfile string `xmlrcp:"stdout_logfile"`
		StderrLogfile string `xmlrcp:"stderr_logfile"`
		PID           int    `xmlrpc:"pid"`
	}

	res, err := xrpc.Call("supervisor.getAllProcessInfo")
	if err != nil {
		return fmt.Errorf("unable to call supervisord: %w", err)
	}

	for _, p := range res.(xmlrpc.Array) {
		for k, v := range p.(xmlrpc.Struct) {
			switch k {
			case "name":
				info.Name = v.(string)
			case "group":
				info.Group = v.(string)
			case "start":
				info.Start = v.(int)
			case "stop":
				info.Stop = v.(int)
			case "now":
				info.Now = v.(int)
			case "state":
				info.State = v.(int)
			case "statename":

View on GitHub (pinned to 17ddd77c59)