{"record":{"id":"b4f069318ecbe684","repo":"hashicorp/nomad","slug":"unknown-nomad-server-s","errorCode":null,"errorMessage":"unknown nomad server %s","messagePattern":"unknown nomad server (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nomad/client_agent_endpoint.go","lineNumber":413,"sourceCode":"\t\tisLeader, remoteLeader := a.srv.getLeader()\n\t\tif !isLeader && remoteLeader != nil {\n\t\t\ttarget = remoteLeader\n\t\t} else if !isLeader && remoteLeader == nil {\n\t\t\treturn nil, structs.ErrNoLeader\n\t\t} else if isLeader {\n\t\t\t// This server is current leader do not forward\n\t\t\treturn nil, nil\n\t\t}\n\t} else {\n\t\ttarget, err = a.srv.getServer(region, serverID)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Unable to find a server\n\tif target == nil {\n\t\treturn nil, fmt.Errorf(\"unknown nomad server %s\", serverID)\n\t}\n\n\t// ServerID is this current server,\n\t// No need to forward request\n\tif target.Name == a.srv.LocalMember().Name {\n\t\treturn nil, nil\n\t}\n\n\treturn target, nil\n}\n\nfunc (a *Agent) forwardMonitorClient(conn io.ReadWriteCloser, args any, encoder *codec.Encoder, decoder *codec.Decoder, nodeID string, endpoint string) {\n\t// Get the Connection to the client either by fowarding to another server\n\t// or creating direct stream\n\tstate, srv, err := a.findClientConn(nodeID)\n\tif err != nil {\n\t\thandleStreamResultError(err, new(int64(500)), encoder)\n\t\treturn","sourceCodeStart":395,"sourceCodeEnd":431,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/nomad/client_agent_endpoint.go#L395-L431","documentation":"forwardFor locates a target server by server ID among the local region's member list. If no server with the given ID exists in the LAN Serf membership, target stays nil and this error is returned. It means the requested server name doesn't match any known Nomad server.","triggerScenarios":"Calling Profile, monitor, monitorExport, or Host with a ServerID/ServerName parameter that does not match any member returned by the local memberlist — the exact case in forwardFor when target == nil after scanning members.","commonSituations":"Typo in server name when selecting a node for profiling/logs; targeting a server that was decommissioned or replaced (names regenerate); querying a region whose member list doesn't include the target; DNS vs serf name confusion (serf name is not the hostname).","solutions":["List valid targets with `nomad server members` (or Members() API) and use the exact serf Name of a live server.","Retry after new servers join; a freshly started server may not yet be visible.","If the server was replaced, target the new server's name instead of the old ID."],"exampleFix":"// before\nreply, err := endpoint.Profile(args) // args.ServerID = \"old-server\" (decommissioned)\n// after\nmembers, _ := client.Agent().Members()\nargs.ServerID = pickLiveServer(members) // e.g. \"ip-10-0-0-5.node.dc1\"","handlingStrategy":"validation","validationCode":"members, err := client.Agent().Members()\nif err != nil { return err }\nvalid := false\nfor _, m := range members.Members {\n    if m.Name == serverID { valid = true; break }\n}\nif !valid { return fmt.Errorf(\"server %q not in member list\", serverID) }","typeGuard":null,"tryCatchPattern":"target, err := forwardFor(ctx, args, serverID)\nif err != nil && strings.HasPrefix(err.Error(), \"unknown nomad server\") {\n    // refresh member list and retry with a live server name\n}","preventionTips":["Select server targets from `nomad server members`, not hostnames.","Re-resolve server names after upgrades/decommissions; serf names change on replacement.","Refresh the member list before each targeted agent RPC."],"tags":["nomad","rpc","server-membership","routing"],"backgroundTag":"unknown-server-target","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}