This is documentation for the next version of Grafana Tempo documentation. For the latest stable release, go to the latest version.

Open source

Command line flags

Tempo provides various command-line flags to configure its behavior when starting the binary. This document serves as a reference for these flags.

Global flags

FlagDescriptionDefault
--versionPrint this build’s version information and exitfalse
--mutex-profile-fractionOverride default mutex profiling fraction0
--block-profile-thresholdOverride default block profiling threshold0
--config.fileConfiguration file to load
--config.expand-envWhether to expand environment variables in config filefalse
--config.verifyVerify configuration and exitfalse

Target flag

The deployment mode is determined by the runtime configuration target, or by using the -target flag on the command line. The default target is all, which runs all components in a single process (monolithic deployment mode).

FlagDescriptionDefault
--targetTarget module to runall

Valid target values:

TargetDescription
allMonolithic mode. Runs all components in a single process.
distributorReceives and distributes trace data to downstream components.
metrics-generatorGenerates metrics from ingested trace data.
querierQueries the backend storage for traces and metrics.
query-frontendProvides search API and splits queries for parallelism.
block-builderConsumes data from Kafka and writes blocks to backend storage.
backend-schedulerSchedules and coordinates backend query jobs across workers.
backend-workerExecutes query jobs assigned by the backend scheduler.
live-storeServes recently ingested data from Kafka for real-time queries.

Note

In Tempo 3.0, the ingester, compactor, and scalable-single-binary targets were removed as part of the new Tempo architecture.

Refer to the Plan your Tempo deployment documentation for information on deployment modes.

Authentication and multitenancy

FlagDescriptionDefault
--multitenancy.enabledSet to true to enable multitenancyfalse
--auth.enabledDeprecated. Use --multitenancy.enabled instead. Set to true to enable auth. This flag will be removed in a future release.false

HTTP and API settings

FlagDescriptionDefault
--http-api-prefixString prefix for all HTTP API endpoints""
--enable-go-runtime-metricsSet to true to enable all Go runtime metricsfalse
--shutdown-delayHow long to wait between SIGTERM and shutdown. After receiving SIGTERM, Tempo reports not-ready status via the /ready endpoint.0

Health check

FlagDescriptionDefault
--healthRun a health check against the /ready endpoint and exit. Returns exit code 0 if healthy, 1 if unhealthy.false
--health.urlURL to check when running a health checkhttp://localhost:3200/ready

The Tempo container image uses a distroless base image that doesn’t include a shell, curl, wget, or other utilities. This means the common Docker health check pattern HEALTHCHECK CMD curl -f http://localhost:3200/ready doesn’t work.

The --health flag provides a native alternative. It doesn’t require a Tempo configuration file, so it can be used directly in a HEALTHCHECK instruction:

dockerfile
HEALTHCHECK CMD ["/tempo", "--health"]

Kubernetes users typically don’t need this flag because they can configure httpGet readiness and liveness probes directly against the /ready endpoint.

Logging settings

FlagDescriptionDefault
--log.levelOnly log messages with the given severity or above. Valid levels: debug, info, warn, errorinfo
--log.formatOutput format for log messages. Valid formats: logfmt, jsonlogfmt

Server settings

FlagDescriptionDefault
--server.http-listen-portHTTP server listen port3200
--server.grpc-listen-portgRPC server listen port9095

Memberlist settings

FlagDescriptionDefault
--memberlist.host-portHost port to connect to memberlist cluster
--memberlist.bind-portPort for memberlist to communicate on7946
--memberlist.message-history-buffer-bytesSize in bytes for the message history buffer0

MCP server

FlagDescriptionDefault
--query-frontend.mcp-server.enabledSet to true to enable the MCP serverfalse

Tempo includes an MCP (Model Context Protocol) server that provides AI assistants and Large Language Models (LLMs) with direct access to distributed tracing data through TraceQL queries and other endpoints.

Refer to the Model Context Protocol (MCP) Server documentation for more information.

Module configuration

You can use additional flags to configure individual Tempo modules, such as the distributor, block-builder, live-store, querier, backend-scheduler, backend-worker, and their components. These flags follow a pattern like --<module>.<setting> and are documented in the configuration file format.

Use the configuration file approach described in the Configuration documentation. The documentation has a comprehensive list of all configuration options.

Usage examples

Start Tempo with a configuration file:

Bash
tempo --config.file=/etc/tempo/config.yaml

Start Tempo with a specific target:

Bash
tempo --target=distributor --config.file=/etc/tempo/config.yaml

Verify configuration without starting Tempo:

Bash
tempo --config.file=/etc/tempo/config.yaml --config.verify

Print version information:

Bash
tempo --version

Start Tempo with debug-level logging for troubleshooting:

Bash
tempo --config.file=/etc/tempo/config.yaml --log.level=debug

Use environment variable expansion in the config file, which lets you inject secrets or environment-specific values at startup:

Bash
tempo --config.file=/etc/tempo/config.yaml --config.expand-env

Start the distributor component on a custom HTTP port with JSON-formatted logs, typical for a microservices deployment behind a load balancer:

Bash
tempo --target=distributor \
  --config.file=/etc/tempo/config.yaml \
  --server.http-listen-port=3200 \
  --log.format=json

Start Tempo in monolithic mode with multitenancy enabled and a graceful shutdown delay of 30 seconds, allowing in-flight requests to complete during rolling updates:

Bash
tempo --config.file=/etc/tempo/config.yaml \
  --multitenancy.enabled \
  --shutdown-delay=30s

Run a health check against a custom URL:

Bash
tempo --health --health.url=http://localhost:3200/ready