grpc/grpc-go · error

error in serverRPCEvent method

Error message

error in serverRPCEvent method: %v

What it means

Wrapping error 242: at least one entry in a server_rpc_events[].methods list failed validation. Identical in shape to the client-side error but produced when validateLoggingEvents iterates ServerRPCEvents (incoming RPC filters).

Solutions

  1. Locate the server_rpc_events entry in the error and correct that methods string to <package>.<Service>/<Method>.
  2. For whole-service coverage use "<package>.<Service>/*"; for everything use "*".
  3. Add a CI check that runs the observability config JSON through validateMethodString before deploy.
  4. Restart the process after fixing the config.

Example fix

// before
"server_rpc_events":[{"methods":["*/Baz"]}]

// after
"server_rpc_events":[{"methods":["*"]}]
Defensive patterns

Strategy: validation

Validate before calling

for _, ev := range cfg.CloudLogging.ServerRPCEvents {
    for _, m := range ev.Methods {
        if m == "*" && ev.Exclude { return errors.New("exclude + '*' not allowed") }
        if m != "*" { if err := validateMethodString(m); err != nil { return err } }
    }
}

Try / catch

if err := observability.Start(ctx); err != nil {
    if strings.Contains(err.Error(), "serverRPCEvent method") {
        return fmt.Errorf("fix server_rpc_events entry: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: A cloud_logging.server_rpc_events item has a malformed methods entry (leading slash, missing/duplicate slash, empty method, or "*/method"). Emitted during observability.Start.

Common situations: Same authoring mistakes as the client variant, applied to server-side filters; copy-pasting a serviceWildcard pattern that the validator rejects; using a bare service name to mean 'whole service'.

Related errors


AI-assisted analysis of grpc/grpc-go@0c51461d27 (2026-08-11). Data as JSON: /api/errors/b5ae0c2da82e6cd3. Report an issue: GitHub.

Appendix: source

Thrown at gcp/observability/config.go:102

		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)
	}
	if err := validateLoggingEvents(&config); err != nil {
		return nil, fmt.Errorf("error parsing observability config: %v", err)
	}
	if config.CloudTrace != nil && (config.CloudTrace.SamplingRate > 1 || config.CloudTrace.SamplingRate < 0) {
		return nil, fmt.Errorf("error parsing observability config: invalid cloud trace sampling rate %v", config.CloudTrace.SamplingRate)

View on GitHub (pinned to 0c51461d27)