<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Set up Tempo on Grafana Labs</title><link>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/</link><description>Recent content in Set up Tempo on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/index.xml" rel="self" type="application/rss+xml"/><item><title>Plan your Tempo deployment</title><link>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/plan/</link><pubDate>Thu, 09 Apr 2026 14:59:14 +0000</pubDate><guid>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/plan/</guid><content><![CDATA[&lt;h1 id=&#34;plan-your-tempo-deployment&#34;&gt;Plan your Tempo deployment&lt;/h1&gt;
&lt;p&gt;To plan your Grafana Tempo deployment, you should:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Identify your use case
Decide what you need from Tempo. For example, consider if you want a basic installation, horizontal scalability, multi-tenancy, or advanced data storage. Your use case determines the deployment architecture and resource requirements.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Estimate tracing data volume
Assess the amount of tracing data your environment will generate. This helps you size your cluster and storage.
Refer to the &lt;a href=&#34;./size/&#34;&gt;Size your cluster&lt;/a&gt; section for guidance on calculating storage and performance needs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose a deployment mode.
Tempo supports monolithic and microservices deployment modes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use the monolithic mode for simple, single-tenant environments or smaller workloads.&lt;/li&gt;
&lt;li&gt;Use the microservices mode for large-scale, multi-tenant, or highly available deployments.
Review the &lt;a href=&#34;./deployment-modes/&#34;&gt;Deployment modes documentation&lt;/a&gt; to compare options and select the best fit for your use case.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;By following these recommendations, you can plan a Tempo deployment that matches your operational requirements and scales with your tracing data.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Once you&amp;rsquo;ve planned your deployment, you can 
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/&#34;&gt;Deploy your Tempo instance&lt;/a&gt; using the deployment mode you selected.&lt;/p&gt;
]]></content><description>&lt;h1 id="plan-your-tempo-deployment">Plan your Tempo deployment&lt;/h1>
&lt;p>To plan your Grafana Tempo deployment, you should:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Identify your use case
Decide what you need from Tempo. For example, consider if you want a basic installation, horizontal scalability, multi-tenancy, or advanced data storage. Your use case determines the deployment architecture and resource requirements.&lt;/p></description></item><item><title>Deploy Tempo</title><link>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/</link><pubDate>Thu, 09 Apr 2026 14:59:14 +0000</pubDate><guid>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/</guid><content><![CDATA[&lt;h1 id=&#34;deploy-tempo&#34;&gt;Deploy Tempo&lt;/h1&gt;
&lt;p&gt;Tempo can be easily deployed through a number of tools, including Helm, Tanka, Kubernetes, and Docker.&lt;/p&gt;
&lt;p&gt;The following procedures provide example Tempo deployments that you can use as a starting point.&lt;/p&gt;
&lt;p&gt;Tempo can be deployed in a number of ways, depending on your needs and environment. You can deploy Tempo in a monolithic mode or in a microservices mode.&lt;/p&gt;
&lt;p&gt;You can also use Docker to deploy Tempo using &lt;a href=&#34;https://github.com/grafana/tempo/tree/main/example/docker-compose&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the Docker examples&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Grafana Tempo does not come with any included authentication layer. You must run an authenticating reverse proxy in front of your services to prevent unauthorized access to Tempo (for example, nginx). 
    &lt;a href=&#34;/docs/tempo/v2.10.x/operations/authentication/&#34;&gt;Manage authentication&lt;/a&gt; for more details&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;deploy-locally&#34;&gt;Deploy locally&lt;/h2&gt;
&lt;p&gt;Monolithic mode (single binary) is commonly used for a local installation, testing, or small-scale deployments.
This mode can be deployed using a pre-compiled binary, OS-specific packaging, or Docker image.
While it&amp;rsquo;s possible to deploy monolithic mode in a Kubernetes cluster, it is not recommended for production use.&lt;/p&gt;
&lt;p&gt;You can deploy Tempo locally using the monolithic mode. You can use the &lt;a href=&#34;https://github.com/grafana/tempo/tree/main/example/docker-compose&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Docker examples&lt;/a&gt; or you can use the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/locally/linux/&#34;&gt;Linux example&lt;/a&gt; (monolithic) to deploy Tempo on a Linux host.&lt;/p&gt;
&lt;p&gt;For more information, refer 
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/locally/&#34;&gt;Deploy Tempo locally&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;deploy-using-kubernetes&#34;&gt;Deploy using Kubernetes&lt;/h2&gt;
&lt;p&gt;Kubernetes deployment examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/kubernetes/helm-chart/&#34;&gt;Deploy with Helm&lt;/a&gt; (microservices and monolithic)&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/kubernetes/operator/&#34;&gt;Deploy with Tempo Operator&lt;/a&gt; (microservices)&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/kubernetes/tanka/&#34;&gt;Deploy on Kubernetes using Tanka&lt;/a&gt; (microservices)&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The Tanka and Helm examples are equivalent.
They are both provided for people who prefer different configuration mechanisms.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;For more information, refer to 
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/kubernetes/&#34;&gt;Deploy Tempo on Kubernetes&lt;/a&gt;.&lt;/p&gt;
]]></content><description>&lt;h1 id="deploy-tempo">Deploy Tempo&lt;/h1>
&lt;p>Tempo can be easily deployed through a number of tools, including Helm, Tanka, Kubernetes, and Docker.&lt;/p>
&lt;p>The following procedures provide example Tempo deployments that you can use as a starting point.&lt;/p></description></item><item><title>Example setups</title><link>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/example-demo-app/</link><pubDate>Thu, 09 Apr 2026 14:59:14 +0000</pubDate><guid>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/example-demo-app/</guid><content><![CDATA[&lt;h1 id=&#34;example-setups&#34;&gt;Example setups&lt;/h1&gt;
&lt;p&gt;The following examples show various deployment and configuration options using trace generators so you can get started experimenting with Tempo without an existing application.&lt;/p&gt;
&lt;p&gt;For more information about Tempo setup and configuration, see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/&#34;&gt;Set up Tempo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/&#34;&gt;Tempo configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are interested in instrumentation, refer to &lt;a href=&#34;../../instrument-send/&#34;&gt;Tempo instrumentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;docker-compose&#34;&gt;Docker Compose&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://github.com/grafana/tempo/tree/main/example/docker-compose&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;docker-compose examples&lt;/a&gt; are simpler and designed to show minimal configuration.&lt;/p&gt;
&lt;p&gt;Some of the examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trace discovery with Loki&lt;/li&gt;
&lt;li&gt;Basic Grafana Alloy/OpenTelemetry Setup&lt;/li&gt;
&lt;li&gt;Various Backends (S3/GCS/Azure)&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v2.10.x/docker-example/&#34;&gt;K6 with Traces&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a great place to get started with Tempo and learn about various trace discovery flows.&lt;/p&gt;
&lt;h2 id=&#34;helm&#34;&gt;Helm&lt;/h2&gt;
&lt;p&gt;The Helm &lt;a href=&#34;https://github.com/grafana/tempo/tree/main/example/helm&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;example&lt;/a&gt; shows a complete microservice based deployment.
There are monolithic mode and microservices examples.&lt;/p&gt;
&lt;p&gt;To install Tempo on Kubernetes, use the &lt;a href=&#34;/docs/helm-charts/tempo-distributed/next/&#34;&gt;Deploy on Kubernetes using Helm&lt;/a&gt; procedure.&lt;/p&gt;
&lt;h2 id=&#34;tanka&#34;&gt;Tanka&lt;/h2&gt;
&lt;p&gt;To view an example of a complete microservice-based deployment, this &lt;a href=&#34;https://github.com/grafana/tempo/tree/main/example/tk&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Jsonnet based example&lt;/a&gt; shows a complete microservice based deployment.
There are monolithic mode and microservices examples.&lt;/p&gt;
&lt;p&gt;To learn how to set up a Tempo cluster, refer to 
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/deploy/kubernetes/tanka/&#34;&gt;Deploy on Kubernetes with Tanka&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;introduction-to-metrics-logs-traces-and-profiles-example&#34;&gt;Introduction to Metrics, Logs, Traces, and Profiles example&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://github.com/grafana/intro-to-mltp&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Introduction to Metrics, Logs, Traces, and Profiles in Grafana&lt;/a&gt; provides a self-contained environment for learning about Mimir, Loki, Tempo, Pyroscope, and Grafana.
It includes detailed explanations of each component and annotated configurations for each component.&lt;/p&gt;
&lt;p&gt;The README.md file explains how to download and &lt;a href=&#34;https://github.com/grafana/intro-to-mltp#running-the-demonstration-environment&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;start the environment&lt;/a&gt;, including instructions for using Grafana Cloud and Grafana Alloy collector.&lt;/p&gt;
]]></content><description>&lt;h1 id="example-setups">Example setups&lt;/h1>
&lt;p>The following examples show various deployment and configuration options using trace generators so you can get started experimenting with Tempo without an existing application.&lt;/p></description></item><item><title>Validate deployment</title><link>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/test/</link><pubDate>Thu, 09 Apr 2026 14:59:14 +0000</pubDate><guid>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/test/</guid><content><![CDATA[&lt;!-- This page is not finished. It&#39;s hidden from the published doc site by draft: true. --&gt;
&lt;h1 id=&#34;validate-your-tempo-deployment&#34;&gt;Validate your Tempo deployment&lt;/h1&gt;
&lt;p&gt;To test your Tempo deployment, select one of the procedures below to test your Tempo deployment:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/test/test-monolithic-local/&#34;&gt;Validate your local Tempo deployment&lt;/a&gt;&lt;br&gt;Instructions for validating your local Tempo deployment.&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/test/set-up-test-app/&#34;&gt;Validate Kubernetes deployment using a test application&lt;/a&gt;&lt;br&gt;Validate your Tempo deployment on Kubernetes.&lt;/li&gt;&lt;/ul&gt;
&lt;!-- Update these steps before publishing. They aren&#39;t complete.
Follow these steps to ensure that traces are being sent and received correctly.
This guide assumes you have already set up a Tempo instance and have Grafana configured to query it.

For additional information, refer to [Push spans with HTTP](https://grafana.com/docs/tempo/&lt;TEMPO_VERSION&gt;/operations/push-spans-with-http/).

If you are using Cloud Traces, refer to [Set up Cloud Traces](https://grafana.com/docs/grafana-cloud/send-data/traces/set-up/).

## Before you begin


## Test using the Tempo CLI
To test your Tempo deployment, you can use the Tempo CLI to push traces to your Tempo instance.
The Tempo CLI is a command-line tool that allows you to interact with your Tempo instance and perform various operations, such as pushing traces, querying traces, and more.

### Install the Tempo CLI
You can install the Tempo CLI by following the instructions in the [Tempo CLI documentation](https://grafana.com/docs/tempo/latest/operations/cli/).

### Push traces to Tempo

To push traces to your Tempo instance, you can use the `tempo push` command. For example, to push a trace with a specific trace ID and span ID, you can use the following command:
```bash
tempo push --trace-id &lt;TRACE_ID&gt; --span-id &lt;SPAN_ID&gt; --endpoint http://&lt;TEMPO-DISTRIBUTOR-SERVICE&gt;:&lt;HTTP-LISTEN-PORT&gt;
```
Replace `&lt;TRACE_ID&gt;` and `&lt;SPAN_ID&gt;` with the actual trace ID and span ID you want to push, and `&lt;TEMPO-DISTRIBUTOR-SERVICE&gt;` and `&lt;HTTP-LISTEN-PORT&gt;` with the appropriate values for your Tempo instance.


1. **Use `curl` to Query Tempo**: You can use `curl` to query the Tempo API and check if traces are being received. For example:
   ```bash
   curl -G http://&lt;TEMPO-QUERY-FRONTEND-SERVICE&gt;:&lt;HTTP-LISTEN-PORT&gt;/api/traces
   ```


## Test using Grafana

You can use Grafana to check if traces are sent and received.

### Test if traces are sent

To test if traces are being sent to Tempo, you can use the following methods:


2. **Use OpenTelemetry Collector**: If you have an OpenTelemetry Collector configured, you can check its logs to see if it is successfully exporting traces to Tempo. Ensure that the collector is configured with the correct endpoint for Tempo.

3. **Use Grafana Explore**: Navigate to the **Explore** section in Grafana and select the Tempo data source. You can run a query to see if traces are being returned.


### Test if traces are received

To test if traces are being received by Tempo, you can use the following methods:

1. **Grafana Explore**: Navigate to the **Explore** section in Grafana and select the Tempo data source. You can run a query to see if traces are being returned.
2. **Use `curl` to Query Tempo**: You can use `curl` to query the Tempo API and check if traces are being returned. For example:
   ```bash
   curl -G http://&lt;TEMPO-QUERY-FRONTEND-SERVICE&gt;:&lt;HTTP-LISTEN-PORT&gt;/api/traces
   ```
4. **Use OpenTelemetry Collector**: If you have an OpenTelemetry Collector configured, you can check its logs to see if it is successfully exporting traces to Tempo. Ensure that the collector is configured with the correct endpoint for Tempo.
5. **Check Grafana Logs**: Look for logs in the Grafana instance that indicate traces are being returned from Tempo. You can find these logs in the Grafana UI under **Configuration** &gt; **Logs**.

--&gt;
]]></content><description>&lt;!-- This page is not finished. It's hidden from the published doc site by draft: true. -->
&lt;h1 id="validate-your-tempo-deployment">Validate your Tempo deployment&lt;/h1>
&lt;p>To test your Tempo deployment, select one of the procedures below to test your Tempo deployment:&lt;/p></description></item><item><title>Upgrade your Tempo installation</title><link>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/upgrade/</link><pubDate>Thu, 09 Apr 2026 14:59:14 +0000</pubDate><guid>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/upgrade/</guid><content><![CDATA[&lt;h1 id=&#34;upgrade-your-tempo-installation&#34;&gt;Upgrade your Tempo installation&lt;/h1&gt;
&lt;!-- vale Grafana.We = NO --&gt;
&lt;!-- vale Grafana.Will = NO --&gt;
&lt;!-- vale Grafana.Timeless = NO --&gt;
&lt;p&gt;You can upgrade a Tempo installation to the next version.
However, any release has the potential to have breaking changes.
We recommend testing in a non-production environment prior to rolling these changes to production.&lt;/p&gt;
&lt;p&gt;The upgrade process changes for each version, depending upon the changes made for the subsequent release.&lt;/p&gt;
&lt;p&gt;This upgrade guide applies to on-premise installations and not for Grafana Cloud.&lt;/p&gt;
&lt;p&gt;For detailed information about any release, refer to the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/release-notes/&#34;&gt;Release notes&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-tip&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Tip&lt;/p&gt;&lt;p&gt;You can check your configuration options using the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/api_docs/#status&#34;&gt;&lt;code&gt;status&lt;/code&gt; API endpoint&lt;/a&gt; in your Tempo installation.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;upgrade-to-tempo-210&#34;&gt;Upgrade to Tempo 2.10&lt;/h2&gt;
&lt;p&gt;When upgrading to Tempo 2.10, be aware of these considerations and breaking changes.&lt;/p&gt;
&lt;p&gt;When 
    &lt;a href=&#34;/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/upgrade/&#34;&gt;upgrading&lt;/a&gt; to Tempo 2.10, be aware of these considerations and breaking changes.&lt;/p&gt;
&lt;h3 id=&#34;busybox-removed-from-tempo-image&#34;&gt;Busybox removed from Tempo image&lt;/h3&gt;
&lt;p&gt;The Tempo container image no longer includes busybox. This change reduces the image size and attack surface, preventing future busybox-related vulnerabilities from affecting Tempo deployments. [&lt;a href=&#34;https://github.com/grafana/tempo/pull/5717&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 5717&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;The image switched from &lt;code&gt;gcr.io/distroless/static-debian12:debug&lt;/code&gt;, which includes busybox, to &lt;code&gt;gcr.io/distroless/static-debian12&lt;/code&gt;, which doesn&amp;rsquo;t. The busybox shell and utilities are no longer available inside the running container.&lt;/p&gt;
&lt;p&gt;You can no longer &lt;code&gt;exec&lt;/code&gt; into the Tempo container with a shell. Commands like &lt;code&gt;kubectl exec -it &amp;lt;pod&amp;gt; -- sh&lt;/code&gt; or &lt;code&gt;docker exec -it &amp;lt;container&amp;gt; sh&lt;/code&gt; will fail.&lt;/p&gt;
&lt;p&gt;To debug a running Tempo container, use one of these alternatives:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes ephemeral debug containers (&lt;code&gt;kubectl debug&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Docker Desktop or other container runtime tools that support shell injection for distroless images&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have custom Docker Compose files or scripts that use the Tempo image for shell operations (such as running &lt;code&gt;chown&lt;/code&gt; in an init container), update them to use a separate &lt;code&gt;busybox:latest&lt;/code&gt; image for those tasks.&lt;/p&gt;
&lt;p&gt;Tempo&amp;rsquo;s runtime behavior, configuration options, and APIs are unchanged.&lt;/p&gt;
&lt;h3 id=&#34;vparquet-format-changes&#34;&gt;vParquet format changes&lt;/h3&gt;
&lt;p&gt;This release includes breaking changes to vParquet block format support and deprecates older formats ahead of Tempo 3.0.&lt;/p&gt;
&lt;p&gt;In preparation for Tempo 3.0, make sure you&amp;rsquo;re using vParquet4 or higher.&lt;/p&gt;
&lt;h4 id=&#34;enable-vparquet5-optional&#34;&gt;Enable vParquet5 (optional)&lt;/h4&gt;
&lt;p&gt;vParquet5 is now production-ready and available as an optional upgrade. vParquet4 remains the default block format. [&lt;a href=&#34;https://github.com/grafana/tempo/pull/6219&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 6219&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;To enable vParquet5, set the block version in your 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/parquet/&#34;&gt;storage configuration&lt;/a&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;storage:
  trace:
    block:
      version: vParquet5&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Once enabled, Tempo writes new blocks in vParquet5 format while continuing to read existing vParquet4 blocks. No migration of existing data is required.&lt;/p&gt;
&lt;h4 id=&#34;vparquet2-removed&#34;&gt;vParquet2 removed&lt;/h4&gt;
&lt;p&gt;vParquet2 encoding has been completely removed from Tempo 2.10. Tempo can no longer read vParquet2 blocks. [&lt;a href=&#34;https://github.com/grafana/tempo/pull/6071&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 6071&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;No action is required if you&amp;rsquo;ve used default settings. The default block format migrated away from vParquet2 several releases ago.&lt;/p&gt;
&lt;p&gt;Action is required if your storage configuration explicitly specifies vParquet2. Before upgrading, verify your configuration doesn&amp;rsquo;t specify vParquet2. If it does:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update to a previous Tempo release (2.9 or earlier) configured for vParquet3 or higher&lt;/li&gt;
&lt;li&gt;Wait for all existing vParquet2 blocks to expire and be deleted from backend storage&lt;/li&gt;
&lt;li&gt;Then upgrade to Tempo 2.10&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upgrading to 2.10 while vParquet2 blocks still exist in storage will cause read errors.&lt;/p&gt;
&lt;h4 id=&#34;vparquet3-and-vparquet2-schemas-deprecated&#34;&gt;vParquet3 and vParquet2 schemas deprecated&lt;/h4&gt;
&lt;p&gt;TempoDB schemas vParquet3 and vParquet2 are now deprecated and will be removed in Tempo 3.0. [&lt;a href=&#34;https://github.com/grafana/tempo/pull/6198&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 6198&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re using vParquet3, plan your migration to vParquet4 or higher before upgrading to Tempo 3.0.&lt;/p&gt;
&lt;h3 id=&#34;breaking-changes&#34;&gt;Breaking changes&lt;/h3&gt;
&lt;p&gt;Be aware of these breaking changes when upgrading to Tempo 2.10:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tenant ID validation: Tempo now validates tenant IDs in the frontend and distributor components, using the same validation rules as Grafana Mimir. Previously, Tempo accepted any tenant ID value. Valid tenant IDs may only contain alphanumeric characters (a-z, A-Z, 0-9) and special characters (&lt;code&gt;!&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;_&lt;/code&gt;, &lt;code&gt;.&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;&#39;&lt;/code&gt;, &lt;code&gt;(&lt;/code&gt;, &lt;code&gt;)&lt;/code&gt;), with a maximum length of 150 characters. Empty tenant IDs and the values &lt;code&gt;.&lt;/code&gt; or &lt;code&gt;..&lt;/code&gt; are rejected. Requests with invalid tenant IDs return an error. [&lt;a href=&#34;https://github.com/grafana/tempo/pull/5786&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 5786&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;SearchTagsV2WithRange API change: The Tempo HTTP client &lt;code&gt;SearchTagsV2WithRange&lt;/code&gt; function signature has changed. The function previously accepted only &lt;code&gt;start&lt;/code&gt; and &lt;code&gt;end&lt;/code&gt; parameters. It now requires two additional parameters: &lt;code&gt;scope&lt;/code&gt; and &lt;code&gt;query&lt;/code&gt;. This change affects Go code that imports the &lt;code&gt;pkg/httpclient&lt;/code&gt; package. To maintain existing behavior, pass empty strings for the new parameters: &lt;code&gt;SearchTagsV2WithRange(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, start, end)&lt;/code&gt;. [&lt;a href=&#34;https://github.com/grafana/tempo/pull/6088&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 6088&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Go version upgrade: Tempo 2.10 upgrades to Go 1.25.5, which may affect custom builds or deployments with specific Go version requirements. (PRs &lt;a href=&#34;https://github.com/grafana/tempo/pull/5939&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#5939&lt;/a&gt; &lt;a href=&#34;https://github.com/grafana/tempo/pull/6001&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#6001&lt;/a&gt;, &lt;a href=&#34;https://github.com/grafana/tempo/pull/6096&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#6096&lt;/a&gt;, &lt;a href=&#34;https://github.com/grafana/tempo/pull/6089&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#6089&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;upgrade-to-tempo-29&#34;&gt;Upgrade to Tempo 2.9&lt;/h2&gt;
&lt;p&gt;When upgrading to Tempo 2.9, be aware of these considerations and breaking changes.&lt;/p&gt;
&lt;h3 id=&#34;rpm-and-deb-packages-discontinued&#34;&gt;RPM and DEB packages discontinued&lt;/h3&gt;
&lt;p&gt;Tempo no longer publishes RPM and DEB packages due to an internal change to the handling of signing keys. This can be restored if customers need these packages. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/5684&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 5684&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id=&#34;migrated-vulture-and-integration-tests-to-otlp-exporter&#34;&gt;Migrated Vulture and integration tests to OTLP exporter&lt;/h3&gt;
&lt;p&gt;In this release, we&amp;rsquo;ve migrated Tempo Vulture and Integration Tests from the deprecated Jaeger agent/exporter to the standard OTLP exporter. Vulture now pushes traces to the Tempo OTLP GRCP endpoint. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/5058&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 5058&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id=&#34;bucket-calculation-changes&#34;&gt;Bucket calculation changes&lt;/h3&gt;
&lt;p&gt;TraceQL metrics buckets are now calculated based on data in the past instead of the future, which aligns behavior with Prometheus. This resolves issues with empty last buckets that were previously encountered. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/5366&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 5366&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;This change may cause differences in existing dashboards and alerts that rely on TraceQL metrics bucket calculations. Review your monitoring and alerting configurations after upgrading.&lt;/p&gt;
&lt;h3 id=&#34;series-label-handling-improvements&#34;&gt;Series label handling improvements&lt;/h3&gt;
&lt;p&gt;Fixed incorrect TraceQL metrics results when series labels include both strings and integers with the same textual representation (such as &lt;code&gt;&amp;quot;500&amp;quot;&lt;/code&gt; vs &lt;code&gt;500&lt;/code&gt;). The &lt;code&gt;prom_labels&lt;/code&gt; field has been removed from TraceQL metrics responses as it was the source of these errors. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/5659&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 5659&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;There may be brief interruptions to TraceQL metrics queries during rollout while components run different versions. Plan for a coordinated rollout to minimize impact.&lt;/p&gt;
&lt;h3 id=&#34;vparquet5-block-format&#34;&gt;vParquet5 block format&lt;/h3&gt;
&lt;p&gt;Tempo 2.9 introduces a new experimental vParquet5 block format, designed to improve query performance and reduce storage requirements.vParquet5 has two previews: &lt;code&gt;vParquet5-preview1&lt;/code&gt;, low-resolution timestamp columns, and &lt;code&gt;vParquet5-preview2&lt;/code&gt;, dedicated integer columns.&lt;/p&gt;
&lt;p&gt;Breaking changes are expected before the final release. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/5495&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 5495&lt;/a&gt;, &lt;a href=&#34;https://github.com/grafana/tempo/pull/5639&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 5639&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id=&#34;go-version-upgrade&#34;&gt;Go version upgrade&lt;/h3&gt;
&lt;p&gt;Tempo 2.9 upgrades to Go 1.25.0, which may affect custom builds or deployments with specific Go version requirements. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/5548&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 5548&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re building Tempo from source or using custom Docker images, ensure your build environment supports Go 1.25.0.&lt;/p&gt;
&lt;h2 id=&#34;upgrade-to-tempo-28&#34;&gt;Upgrade to Tempo 2.8&lt;/h2&gt;
&lt;p&gt;When upgrading to Tempo 2.8, be aware of these considerations and breaking changes.&lt;/p&gt;
&lt;h3 id=&#34;changed-the-default-listening-port&#34;&gt;Changed the default listening port&lt;/h3&gt;
&lt;p&gt;With Tempo 2.8, the default &lt;code&gt;http_listen_port&lt;/code&gt; changes from 80 to 3200. Check the configuration options for the &lt;code&gt;server:&lt;/code&gt; block in your Tempo configuration file.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;server:
    # HTTP server listen host
    [http_listen_address: &amp;lt;string&amp;gt;]

    # HTTP server listen port
    [http_listen_port: &amp;lt;int&amp;gt; | default = 3200]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Refer to &lt;a href=&#34;https://github.com/grafana/tempo/discussions/4945&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;issue 4945&lt;/a&gt; for more information for the rationale.
&lt;a href=&#34;https://github.com/grafana/tempo/pull/4960&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 4960&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;removed-tempo-serverless&#34;&gt;Removed Tempo serverless&lt;/h3&gt;
&lt;p&gt;Tempo serverless has been removed. The following configuration options are no longer valid and should be removed from your Tempo configuration. [PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/4599/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;4599&lt;/a&gt;)&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;querier:
  search:
    prefer_self: &amp;lt;int&amp;gt;
    external_hedge_requests_at: &amp;lt;duration&amp;gt;
    external_hedge_requests_up_to: &amp;lt;duration&amp;gt;
    external_backend: &amp;lt;string&amp;gt;
    google_cloud_run: &amp;lt;string&amp;gt;
    external_endpoints: &amp;lt;array&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In addition, these Tempo serverless related metrics have been removed: &lt;code&gt;tempo_querier_external_endpoint_duration_seconds&lt;/code&gt;, &lt;code&gt;tempo_querier_external_endpoint_hedged_roundtrips_total&lt;/code&gt;, and &lt;code&gt;tempo_feature_enabled&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;updated-removed-or-renamed-configuration-parameters&#34;&gt;Updated, removed, or renamed configuration parameters&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Comments&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;max_span_attr_byte&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Renamed to &lt;code&gt;max_attribute_bytes&lt;/code&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4633&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 4633&lt;/a&gt;)&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;tempo_discarded_spans_total&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Removed &lt;code&gt;internal_error&lt;/code&gt; as a reason from &lt;code&gt;tempo_discarded_spans_total&lt;/code&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4554&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 4554&lt;/a&gt;)&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;tempo_receiver_accepted_span&lt;/code&gt; and &lt;code&gt;tempo_receiver_refused_spans&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The &lt;code&gt;name&lt;/code&gt; dimension from &lt;code&gt;tempo_receiver_accepted_span&lt;/code&gt; and &lt;code&gt;tempo_receiver_refused_spans&lt;/code&gt; changes from &lt;code&gt;tempo/jaeger_receiver&lt;/code&gt; to &lt;code&gt;jaeger/jaeger_receiver&lt;/code&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4893&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 4893&lt;/a&gt;)&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;other-upgrade-considerations&#34;&gt;Other upgrade considerations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Upgrade OTEL Collector to v0.122.1. The &lt;code&gt;name&lt;/code&gt; dimension from &lt;code&gt;tempo_receiver_accepted_span&lt;/code&gt; and &lt;code&gt;tempo_receiver_refused_spans&lt;/code&gt; changes from &lt;code&gt;tempo/jaeger_receiver&lt;/code&gt; to &lt;code&gt;jaeger/jaeger_receiver&lt;/code&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4893&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 4893&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;opentracing-contrib/go-grpc&lt;/code&gt; by &lt;code&gt;otelgrpc&lt;/code&gt; in Tempo query. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4958&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 4958&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Enforce max attribute size at event, link, and instrumentation scope. The configuration is now per-tenant. Renamed &lt;code&gt;max_span_attr_byte&lt;/code&gt; to &lt;code&gt;max_attribute_bytes&lt;/code&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4633&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 4633&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Converted SLO metric &lt;code&gt;query_frontend_bytes_processed_per_second&lt;/code&gt; from a histogram to a counter as it&amp;rsquo;s more performant. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4748&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 4748&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Removed the OpenTelemetry Jaeger exporter, which has been &lt;a href=&#34;https://pkg.go.dev/go.opentelemetry.io/otel/exporters/jaeger&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;deprecated&lt;/a&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4926&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 4926&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;upgrade-to-tempo-27&#34;&gt;Upgrade to Tempo 2.7&lt;/h2&gt;
&lt;p&gt;When upgrading to Tempo 2.7, be aware of these considerations and breaking changes.&lt;/p&gt;
&lt;h3 id=&#34;opentelemetry-collector-receiver-listens-on-localhost-by-default&#34;&gt;OpenTelemetry Collector receiver listens on &lt;code&gt;localhost&lt;/code&gt; by default&lt;/h3&gt;
&lt;p&gt;After this change, the OpenTelemetry Collector receiver defaults to binding on &lt;code&gt;localhost&lt;/code&gt; rather than &lt;code&gt;0.0.0.0&lt;/code&gt;. Tempo installations running in Docker or other container environments must update their listener address to continue receiving data. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4465&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#4465&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Most Tempo installations use the receivers with the default configuration:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;distributor:
  receivers:
    otlp:
      protocols:
        grpc:
        http:&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This used to work fine since the receivers defaulted to &lt;code&gt;0.0.0.0:4317&lt;/code&gt; and &lt;code&gt;0.0.0.0:4318&lt;/code&gt; respectively. With the changes to replace unspecified addresses, the receivers now default to &lt;code&gt;localhost:4317&lt;/code&gt; and &lt;code&gt;localhost:4318&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;As a result, connections to Tempo running in a Docker container won&amp;rsquo;t work anymore.&lt;/p&gt;
&lt;p&gt;To workaround this, you need to specify the address you want to bind to explicitly. For instance, if Tempo is running in a container with hostname &lt;code&gt;tempo&lt;/code&gt;, this should work:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;# ...
http:
  endpoint: &amp;#39;tempo:4318&amp;#39;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also explicitly bind to &lt;code&gt;0.0.0.0&lt;/code&gt; still, but this has potential security risks:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;# ...
http:
  endpoint: &amp;#39;0.0.0.0:4318&amp;#39;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;maximum-spans-per-span-set&#34;&gt;Maximum spans per span set&lt;/h3&gt;
&lt;p&gt;A new &lt;code&gt;max_spans_per_span_set&lt;/code&gt; limit is enabled by default and set to 100.
Set it to &lt;code&gt;0&lt;/code&gt; to restore the old behavior (unlimited).
Otherwise, spans beyond the configured max are dropped. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4383&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#4275&lt;/a&gt;)&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;query_frontend:
  search:
      max_spans_per_span_set: 0&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;tempo-serverless-deprecation&#34;&gt;Tempo serverless deprecation&lt;/h3&gt;
&lt;p&gt;Tempo serverless is officially deprecated and will be removed in an upcoming release.
Prepare to migrate any serverless workflows to alternative deployments. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4017&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#4017&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;There are no changes to this release for serverless. However, you&amp;rsquo;ll need to remove these configurations before the next release.&lt;/p&gt;
&lt;h3 id=&#34;anchored-regular-expressions-matchers-in-traceql&#34;&gt;Anchored regular expressions matchers in TraceQL&lt;/h3&gt;
&lt;p&gt;Regex matchers in TraceQL are now fully anchored using Prometheus&amp;rsquo;s fast regexp.
For instance, &lt;code&gt;span.foo =~ &amp;quot;bar&amp;quot;&lt;/code&gt; is interpreted as &lt;code&gt;span.foo =~ &amp;quot;^bar$&amp;quot;&lt;/code&gt;. Adjust existing queries accordingly. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4329&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#4329&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;For more information, refer to the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/traceql/construct-traceql-queries/#comparison-operators&#34;&gt;Comparison operators TraceQL&lt;/a&gt; documentation.&lt;/p&gt;
&lt;h3 id=&#34;migration-from-opentracing-to-opentelemetry&#34;&gt;Migration from OpenTracing to OpenTelemetry&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;use_otel_tracer&lt;/code&gt; option is removed.
Configure your spans via standard OpenTelemetry environment variables.
For Jaeger exporting, set &lt;code&gt;OTEL_TRACES_EXPORTER=jaeger&lt;/code&gt;.For more information, refer to the &lt;a href=&#34;https://www.google.com/url?q=https://opentelemetry.io/docs/languages/sdk-configuration/&amp;amp;sa=D&amp;amp;source=docs&amp;amp;ust=1736460391410238&amp;amp;usg=AOvVaw3bykVWwn34XfhrnFK73uM_&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenTelemetry documentation&lt;/a&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/3646&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#3646&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id=&#34;grpc-compression-set-to-snappy&#34;&gt;gRPC compression set to snappy&lt;/h3&gt;
&lt;p&gt;Tempo 2.7.1 set gRPC compression between all components to be &lt;code&gt;snappy&lt;/code&gt;.
Using &lt;code&gt;snappy&lt;/code&gt; provides a balanced approach to compression between components that will work for most installations.&lt;/p&gt;
&lt;p&gt;If you prefer a different balance of CPU/Memory and bandwidth, consider disabling compression or using zstd.&lt;/p&gt;
&lt;p&gt;For a discussion on alternatives, refer to &lt;a href=&#34;https://github.com/grafana/tempo/discussions/4683&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;this discussion thread&lt;/a&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4696&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#4696&lt;/a&gt;).&lt;/p&gt;
&lt;h4 id=&#34;grpc-compression-disabled&#34;&gt;gRPC compression disabled&lt;/h4&gt;
&lt;p&gt;Tempo 2.7.0 release disabled gRPC compression in the querier and distributor for performance reasons. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4429&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#4429&lt;/a&gt;).
Our benchmark suggests that without compression, queriers and distributors use less CPU and memory.&lt;/p&gt;
&lt;p&gt;Tempo 2.7.1 changed the default value to &lt;code&gt;snappy&lt;/code&gt; for internal components.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;This change may increase data usage and network traffic, which can impact cloud billing.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;If you notice increased network traffic or issues, check the gRPC compression settings.&lt;/p&gt;
&lt;p&gt;For instructions how to enable gRPC compression, refer to 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/#grpc-compression&#34;&gt;gRPC compression configuration&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h3 id=&#34;added-updated-removed-or-renamed-configuration-parameters&#34;&gt;Added, updated, removed, or renamed configuration parameters&lt;/h3&gt;
&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;strong&gt;Parameter&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;&lt;strong&gt;Comments&lt;/strong&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;querier_forget_delay&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Removed. The &lt;code&gt;querier_forget_delay&lt;/code&gt; setting provided no effective functionality and has been dropped. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/3996&#34;&gt;#3996&lt;/a&gt;)
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;use_otel_tracer&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Removed. Configure your spans via standard OpenTelemetry environment variables. For Jaeger exporting, set &lt;code&gt;OTEL_TRACES_EXPORTER=jaeger&lt;/code&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/3646&#34;&gt;#3646&lt;/a&gt;)
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;max_spans_per_span_set&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Added to query-frontend configuration. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4383&#34;&gt;#4275&lt;/a&gt;)
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;use_otel_tracer&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;The &lt;code&gt;use_otel_tracer&lt;/code&gt; option is removed. Configure your spans via standard OpenTelemetry environment variables. For Jaeger exporting, set &lt;code&gt;OTEL_TRACES_EXPORTER=jaeger&lt;/code&gt;. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/3646&#34;&gt;#3646&lt;/a&gt;)
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;h3 id=&#34;other-upgrade-considerations-1&#34;&gt;Other upgrade considerations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The Tempo CLI now targets the &lt;code&gt;/api/v2/traces&lt;/code&gt; endpoint by default. Use the &lt;code&gt;--v1&lt;/code&gt; flag if you still rely on the older &lt;code&gt;/api/traces&lt;/code&gt; endpoint. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4127&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#4127&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;If you already set the &lt;code&gt;X-Scope-OrgID&lt;/code&gt; header in per-tenant overrides or global Tempo configuration, it is now honored and not overwritten by Tempo. This may change behavior if you previously depended on automatic injection. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/4021&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#4021&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The AWS Lambda build output changes from main to bootstrap. Follow the &lt;a href=&#34;https://aws.amazon.com/blogs/compute/migrating-aws-lambda-functions-from-the-go1-x-runtime-to-the-custom-runtime-on-amazon-linux-2/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;AWS migration steps&lt;/a&gt; to ensure your Lambda functions continue to work. (&lt;a href=&#34;https://github.com/grafana/tempo/pull/3852&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#3852&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;upgrade-to-tempo-26&#34;&gt;Upgrade to Tempo 2.6&lt;/h2&gt;
&lt;p&gt;Tempo 2.6 has several considerations for any upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Operational change for TraceQL metrics&lt;/li&gt;
&lt;li&gt;vParquet4 is now the default block format&lt;/li&gt;
&lt;li&gt;Updated, removed, or renamed parameters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a complete list of changes, refer to the &lt;a href=&#34;https://github.com/grafana/tempo/releases/tag/v2.6.0&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tempo 2.6 CHANGELOG&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;operational-change-for-traceql-metrics&#34;&gt;Operational change for TraceQL metrics&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;ve changed to an RF1 (Replication Factor 1) pattern for TraceQL metrics as we were unable to hit performance goals for RF3 deduplication. This requires some operational changes to query TraceQL metrics.&lt;/p&gt;
&lt;p&gt;TraceQL metrics are still considered experimental, but we hope to mark them GA soon when we productionize a complete RF1 write-read path. [PRs &lt;a href=&#34;https://github.com/grafana/tempo/pull/3628&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;3628&lt;/a&gt;, &lt;a href=&#34;https://github.com/grafana/tempo/pull/3691&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;3691&lt;/a&gt;, &lt;a href=&#34;https://github.com/grafana/tempo/pull/3723&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;3723&lt;/a&gt;, &lt;a href=&#34;https://github.com/grafana/tempo/pull/3995&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;3995&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For recent data&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The local-blocks processor must be enabled to start using metrics queries like &lt;code&gt;{ } | rate()&lt;/code&gt;. If not enabled metrics queries fail with the error &lt;code&gt;localblocks processor not found&lt;/code&gt;. Enabling the local-blocks processor can be done either per tenant or in all tenants.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Per-tenant in the per-tenant overrides:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;overrides:
  &amp;#39;tenantID&amp;#39;:
    metrics_generator_processors:
      - local-blocks&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;By default, for all tenants in the main configuration:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;overrides:
  defaults:
    metrics_generator:
      processors: [local-blocks]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Add this configuration to run TraceQL metrics queries against all spans (and not just server spans):&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;metrics_generator:
  processor:
    local_blocks:
      filter_server_spans: false&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;For historical data&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To run metrics queries on historical data, you must configure the local-blocks processor to flush RF1 blocks to object storage:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;metrics_generator:
  processor:
    local_blocks:
      flush_to_storage: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;transition-to-vparquet4&#34;&gt;Transition to vParquet4&lt;/h3&gt;
&lt;p&gt;vParquet4 format is now the default block format.
It&amp;rsquo;s production ready and we highly recommend switching to it for improved query performance. [PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/3810&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;3810&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;Upgrading to Tempo 2.6 modifies the Parquet block format.
You don&amp;rsquo;t need to do anything with Parquet to go from 2.5 to 2.6.
If you used vParquet2 or vParquet3, all of your old blocks remain and can be read by Tempo 2.6.
Tempo 2.6 creates vParquet4 blocks by default, which enables the new TraceQL features.&lt;/p&gt;
&lt;p&gt;Although you can use Tempo 2.6 with vParquet2 or vParquet3, you can only use vParquet4 with Tempo 2.5 and later.
If you are using 2.5 with vParquet4, you&amp;rsquo;ll need to upgrade to Tempo 2.6 to use the new TraceQL features.&lt;/p&gt;
&lt;p&gt;You can also use the &lt;code&gt;tempo-cli analyse blocks&lt;/code&gt; command to query vParquet4 blocks. &lt;a href=&#34;https://github.com/grafana/tempo/pull/3868&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 3868&lt;/a&gt;]
Refer to the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/operations/tempo_cli/#analyse-blocks&#34;&gt;Tempo CLI&lt;/a&gt;documentation for more information.&lt;/p&gt;
&lt;p&gt;For information on upgrading, refer to 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/parquet/#choose-a-different-block-format&#34;&gt;Choose a different block format&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;updated-removed-or-renamed-configuration-parameters-1&#34;&gt;Updated, removed, or renamed configuration parameters&lt;/h3&gt;
&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;Parameter
   &lt;/td&gt;
   &lt;td&gt;Comments
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;storage:&lt;/code&gt;
&lt;p&gt;
&lt;code&gt;  azure:&lt;/code&gt;
&lt;p&gt;
&lt;code&gt;    use_v2_sdk: &lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Removed. Azure v2 is the only and primary Azure backend [PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/3875&#34;&gt;#3875&lt;/a&gt;]
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;autocomplete_filtering_enabled&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;The feature flag option has been removed. The feature is always enabled. [PR  &lt;a href=&#34;https://github.com/grafana/tempo/pull/3729&#34;&gt;#3729&lt;/a&gt;]
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;completedfilepath&lt;/code&gt; and &lt;code&gt;blocksfilepath&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Removed unused WAL configuration options. [PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/3911&#34;&gt;#3911&lt;/a&gt;]
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;compaction_disabled&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;New. Allow compaction disablement per-tenant. [PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/3965&#34;&gt;#3965&lt;/a&gt;, &lt;a href=&#34;https://grafana.com/docs/tempo/&lt;TEMPO_VERSION&gt;/configuration/#overrides&#34;&gt;documentation&lt;/a&gt;]
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;Storage:&lt;/code&gt;
&lt;p&gt;
&lt;code&gt;  s3:&lt;/code&gt;
&lt;p&gt;
&lt;code&gt;    [enable_dual_stack: &amp;lt;bool&gt;]&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Boolean flag to activate or deactivate &lt;a href=&#34;https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html&#34;&gt;dualstack mode&lt;/a&gt; on the Storage block configuration for S3. [PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/3721&#34;&gt;#3721&lt;/a&gt;, &lt;a href=&#34;https://grafana.com/docs/tempo/&lt;TEMPO_VERSION&gt;/configuration/#standard-overrides&#34;&gt;documentation&lt;/a&gt;]
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;h3 id=&#34;tempo-query-is-a-standalone-server&#34;&gt;&lt;code&gt;tempo-query&lt;/code&gt; is a standalone server&lt;/h3&gt;
&lt;p&gt;With Tempo 2.6.1, &lt;code&gt;tempo-query&lt;/code&gt; is no longer a Jaeger instance with &lt;code&gt;grpcPlugin&lt;/code&gt;.
It&amp;rsquo;s now a standalone server.
Serving a gRPC API for Jaeger on 0.0.0.0:7777 by default. [PR 3840]&lt;/p&gt;
&lt;h2 id=&#34;upgrade-to-tempo-25&#34;&gt;Upgrade to Tempo 2.5&lt;/h2&gt;
&lt;p&gt;Tempo 2.5 has several considerations for any upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker image runs as a new UID&lt;/li&gt;
&lt;li&gt;Support for vParquet format removed&lt;/li&gt;
&lt;li&gt;Experimental vParquet4 block format&lt;/li&gt;
&lt;li&gt;Removed configuration parameters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a complete list of changes, enhancements, and bug fixes, refer to the &lt;a href=&#34;https://github.com/grafana/tempo/releases/tag/v2.5.0&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tempo 2.5 CHANGELOG&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;docker-image-runs-as-new-uid&#34;&gt;Docker image runs as new UID&lt;/h3&gt;
&lt;p&gt;The Tempo process in the &lt;a href=&#34;https://hub.docker.com/r/grafana/tempo/tags&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;official Docker image&lt;/a&gt; used to run as &lt;code&gt;root&lt;/code&gt;. The Tempo process now runs as UID &lt;code&gt;10001&lt;/code&gt; in the Docker image.&lt;/p&gt;
&lt;p&gt;Components such as ingesters and metrics generators that maintain files on disk won&amp;rsquo;t come up cleanly without intervention.
The new user &lt;code&gt;10001&lt;/code&gt; won&amp;rsquo;t have access to the old files created by &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The ownership of &lt;code&gt;/var/tempo&lt;/code&gt; changed from &lt;code&gt;root:root&lt;/code&gt; to &lt;code&gt;tempo:tempo&lt;/code&gt; with the UID/GID of &lt;code&gt;10001&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;ingester&lt;/code&gt; and &lt;code&gt;metrics-generator&lt;/code&gt; statefulsets may need to &lt;a href=&#34;https://opensource.com/article/19/8/linux-chown-command&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;run &lt;code&gt;chown&lt;/code&gt;&lt;/a&gt; to change ownership to start properly.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&#34;https://github.com/grafana/tempo/pull/2265&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 2265&lt;/a&gt; to see a Jsonnet example of an &lt;code&gt;init&lt;/code&gt; container.&lt;/p&gt;
&lt;p&gt;This change doesn&amp;rsquo;t impact you if you used the Helm chart with the default security context set in the chart.
All data should be owned by the &lt;code&gt;tempo&lt;/code&gt; user already.
The UID won&amp;rsquo;t impact Helm chart users.&lt;/p&gt;
&lt;!-- vale Grafana.Spelling = NO --&gt;
&lt;h3 id=&#34;support-for-vparquet-format-removed&#34;&gt;Support for vParquet format removed&lt;/h3&gt;
&lt;p&gt;The original vParquet format &lt;a href=&#34;https://github.com/grafana/tempo/pull/3663&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;has been removed&lt;/a&gt; from Tempo 2.5.
Direct upgrades from Tempo 2.1 to Tempo 2.5 aren&amp;rsquo;t possible.
You will need to upgrade to an intermediate version and wait for the old vParquet blocks to fall out of retention before upgrading to 2.5. &lt;a href=&#34;https://github.com/grafana/tempo/pull/3663&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 3663&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;vParquet(1) won&amp;rsquo;t be recognized as a valid encoding and any remaining vParquet(1) blocks won&amp;rsquo;t be readable.&lt;/p&gt;
&lt;p&gt;Installations running with historical defaults should not require any changes as the default has been migrated for several releases.
Installations with storage settings pinned to vParquet must run a previous release configured for vParquet2 or higher until all existing vParquet(1) blocks have expired and been deleted from the backend, or else you&amp;rsquo;ll encounter read errors after upgrading to this release.&lt;/p&gt;
&lt;h3 id=&#34;experimental-vparquet4-block-format&#34;&gt;Experimental vParquet4 block format&lt;/h3&gt;
&lt;p&gt;The vParquet4 block format is required for querying links, events, and arrays and improves query performance relative to previous formats. vParquet4 will be the default block format in the next release. [&lt;a href=&#34;https://github.com/grafana/tempo/pull/3368&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 3368&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;While you can use vParquet4, keep in mind that it&amp;rsquo;s experimental.
If you choose to use vParquet4 and then opt to revert to vParquet3, any vParquet4 blocks would not be readable by vParquet3.&lt;/p&gt;
&lt;p&gt;To try vParquet4, refer to 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/parquet/#choose-a-different-block-format&#34;&gt;Choose a block format&lt;/a&gt;.&lt;/p&gt;
&lt;!-- vale Grafana.Spelling = YES --&gt;
&lt;h3 id=&#34;removed-configuration-parameters&#34;&gt;Removed configuration parameters&lt;/h3&gt;
&lt;table&gt;
 &lt;tr&gt;
  &lt;td&gt;&lt;strong&gt;Parameter&lt;/strong&gt;
  &lt;/td&gt;
  &lt;td&gt;&lt;strong&gt;Comments&lt;/strong&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;`[hedge_requests_at: &amp;lt;duration&gt; | default = 2s ]`
&lt;p&gt;
`[hedge_requests_up_to: &amp;lt;int&gt; | default = 2 ]`
  &lt;/td&gt;
  &lt;td&gt;Removed options from the configuration. [PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/3522&#34;&gt;#3522&lt;/a&gt;]
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;
&lt;h3 id=&#34;additional-considerations&#34;&gt;Additional considerations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Updating to OTLP 1.3.0 removes the deprecated &lt;code&gt;InstrumentationLibrary&lt;/code&gt; and &lt;code&gt;InstrumentationLibrarySpan&lt;/code&gt; from the OTLP receivers. &lt;a href=&#34;https://github.com/grafana/tempo/pull/3649&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 3649&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Removes the addition of a tenant in multi-tenant trace id lookup. &lt;a href=&#34;https://github.com/grafana/tempo/pull/3522&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 3522&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;upgrade-to-tempo-24&#34;&gt;Upgrade to Tempo 2.4&lt;/h2&gt;
&lt;p&gt;Tempo 2.4 has several considerations for any upgrade:&lt;/p&gt;
&lt;!-- vale Grafana.Spelling = NO --&gt;
&lt;ul&gt;
&lt;li&gt;vParquet3 is now the default backend&lt;/li&gt;
&lt;li&gt;Caches configuration was refactored&lt;/li&gt;
&lt;li&gt;Updated, removed, and renamed configuration parameters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a complete list of changes, enhancements, and bug fixes, refer to the &lt;a href=&#34;https://github.com/grafana/tempo/releases&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tempo 2.4 CHANGELOG&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;transition-to-vparquet3-as-default-block-format&#34;&gt;Transition to vParquet3 as default block format&lt;/h3&gt;
&lt;p&gt;vParquet3 format is now the default block format. It is production ready and we highly recommend switching to it for improved query performance and 
    &lt;a href=&#34;/docs/tempo/v2.10.x/operations/dedicated_columns/&#34;&gt;dedicated attribute columns&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Upgrading to Tempo 2.4 modifies the Parquet block format. Although you can use Tempo 2.3 with vParquet2 or vParquet3, you can only use Tempo 2.4 with vParquet3.&lt;/p&gt;
&lt;p&gt;With this release, the first version of our Parquet backend, vParquet, is being deprecated.
Tempo 2.4 still reads vParquet1 blocks.
However, Tempo will exit with error if they are manually configured. [&lt;a href=&#34;https://github.com/grafana/tempo/pull/3377/files#top&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 3377&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;For information on changing the vParquet version, refer to 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/parquet/#choose-a-different-block-format&#34;&gt;Choose a different block format&lt;/a&gt;.&lt;/p&gt;
&lt;!-- vale Grafana.Spelling = YES --&gt;
&lt;h3 id=&#34;cache-configuration-refactored&#34;&gt;Cache configuration refactored&lt;/h3&gt;
&lt;p&gt;The major cache refactor lets you configure multiple role-based caches. [&lt;a href=&#34;https://github.com/grafana/tempo/pull/3166&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 3166&lt;/a&gt;]
This change resulted in several fields being deprecated (refer to the old configuration).&lt;/p&gt;
&lt;p&gt;These fields have all been migrated to a top level &lt;code&gt;cache:&lt;/code&gt; field.&lt;/p&gt;
&lt;p&gt;For more information about the configuration, refer to the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/#cache&#34;&gt;Cache&lt;/a&gt; section.&lt;/p&gt;
&lt;p&gt;The old configuration block looked like this:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;storage:
  trace:
    cache:
    search:
      cache_control:
    background_cache:
    memcached:
    redis:&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;With the new configuration, you create your list of caches, with either &lt;code&gt;redis&lt;/code&gt; or &lt;code&gt;memcached&lt;/code&gt; cluster with your configuration, and then define the types of data and roles.&lt;/p&gt;
&lt;p&gt;Simple configuration example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;cache:
  caches:
    - memcached:
        host: &amp;lt;some memcached cluster&amp;gt;
      roles:
        - bloom
        - parquet-footer
    - memcached:
        host: &amp;lt;some memcached cluster&amp;gt;
      roles:
        - frontend-search&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;updated-removed-or-renamed-configuration-parameters-2&#34;&gt;Updated, removed, or renamed configuration parameters&lt;/h3&gt;
&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;Parameter
   &lt;/td
   &lt;td&gt;Comments
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;distributor.log_received_traces&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Use the &lt;code&gt;distributor.log_received_spans&lt;/code&gt; configuration block instead. [PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/3008&#34;&gt;#3008&lt;/a&gt;]
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;tempo_query_frontend_queries_total{op=&#34;searchtags|metrics&#34;}&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Removed deprecated frontend metrics configuration option
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;The distributor now returns 200 for any batch containing only &lt;code&gt;trace_too_large&lt;/code&gt; and &lt;code&gt;max_live_traces&lt;/code&gt; errors. The number of discarded spans are still reflected in the &lt;code&gt;tempo_discarded_spans_total metrics&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;upgrade-to-tempo-23&#34;&gt;Upgrade to Tempo 2.3&lt;/h2&gt;
&lt;p&gt;Tempo 2.3 has several considerations for any upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;vParquet3 is available as a stable, production-read block format&lt;/li&gt;
&lt;li&gt;Configuration option to use Azure SDK v2&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;defaults&lt;/code&gt; block in Overrides module configuration&lt;/li&gt;
&lt;li&gt;Several configuration parameters have been renamed or removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a complete list of changes, enhancements, and bug fixes, refer to the &lt;a href=&#34;https://github.com/grafana/tempo/releases&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tempo 2.3 CHANGELOG&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;production-ready-vparquet3-block-format&#34;&gt;Production-ready vParquet3 block format&lt;/h3&gt;
&lt;p&gt;vParquet3 provides improved query performance and 
    &lt;a href=&#34;/docs/tempo/v2.10.x/operations/dedicated_columns/&#34;&gt;dedicated attribute columns&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This block format is required for using dedicated attribute columns.&lt;/p&gt;
&lt;p&gt;While vParquet2 remains the default backend for Tempo 2.3, vParquet3 is available as a stable option.
Both work with Tempo 2.3.&lt;/p&gt;
&lt;p&gt;Upgrading to Tempo 2.3 doesn&amp;rsquo;t modify the Parquet block format.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Tempo 2.2 can&amp;rsquo;t read data stored in vParquet3.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Recommended update process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Upgrade your Tempo installation to version 2.3, remaining on vParquet2.&lt;/li&gt;
&lt;li&gt;Verify the upgrade is stable and performs as expected. If you notice any issues, you can downgrade to version 2.2, and data remains readable.&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/parquet/&#34;&gt;Change the block format to vParquet3&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you notice any issues on step 3 using the new block format, you can downgrade to vParquet2.
All your data remains readable in Tempo 2.3.
However, if you have vParquet3 blocks and have to downgrade to Tempo 2.2, you will have data loss.&lt;/p&gt;
&lt;h3 id=&#34;use-azure-sdk-v2&#34;&gt;Use Azure SDK v2&lt;/h3&gt;
&lt;p&gt;If you are using Azure storage, we recommend using the v2 SDK, &lt;a href=&#34;https://github.com/Azure/azure-sdk-for-go&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;azure-sdk-for-go&lt;/a&gt;.
You can use the &lt;code&gt;use_v2_sdk&lt;/code&gt; configure option for switching.&lt;/p&gt;
&lt;p&gt;For more information, refer to the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/#storage-block-configuration-example&#34;&gt;Storage block configuration example documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;new-defaults-block-in-overrides-module-configuration&#34;&gt;New &lt;code&gt;defaults&lt;/code&gt; block in Overrides module configuration&lt;/h3&gt;
&lt;p&gt;The Overrides module has a new &lt;code&gt;defaults&lt;/code&gt; block for configuring global or per-tenant settings.
The Overrides format now includes changes to indented syntax.
For more information, read the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/#overrides&#34;&gt;Overrides configuration documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can also use the Tempo CLI to migrate configurations. Refer to the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/operations/tempo_cli/#migrate-overrides-config-command&#34;&gt;tempo-cli documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The old configuration block looked like this:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;overrides:
  ingestion_rate_strategy: local
  ingestion_rate_limit_bytes: 12345
  ingestion_burst_size_bytes: 67890
  max_search_duration: 17s
  forwarders: [&amp;#39;foo&amp;#39;]
  metrics_generator_processors: [service-graphs, span-metrics]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The new configuration block looks like this:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;overrides:
  defaults:
    ingestion:
      rate_strategy: local
      rate_limit_bytes: 12345
      burst_size_bytes: 67890
    read:
      max_search_duration: 17s
    forwarders: [&amp;#39;foo&amp;#39;]
    metrics_generator:
      processors: [service-graphs, span-metrics]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;removed-or-renamed-configuration-parameters&#34;&gt;Removed or renamed configuration parameters&lt;/h3&gt;
&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;strong&gt;Parameter&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;&lt;strong&gt;Comments&lt;/strong&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;distributor.log_received_traces&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Use the &lt;code&gt;distributor.log_received_spans&lt;/code&gt; configuration block instead. [PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/3008&#34;&gt;3008&lt;/a&gt;]
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;code&gt;tempo_query_frontend_queries_total{op=&#34;searchtags|metrics&#34;}&lt;/code&gt;
   &lt;/td&gt;
   &lt;td&gt;Removed deprecated frontend metrics configuration option
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;h2 id=&#34;upgrade-to-tempo-22&#34;&gt;Upgrade to Tempo 2.2&lt;/h2&gt;
&lt;p&gt;Tempo 2.2 has several considerations for any upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;vParquet2 is now the default block format&lt;/li&gt;
&lt;li&gt;Several configuration parameters have been renamed or removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a complete list of changes, enhancements, and bug fixes, refer to the &lt;a href=&#34;https://github.com/grafana/tempo/releases&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tempo 2.2 CHANGELOG&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;default-block-format-changed-to-vparquet2&#34;&gt;Default block format changed to vParquet2&lt;/h3&gt;
&lt;p&gt;While not a breaking change, upgrading to Tempo 2.2 by default changes Tempo&amp;rsquo;s block format to vParquet2.&lt;/p&gt;
&lt;p&gt;To stay on a previous block format, read the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/parquet/#choose-a-different-block-format&#34;&gt;Parquet configuration documentation&lt;/a&gt;.
We strongly encourage upgrading to vParquet2 as soon as possible as this is required for using structural operators in your TraceQL queries and provides query performance improvements, in particular on queries using the &lt;code&gt;duration&lt;/code&gt; intrinsic.&lt;/p&gt;
&lt;h3 id=&#34;updated-jsonnet-supports-statefulset-for-the-metrics-generator&#34;&gt;Updated JSonnet supports &lt;code&gt;statefulset&lt;/code&gt; for the metrics-generator&lt;/h3&gt;
&lt;p&gt;Tempo 2.2 updates the &lt;code&gt;microservices&lt;/code&gt; JSonnet to support a &lt;code&gt;statefulset&lt;/code&gt; for the &lt;code&gt;metrics_generator&lt;/code&gt; component.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;This update is important if you use the experimental &lt;code&gt;local-blocks&lt;/code&gt; processor.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;To support a new &lt;code&gt;processor&lt;/code&gt;, the metrics-generator has been converted from a &lt;code&gt;deployment&lt;/code&gt; into a &lt;code&gt;statefulset&lt;/code&gt; with a PVC.
This requires manual intervention to migrate successfully and avoid downtime.
Note that currently both a &lt;code&gt;deployment&lt;/code&gt; and a &lt;code&gt;statefulset&lt;/code&gt; will be managed by the JSonnet for a period of time, after which we will delete the deployment from this repository and you will need to delete user-side references to the &lt;code&gt;tempo_metrics_generator_deployment&lt;/code&gt;, as well as delete the deployment itself.&lt;/p&gt;
&lt;p&gt;Refer to the PR for seamless migration instructions. [PRs &lt;a href=&#34;https://github.com/grafana/tempo/pull/2533&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;2533&lt;/a&gt;, &lt;a href=&#34;https://github.com/grafana/tempo/pull/2467&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;2467&lt;/a&gt;]&lt;/p&gt;
&lt;h3 id=&#34;removed-or-renamed-configuration-parameters-1&#34;&gt;Removed or renamed configuration parameters&lt;/h3&gt;
&lt;p&gt;The following fields were removed or renamed.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Comments&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;query_frontend:&lt;br&gt;  tolerate_failed_blocks: &lt;int&gt;&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Remove support for &lt;code&gt;tolerant_failed_blocks&lt;/code&gt; [&lt;a href=&#34;https://github.com/grafana/tempo/pull/2416&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 2416&lt;/a&gt;]&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;storage:&lt;br&gt;  trace:&lt;br&gt;  s3:&lt;br&gt;  insecure_skip_verify: true // renamed to tls_insecure_skip_verify&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Renamed &lt;code&gt;insecure_skip_verify&lt;/code&gt; to &lt;code&gt;tls_insecure_skip_verify&lt;/code&gt; [&lt;a href=&#34;https://github.com/grafana/tempo/pull/2407&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PR 2407&lt;/a&gt;]&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;upgrade-to-tempo-21&#34;&gt;Upgrade to Tempo 2.1&lt;/h2&gt;
&lt;p&gt;Tempo 2.1 has two major considerations for any upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for search on v2 block is removed&lt;/li&gt;
&lt;li&gt;Breaking changes to metric names&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information on other enhancements, read the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/release-notes/v2-1/&#34;&gt;Tempo 2.1 release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;remove-support-for-search-on-v2-blocks&#34;&gt;Remove support for Search on v2 blocks&lt;/h3&gt;
&lt;p&gt;Users can no longer search blocks in v2 format. Only the Parquet formats support search.
These search configuration options were removed from the overrides section:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;overrides:
  max_search_bytes_per_trace:
  search_tags_allow_list:
  search_tags_deny_list:&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The following metrics configuration was also removed:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;tempo_ingester_trace_search_bytes_discarded_total&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;upgrade-path-to-maintain-search-from-tempo-1x-to-21&#34;&gt;Upgrade path to maintain search from Tempo 1.x to 2.1&lt;/h3&gt;
&lt;!-- vale Grafana.Spelling = NO --&gt;
&lt;p&gt;Removing support for search on v2 blocks means that if you upgrade directly from 1.9 to 2.1, you will not be able to search your v2 blocks. To avoid this, upgrade to 2.0 first, since 2.0 supports searching both v2 and vParquet blocks. You can let your old v2 blocks gradually age out while Tempo creates new vParquet blocks from incoming traces. Once all of your v2 blocks have been deleted and you only have vParquet format-blocks, you can upgrade to Tempo 2.1. All of your blocks will be searchable.&lt;/p&gt;
&lt;!-- vale Grafana.Spelling = YES --&gt;
&lt;p&gt;Parquet files are no longer cached when carrying out searches.&lt;/p&gt;
&lt;h3 id=&#34;breaking-changes-to-metric-names-exposed-by-tempo&#34;&gt;Breaking changes to metric names exposed by Tempo&lt;/h3&gt;
&lt;p&gt;All Prometheus metrics exposed by Tempo on its &lt;code&gt;/metrics&lt;/code&gt; endpoint that were previously prefixed with &lt;code&gt;cortex_&lt;/code&gt; have now been renamed to be prefixed with &lt;code&gt;tempo_&lt;/code&gt; instead. (PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/2204&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;2204&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Tempo now includes SLO metrics to count where queries are returned within a configurable time range. (PR &lt;a href=&#34;https://github.com/grafana/tempo/pull/2008&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;2008&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;query_frontend_result_metrics_inspected_bytes&lt;/code&gt; metric was removed in favor of &lt;code&gt;query_frontend_bytes_processed_per_second&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;upgrade-from-tempo-15-to-20&#34;&gt;Upgrade from Tempo 1.5 to 2.0&lt;/h2&gt;
&lt;p&gt;Tempo 2.0 marks a major milestone in Tempo development. When planning your upgrade, consider these factors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Breaking changes:
&lt;ul&gt;
&lt;li&gt;Renamed, removed, and moved configurations are described in section below.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;TempoRequestErrors&lt;/code&gt; alert was removed from mixin. Any Jsonnet users relying on this alert should copy this into their own environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Advisory:
&lt;ul&gt;
&lt;li&gt;Changed defaults. Are these updates relevant for your installation?&lt;/li&gt;
&lt;li&gt;TraceQL editor needs to be enabled in Grafana to use the query editor.&lt;/li&gt;
&lt;li&gt;Resource requirements have changed for Tempo 2.0 with the default configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once you upgrade to Tempo 2.0, there is no path to downgrade.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;There is a potential issue loading experimental Parquet storage blocks. You may see errors or even panics in the compactors. We have only been able to reproduce this with interim commits between 1.5 and 2.0, but if you experience any issues, &lt;a href=&#34;https://github.com/grafana/tempo/issues/new?assignees=&amp;amp;labels=&amp;amp;template=bug_report.md&amp;amp;title=&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;report them&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;check-tempo-installation-resource-allocation&#34;&gt;Check Tempo installation resource allocation&lt;/h3&gt;
&lt;p&gt;Parquet provides faster search and is required to enable TraceQL. However, the Tempo installation requires additional CPU and memory resources to use Parquet efficiently. Parquet is more costly due to the extra work of building the columnar blocks, and operators should expect at least 1.5x increase in required resources to run a Tempo 2.0 cluster. Most users find these extra resources are negligible compared to the benefits that come from the additional features of TraceQL and from storing traces in an open format.&lt;/p&gt;
&lt;p&gt;You can continue using the previous &lt;code&gt;v2&lt;/code&gt; block format using the instructions provided in the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/parquet/&#34;&gt;Parquet configuration documentation&lt;/a&gt;.
Tempo continues to support trace by id lookup on the &lt;code&gt;v2&lt;/code&gt; format for the foreseeable future.&lt;/p&gt;
&lt;h3 id=&#34;enable-traceql-in-grafana&#34;&gt;Enable TraceQL in Grafana&lt;/h3&gt;
&lt;p&gt;TraceQL is enabled by default in Tempo 2.0. The TraceQL query editor requires Grafana 9.3.2 and later.&lt;/p&gt;
&lt;p&gt;The TraceQL query editor is in beta in Grafana 9.3.2 and needs to be enabled with the &lt;code&gt;traceqlEditor&lt;/code&gt; feature flag.&lt;/p&gt;
&lt;h3 id=&#34;check-configuration-options-for-removed-and-renamed-options&#34;&gt;Check configuration options for removed and renamed options&lt;/h3&gt;
&lt;p&gt;The following tables describe the parameters that have been removed or renamed.&lt;/p&gt;
&lt;h4 id=&#34;removed-and-replaced&#34;&gt;Removed and replaced&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Comments&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;query_frontend:&lt;br&gt;  query_shards:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Replaced by &lt;code&gt;trace_by_id.query_shards&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;querier:&lt;br&gt;  query_timeout:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Replaced by two different settings: &lt;code&gt;search.query_timeout&lt;/code&gt; and &lt;code&gt;trace_by_id.query_timeout&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;ingester:&lt;br&gt;  use_flatbuffer_search:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Removed and automatically determined based on block format.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;search_enabled&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Removed. Now defaults to true.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;metrics_generator_enabled&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Removed. Now defaults to true.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;renamed&#34;&gt;Renamed&lt;/h4&gt;
&lt;p&gt;The following &lt;code&gt;compactor&lt;/code&gt; configuration parameters were renamed.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Comments&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;compaction:&lt;br&gt;  chunk_size_bytes:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Renamed to &lt;code&gt;v2_in_buffer_bytes&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;compaction:&lt;br&gt;  flush_size_bytes:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Renamed to &lt;code&gt;v2_out_buffer_bytes&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;compaction:&lt;br&gt;  iterator_buffer_size:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Renamed to &lt;code&gt;v2_prefetch_traces_count&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The following &lt;code&gt;storage&lt;/code&gt; configuration parameters were renamed.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Comments&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;wal:&lt;br&gt;  encoding:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Renamed to &lt;code&gt;v2_encoding&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;block:&lt;br&gt;  index_downsample_bytes:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Renamed to &lt;code&gt;v2_index_downsample_bytes&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;block:&lt;br&gt;  index_page_size_bytes:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Renamed to &lt;code&gt;v2_index_page_size_bytes&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;block:&lt;br&gt;  encoding:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Renamed to &lt;code&gt;v2_encoding&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;pre&gt;block:&lt;br&gt;  row_group_size_bytes:&lt;/pre&gt;&lt;/td&gt;
              &lt;td&gt;Renamed to &lt;code&gt;parquet_row_group_size_bytes&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The Azure Storage configuration section now uses snake case with underscores (&lt;code&gt;_&lt;/code&gt;) instead of dashes (&lt;code&gt;-&lt;/code&gt;). Example of using snake case on Azure Storage config:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;# config.yaml
storage:
  trace:
    azure:
      storage_account_name:
      storage_account_key:
      container_name:&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;!-- vale Grafana.We = YES --&gt;
&lt;!-- vale Grafana.Will = YES --&gt;
&lt;!-- vale Grafana.Timeless = YES --&gt;
]]></content><description>&lt;h1 id="upgrade-your-tempo-installation">Upgrade your Tempo installation&lt;/h1>
&lt;!-- vale Grafana.We = NO -->
&lt;!-- vale Grafana.Will = NO -->
&lt;!-- vale Grafana.Timeless = NO -->
&lt;p>You can upgrade a Tempo installation to the next version.
However, any release has the potential to have breaking changes.
We recommend testing in a non-production environment prior to rolling these changes to production.&lt;/p></description></item><item><title>Command line flags</title><link>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/command-line-flags/</link><pubDate>Thu, 09 Apr 2026 14:59:14 +0000</pubDate><guid>https://grafana.com/docs/tempo/v2.10.x/set-up-for-tracing/setup-tempo/command-line-flags/</guid><content><![CDATA[&lt;h1 id=&#34;command-line-flags&#34;&gt;Command line flags&lt;/h1&gt;
&lt;p&gt;Tempo provides various command-line flags to configure its behavior when starting the binary. This document serves as a reference for these flags.&lt;/p&gt;
&lt;h2 id=&#34;global-flags&#34;&gt;Global flags&lt;/h2&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Flag&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--version&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Print this build&amp;rsquo;s version information and exit&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--mem-ballast-size-mbs&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Size of memory ballast to allocate in MBs&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--mutex-profile-fraction&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Override default mutex profiling fraction&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--block-profile-threshold&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Override default block profiling threshold&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--config.file&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Configuration file to load&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--config.expand-env&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Whether to expand environment variables in config file&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--config.verify&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Verify configuration and exit&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;target-flag&#34;&gt;Target flag&lt;/h2&gt;
&lt;p&gt;The deployment mode is determined by the runtime configuration &lt;code&gt;target&lt;/code&gt;, or
by using the &lt;code&gt;-target&lt;/code&gt; flag on the command line.
The default target is &lt;code&gt;all&lt;/code&gt;, which is the monolithic deployment mode.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Flag&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--target&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Target module to run&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;all&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Refer to the &lt;a href=&#34;../plan/&#34;&gt;Plan your Tempo deployment&lt;/a&gt; documentation for information on deployment modes.&lt;/p&gt;
&lt;h2 id=&#34;authentication-and-multitenancy&#34;&gt;Authentication and multitenancy&lt;/h2&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Flag&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--auth.enabled&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Set to true to enable auth (deprecated: use multitenancy.enabled)&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--multitenancy.enabled&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Set to true to enable multitenancy&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;http-and-api-settings&#34;&gt;HTTP and API settings&lt;/h2&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Flag&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--http-api-prefix&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;String prefix for all HTTP API endpoints&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--enable-go-runtime-metrics&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Set to true to enable all Go runtime metrics&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--shutdown-delay&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;How long to wait between SIGTERM and shutdown&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;server-settings&#34;&gt;Server settings&lt;/h2&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Flag&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--server.http-listen-port&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;HTTP server listen port&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;80&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--server.grpc-listen-port&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;gRPC server listen port&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;9095&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;memberlist-settings&#34;&gt;Memberlist settings&lt;/h2&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Flag&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--memberlist.host-port&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Host port to connect to memberlist cluster&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--memberlist.bind-port&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Port for memberlist to communicate on&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;7946&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--memberlist.message-history-buffer-bytes&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Size in bytes for the message history buffer&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;module-configuration&#34;&gt;Module configuration&lt;/h2&gt;
&lt;p&gt;You can use additional flags to configuring individual Tempo modules, such as the distributor, ingester, querier, and their components. These flags follow a pattern like &lt;code&gt;--&amp;lt;module&amp;gt;.&amp;lt;setting&amp;gt;&lt;/code&gt; and are extensively documented in the configuration file format.&lt;/p&gt;
&lt;p&gt;Use the configuration file approach described in the 
    &lt;a href=&#34;/docs/tempo/v2.10.x/configuration/&#34;&gt;Configuration documentation&lt;/a&gt;.
The documentation has a comprehensive list of all configuration options.&lt;/p&gt;
&lt;h2 id=&#34;usage-examples&#34;&gt;Usage examples&lt;/h2&gt;
&lt;p&gt;Start Tempo with a configuration file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;tempo --config.file=/etc/tempo/config.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Start Tempo with a specific target:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;tempo --target=distributor --config.file=/etc/tempo/config.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Verify configuration without starting Tempo:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;tempo --config.file=/etc/tempo/config.yaml --config.verify&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Print version information:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;tempo --version&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="command-line-flags">Command line flags&lt;/h1>
&lt;p>Tempo provides various command-line flags to configure its behavior when starting the binary. This document serves as a reference for these flags.&lt;/p></description></item></channel></rss>