Skip to main content
Check the engine directly in a standalone licensed deployment. This setup has no API container to serve /health.

HTTP health

Use /livez to check that the health service responds. Use /readyz to check that the engine can accept inference requests. In the model image, the engine serves both endpoints on port 8080:
Readiness returns HTTP 200 with ok when the engine is ready. It returns HTTP 503 during loading, quiet mode (after the engine receives SIGUSR2), or drain. Liveness can succeed while readiness fails. Use readiness to route traffic and liveness to decide on restarts, so a slow model load doesn’t trigger a restart.

gRPC health

On port 7463, the engine serves the standard grpc.health.v1.Health/Check and Watch methods. Check overall readiness with the empty service name, "". Send traffic when the result is SERVING and withdraw it when the result is NOT_SERVING. Install grpcurl and place the standard health schema at ./rime-protos/grpc/health/v1/health.proto. This command checks readiness on the private local listener:
Keep the schema argument. The engine does not expose reflection, so grpcurl needs the schema to make the request. See Engine protocols for synthesis schemas and client setup.

OpenTelemetry metrics

The Rime engine exposes these metrics:
  • rime.engine.active_inference_request
  • rime.engine.inference_concurrency_capacity
  • rime.engine.application_utilization
  • rime.engine.inference_admission_rejected
  • rime.engine.concurrent_pipeline
  • rime.engine.generated_audio_duration
  • rime.engine.gpu_load
  • rime.engine.initial_latency
  • rime.engine.invocation_request
  • rime.engine.unicode_scalar_value_count
  • rime.engine.stage.items_in
  • rime.engine.stage.items_out
  • rime.engine.stage.first_output_latency
The rime.engine.stage.* series carry a stage attribute. Set OTEL_COLLECTOR_PROTOCOL to grpc (recommended), http/protobuf, or http/json, and set OTEL_COLLECTOR_ENDPOINT to your collector endpoint:
The model does not set resource attributes. Use OTEL_RESOURCE_ATTRIBUTES to add them. The model also does not implement OpenTelemetry authentication, so run a collector sidecar when the upstream endpoint requires credentials. To expose the OpenTelemetry series for Prometheus, follow the Prometheus integration guide.

Logs

The model container writes one plain-text line per event to its standard output. Request text is not included by default: lines that describe a request carry text_chars, the length of the input, instead of the input itself. Set RIME_LOG_REQUEST_TEXT=true to include request text in those lines. Do this only where the container log stays inside a boundary that may hold end-user text, because anything reading the log, including a log forwarder, receives the text verbatim.
Set OTEL_LOGS_EXPORTER=otlp to have the model also send every log line to the collector named by OTEL_COLLECTOR_ENDPOINT, over OTEL_COLLECTOR_PROTOCOL. Both variables must be set as for metrics, or the switch exports nothing. The model sends each line as one OTLP log record: the line is the body, the log level is the severity, and request_id is an attribute on lines that belong to a request. The model sends logs nowhere else, and never to Rime.
Leave OTEL_LOGS_EXPORTER unset to keep logs on standard output only. The collector endpoint then carries metrics alone.

Histogram tuning

Metrics that emit histogram data use preconfigured bucket boundaries. Override them with the corresponding HISTOGRAM_BUCKETS_* environment variable. Add a separate suffix with HISTOGRAM_SUFFIX_* when you need to distinguish differently tuned series.

Initial latency

rime.engine.initial_latency is measured in milliseconds. Default bounds:
Example overrides:
The suffix produces rime.engine.initial_latency.tuned_120ms.

Generated audio duration

rime.engine.generated_audio_duration is measured in seconds. Default bounds:
Example overrides:
The suffix produces rime.engine.generated_audio_duration.tuned_3s.