grpc/grpc-go · error

error in clientRPCEvent method: %v

Error message

error in clientRPCEvent method: %v

What it means

validateLoggingEvents validates every entry in config.CloudLogging.ClientRPCEvents; if any method string in a client event's Methods list fails validateLogEventMethod (see error 210), it returns the failure wrapped as "error in clientRPCEvent method: <cause>". Identical root cause as 210 but specifically scoped to the client_rpc_events array.

Source

Thrown at gcp/observability/config.go:97

			if exclude {
				return errors.New("cannot have exclude and a '*' wildcard")
			}
			continue
		}
		if err := validateMethodString(method); err != nil {
			return fmt.Errorf("invalid method string: %v, err: %v", method, err)
		}
	}
	return nil
}

func validateLoggingEvents(config *config) error {
	if config.CloudLogging == nil {
		return nil
	}
	for _, clientRPCEvent := range config.CloudLogging.ClientRPCEvents {
		if err := validateLogEventMethod(clientRPCEvent.Methods, clientRPCEvent.Exclude); err != nil {
			return fmt.Errorf("error in clientRPCEvent method: %v", err)
		}
	}
	for _, serverRPCEvent := range config.CloudLogging.ServerRPCEvents {
		if err := validateLogEventMethod(serverRPCEvent.Methods, serverRPCEvent.Exclude); err != nil {
			return fmt.Errorf("error in serverRPCEvent method: %v", err)
		}
	}
	return nil
}

// unmarshalAndVerifyConfig unmarshals a json string representing an
// observability config into its internal go format, and also verifies the
// configuration's fields for validity.
func unmarshalAndVerifyConfig(rawJSON json.RawMessage) (*config, error) {
	var config config
	if err := json.Unmarshal(rawJSON, &config); err != nil {
		return nil, fmt.Errorf("error parsing observability config: %v", err)
	}

View on GitHub (pinned to 03255a9237)

Solutions

  1. Apply the fixes for error 210 to every entry under client_rpc_events.
  2. Run the config through a validator that calls validateLogEventMethod-equivalent logic before deploying.
  3. If using Exclude, remember "*" is not allowed with Exclude; replace with explicit method lists.

Example fix

// before
{ "cloud_logging": { "client_rpc_events": [{ "methods": ["*/Bar"] }] } }

// after
{ "cloud_logging": { "client_rpc_events": [{ "methods": ["goo.Foo/Bar"] }] } }
Defensive patterns

Strategy: validation

Validate before calling

func validateClientRPCEvents(events []clientRPCEvents) error {
    for _, e := range events {
        if err := validateLogEventMethod(e.Methods, e.Exclude); err != nil {
            return fmt.Errorf("client event: %w", err)
        }
    }
    return nil
}

Try / catch

if err := validateLoggingEvents(cfg); err != nil {
    return fmt.Errorf("observability config: %w", err)
}

Prevention

When it happens

Trigger: GRPC_GCP_OBSERVABILITY_CONFIG (or the *_FILE) contains a client_rpc_events entry whose methods list has an invalid pattern (leading slash, missing/extra slash, empty method, or service wildcard).

Common situations: Mirroring the gRPC method path (with leading slash) into the observability config; mixing the wire format and the config format across environments.

Related errors


AI-assisted analysis of grpc/grpc-go@03255a9237 (2026-08-07). Data as JSON: /api/errors/b87a954e7aade250. Report an issue: GitHub.