diff --git a/proxyd/backend.go b/proxyd/backend.go
index 7907a0dc..2b9b7474 100644
--- a/proxyd/backend.go
+++ b/proxyd/backend.go
@@ -976,6 +976,7 @@ type WSProxier struct {
 	methodWhitelist *StringSet
 	readTimeout     time.Duration
 	writeTimeout    time.Duration
+	reqIdToMethod   map[string]string
 }
 
 func NewWSProxier(backend *Backend, clientConn, backendConn *websocket.Conn, methodWhitelist *StringSet) *WSProxier {
@@ -986,6 +987,7 @@ func NewWSProxier(backend *Backend, clientConn, backendConn *websocket.Conn, met
 		methodWhitelist: methodWhitelist,
 		readTimeout:     defaultWSReadTimeout,
 		writeTimeout:    defaultWSWriteTimeout,
+		reqIdToMethod:   make(map[string]string),
 	}
 }
 
@@ -1078,6 +1080,7 @@ func (w *WSProxier) clientPump(ctx context.Context, errC chan error) {
 			errC <- err
 			return
 		}
+		w.reqIdToMethod[GetReqID(ctx)] = req.Method
 	}
 }
 
@@ -1106,6 +1109,13 @@ func (w *WSProxier) backendPump(ctx context.Context, errC chan error) {
 		}
 
 		res, err := w.parseBackendMsg(msg)
+		method := w.reqIdToMethod[GetReqID(ctx)]
+		if method == "" {
+			method = MethodUnknown
+		} else {
+			delete(w.reqIdToMethod, GetReqID(ctx))
+		}
+
 		if err != nil {
 			var id json.RawMessage
 			if res != nil {
@@ -1123,7 +1133,7 @@ func (w *WSProxier) backendPump(ctx context.Context, errC chan error) {
 					"auth", GetAuthCtx(ctx),
 					"req_id", GetReqID(ctx),
 				)
-				RecordRPCError(ctx, w.backend.Name, MethodUnknown, res.Error)
+				RecordRPCError(ctx, w.backend.Name, method, res.Error)
 			} else {
 				log.Info(
 					"forwarded WS message to client",