Skip to content

Commit

Permalink
[DOC] Release notes for 2.4 (#3421)
Browse files Browse the repository at this point in the history
* Release notes for 2.4

* Release notes for 2.4

* Remove blank lines

* Update v2-4.md

* Update docs/sources/tempo/setup/upgrade.md

* Update docs/sources/tempo/release-notes/v2-4.md

* Update docs/sources/tempo/release-notes/v2-4.md

* Apply suggestions from code review

Co-authored-by: Jennifer Villa <[email protected]>
Co-authored-by: Joe Elliott <[email protected]>

* updates from Joe and Jen comments

* Update docs/sources/tempo/release-notes/v2-4.md

* Apply suggestions from code review

* Remove longer config example

---------

Co-authored-by: Jennifer Villa <[email protected]>
Co-authored-by: Joe Elliott <[email protected]>
  • Loading branch information
3 people authored Feb 26, 2024
1 parent 213be45 commit 8514fc0
Show file tree
Hide file tree
Showing 2 changed files with 327 additions and 5 deletions.
228 changes: 228 additions & 0 deletions docs/sources/tempo/release-notes/v2-4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
---
title: Version 2.4 release notes
menuTitle: V2.4
description: Release notes for Grafana Tempo 2.4
weight: 40
---

# Version 2.4 release notes

The Tempo team is pleased to announce the release of Tempo 2.4.

This release gives you:

* New features, including multi-tenant queries and experimental TraceQL metrics queries
* Performance enhancements, thanks to the addition of new caching tiers
* Cost savings, thanks to polling improvements that reduce calls to object storage

As part of this release, vParquet3 has also been promoted to the new default storage format for traces. For more about why we’re so excited about vParquet3, refer to [Accelerate TraceQL queries at scale with dedicated attribute columns in Grafana Tempo](/blog/2024/01/22/accelerate-traceql-queries-at-scale-with-dedicated-attribute-columns-in-grafana-tempo/).

Read the [Tempo 2.4 blog post](/blog/2023/11/01/grafana-tempo-2.3-release-faster-trace-queries-traceql-upgrades/) for more examples and details about these improvements.

These release notes highlight the most important features and bugfixes. For a complete list, refer to the [Tempo changelog](https://github.com/grafana/tempo/releases).

## Features and enhancements

The most important features and enhancements in Tempo 2.4 are highlighted below.

### Multi-tenant queries

Tempo now allows you to query multiple tenants at once. We’ve made multi-tenant queries compatible with streaming ([first released in v2.2]({{< relref "./v2-2#get-traceql-results-faster" >}})) so you can get query results as fast as possible. To learn more, refer to [Cross-tenant federation]({{< relref "../operations/cross_tenant_query" >}}) and [Enable multi-tenancy]({{< relref "../operations/multitenancy" >}}). [PRs [3262](https://github.com/grafana/tempo/pull/3262), [3087](https://github.com/grafana/tempo/pull/3087)]

### TraceQL metrics (experimental)

We’re excited to announce the addition of metrics queries to the TraceQL language. Metric queries extend trace queries by applying a function to trace query results.
This powerful feature creates metrics from traces, much in the same way that LogQL metric queries create metrics from logs.

In this case, we are calculating the rate of the erroring spans coming from the service `foo`. Rate is a `spans/sec` quantity.

```
{ resource.service.name = "foo" && status = error } | rate()
```

In addition, you can use Grafana Explore to [query and visualize the metrics]({{< relref "../operations/traceql-metrics" >}}) with the Tempo data soruce in Grafana or Grafana Cloud.

![Metrics visualization in Grafana](/media/docs/tempo/metrics-explore-sample-2.4.png)

For more information, refer to the [TraceQL metrics]({{< relref "../operations/traceql-metrics" >}}) documentation. [PRs [3227](https://github.com/grafana/tempo/pull/3227) [#3252](https://github.com/grafana/tempo/pull/3252), [3258](https://github.com/grafana/tempo/pull/3258)]

To learn more about the TraceQL syntax, see the [TraceQL documentation]({{< relref "../traceql" >}}). For information on planned future extensions to the TraceQL language, refer to [future work]({{< relref "../traceql/architecture" >}}).

#### TraceQL performance improvements

We continue to make query performance improvements so you spend less time waiting on results to your TraceQL queries. Below are some notable PRs that made it into this release:

* Improve TraceQL regex performance in certain queries. [PR [3139](https://github.com/grafana/tempo/pull/3139)]
* Improve TraceQL performance in complex queries. [[PR 3113](https://github.com/grafana/tempo/pull/3113)]
* TraceQL/Structural operators performance improvement. [[PR 3088](https://github.com/grafana/tempo/pull/3088)]

### vParquet3 is now the default block format

Tempo 2.4 makes [vParquet3]({{< relref "../configuration/parquet" >}}) the default storage format.

We’re excited about [vParquet3]({{< relref "../configuration/parquet" >}}) relative to prior formats because of its support for [dedicated attribute columns]({{< relref "../operations/dedicated_columns" >}}), which help speed up queries on your largest and most queried attributes. We've seen excellent performance improvements when running it ourselves, and by promoting it to the default, we're signaling that it is ready for broad adoption.

Dedicated attribute columns, available using vParquet3, improve query performance by storing the largest and most frequently used attributes in their own columns, rather than in the generic attribute key-value list.
For more information, refer to
[Accelerate TraceQL queries at scale with dedicated attribute columns in Grafana Tempo](/blog/2024/01/22/accelerate-traceql-queries-at-scale-with-dedicated-attribute-columns-in-grafana-tempo/). [[PR 2526](https://github.com/grafana/tempo/pull/2526)]

If you had manually configured vParquet3, we recommend removing it to move forward with Tempo defaults.

To read more about the design of vParquet3, refer to [the design proposal](https://github.com/grafana/tempo/blob/main/docs/design-proposals/2023-05%20vParquet3.md). For general information, refer to [the Apache Parquet schema]({{< relref "../operations/schema" >}}).

### Additional caching layers

Tempo has added two new caches to improve TraceQL query performance. The frontend-search cache handles job search caching. The parquet-page cache handles page level caching. Refer to the [Cache section]({{< relref "../configuration#cache" >}}) of the Configuration documentation for how to configure these new caching layers. As part of adding these new caching layers, we’ve refactored our caching interface. This includes breaking changes described in “Breaking Changes”. [PRs [3166](https://github.com/grafana/tempo/pull/3166), [3225](https://github.com/grafana/tempo/pull/3225), [3196](https://github.com/grafana/tempo/pull/3196)]

### Polling improvements for cost reduction

We’ve improved how Tempo polls object storage, ensuring that we reuse previous results. This has dramatically reduced the number of requests Tempo makes to the object store. Not only does this reduce the load on your object store, for many, it will save you money (since most hosted object storage solutions charge per request).

We’ve also added the `list_blocks_concurrency` parameter to allow you to tune the number of list calls Tempo makes in parallel to object storage so you can select the value that works best for your environment. We’ve set the default value to `3`, which should work well for the average Tempo cluster. [[PR 2652](https://github.com/grafana/tempo/pull/2652)]

### Other enhancements and improvements

In addition, the following improvements have been made in Tempo 2.4:

* Improved Tempo error handling on writes, so that one erroring trace doesn't result in an entire batch of traces being dropped. [PR 2571](https://github.com/grafana/tempo/pull/2571)
* Added per-tenant compaction window. [PR 3129](https://github.com/grafana/tempo/pull/3129)
* Added `--max-start-time` and `--min-start-time` flag to tempo-cli command `analyse blocks`. [PR 3250](https://github.com/grafana/tempo/pull/3250)
* Added per-tenant configurable `remote_write` headers to metrics-generator. [#3175](https://github.com/grafana/tempo/pull/3175)
* Added variable expansion support to overrides configuration. [PR 3175](https://github.com/grafana/tempo/pull/3175)
* Added HTML pages `/status/overrides` and `/status/overrides/{tenant}`. [PR 3244](https://github.com/grafana/tempo/pull/3244) [#3332](https://github.com/grafana/tempo/pull/3332)
* Precalculate and reuse the vParquet3 schema before opening blocks. [PR 3367](https://github.com/grafana/tempo/pull/3367)
* Made the trace ID label name configurable for remote written exemplars. [PR 3074](https://github.com/grafana/tempo/pull/3074)
* Performance improvements in span filtering. [PR 3025](https://github.com/grafana/tempo/pull/3025)
* Introduced localblocks process configuration option to select only server spans. [PR 3303](https://github.com/grafana/tempo/pull/3303)

## Upgrade considerations

When [upgrading]({{< relref "../setup/upgrade" >}}) to Tempo 2.4, be aware of these considerations and breaking changes.

### Transition to vParquet 3

vParquet3 format is now the default block format. It is production ready and we highly recommend switching to it for improved query performance and [dedicated attribute columns]({{< relref "../operations/dedicated_columns" >}}).

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.

With this release, the first version of our Parquet backend, vParquet, is being deprecated. Tempo 2.4 will still read vParquet1 blocks. However, Tempo will exit with error if they are manually configured. [[PR 3377](https://github.com/grafana/tempo/pull/3377/files#top)]

For information on upgrading, refer to [Upgrade to Tempo 2.4]({{< relref "../setup/upgrade" >}}) and [Choose a different block format]({{< relref "../configuration/parquet#choose-a-different-block-format" >}}) .

### Updated, removed, or renamed configuration parameters

<table>
<tr>
<td>Parameter
</td>
<td>Comments
</td>
</tr>
<tr>
<td><code>autocomplete_filtering_enabled</code>
</td>
<td>Set to <code>true</code> by default [PR <a href="https://github.com/grafana/tempo/pull/3178">3178</a>]
</td>
</tr>
<tr>
<td><code>distributor.log_received_traces</code>
</td>
<td>Use the <code>distributor.log_received_spans</code> configuration block instead. [PR <a href="https://github.com/grafana/tempo/pull/3008">#3008</a>]
</td>
</tr>
<tr>
<td><code>tempo_query_frontend_queries_total{op="searchtags|metrics"}</code>
</td>
<td>Removed deprecated frontend metrics configuration option
</td>
</tr>
<tr>
<td>
```
storage:
trace:
cache:
search:
cache_control:
background_cache:
memcached:
```

</td>
<td>These fields have been removed in favor of the new cache configuration. Refer to Cache configuration refactored.

</td>
</tr>
</table>

The distributor now returns 200 for any batch containing only `trace_too_large` and `max_live_traces` errors. The number of discarded spans are still reflected in the `tempo_discarded_spans_total metrics`.

### Removed experimental websockets support for search streaming

GPRC is now the supported method for streaming results.
Websockets support for search streaming has been removed.
Websocket support was initially added due to conflicts with GRPC, HTTP, and TLS.
Those issues were corrected [in PR 3300](https://github.com/grafana/tempo/pull/3300). [PR 3307](https://github.com/grafana/tempo/pull/3307)

### Cache configuration refactored

The major cache refactor to allow multiple role-based caches to be configured. [[PR 3166](https://github.com/grafana/tempo/pull/3166)]
This change resulted in the following fields being deprecated.
These have all been migrated to a top level `cache:` field.

For more information about the configuration, refer to the [Cache]({{< relref "../configuration#cache" >}}) section.

The old configuration block looked like this:

```yaml
storage:
trace:
cache:
search:
cache_control:
background_cache:
memcached:
redis:
```
With the new configuration, you create your list of caches,- with either `redis` or `memcached` cluster with your config, then define the types of data and roles.

```yaml
cache:
caches:
- memcached:
host: <some memcached cluster>
roles:
- bloom
- parquet-footer
- memcached:
host: <some memcached cluster>
roles:
- frontend-search
```

## Security fixes

The following vulnerabilities have been addressed:

* Addressed [CVE-2023-5363](https://github.com/advisories/GHSA-xw78-pcr6-wrg8).
* Updated the `memcached` default image in jsonnet for multiple CVEs [PR 3310](https://github.com/grafana/tempo/pull/3310)

## Bugfixes

For a complete list, refer to the [Tempo changelog](https://github.com/grafana/tempo/releases).

* Prevent building parquet iterators that would loop forever. [PR 3159](https://github.com/grafana/tempo/pull/3159)
* Sanitize name in mapped dimensions in span-metrics processor. [PR 3171](https://github.com/grafana/tempo/pull/3171)
* Fixed an issue where cached footers were requested then ignored. [PR 3196](https://github.com/grafana/tempo/pull/3196)
* Fixed a panic in autocomplete when the query condition had the wrong type. [PR 3277](https://github.com/grafana/tempo/pull/3277)
* Fixed TLS when GRPC is enabled on HTTP. [PR 3300](https://github.com/grafana/tempo/pull/3300)
* Correctly return 400 when max limit is requested on search. [PR 3340](https://github.com/grafana/tempo/pull/3340)
* Fixed autocomplete filters sometimes returning erroneous results. [PR 3339](https://github.com/grafana/tempo/pull/3339)
* Fixed trace context propagation between query-frontend and querier. [PR 3387](https://github.com/grafana/tempo/pull/3387)
* Fixed parsing of span.resource.xyz attributes in TraceQL. [PR 3284](https://github.com/grafana/tempo/pull/3284)
* Changed exit code if config is successfully verified. [PR 3174](https://github.com/grafana/tempo/pull/3174)
* The tempo-cli analyze blocks command no longer fails on compacted blocks. [PR 3183](https://github.com/grafana/tempo/pull/3183)
* Moved waitgroup handling for poller error condition. [PR 3224](https://github.com/grafana/tempo/pull/3224)
* Fixed head block excessive locking in ingester search. [PR 3328](https://github.com/grafana/tempo/pull/3328)
* Fixed an issue with ingester failed to write traces to disk after a crash or unclean restart. [PR 3346](https://github.com/grafana/tempo/issues/3346)
104 changes: 99 additions & 5 deletions docs/sources/tempo/setup/upgrade.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,101 @@ The upgrade process changes for each version, depending upon the changes made fo

This upgrade guide applies to on-premise installations and not for Grafana Cloud.

>**TIP**: You can check your configuration options using the [`status` API endpoint]({{< relref "../api_docs#status" >}}) in your Tempo installation.
{{% admonition type="tip" %}}
You can check your configuration options using the [`status` API endpoint]({{< relref "../api_docs#status" >}}) in your Tempo installation.
{{% /admonition %}}

## Upgrade to Tempo 2.4

Tempo 2.4 has several considerations for any upgrade:

* vParquet3 is now the default backend
* Caches configuration was refactored
* Updated, removed, and renamed configuration parameters

For a complete list of changes, enhancements, and bug fixes, refer to the [Tempo 2.4 changelog](https://github.com/grafana/tempo/releases).

### Transition to vParquet3 as default block format

vParquet3 format is now the default block format. It is production ready and we highly recommend switching to it for improved query performance and [dedicated attribute columns]({{< relref "../operations/dedicated_columns" >}}).

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.

With this release, the first version of our Parquet backend, vParquet, is being deprecated.
Tempo 2.4 will still read vParquet1 blocks.
However, Tempo will exit with error if they are manually configured. [[PR 3377](https://github.com/grafana/tempo/pull/3377/files#top)]

For information on changing the vParquet version, refer to [Choose a different block format](https://grafana.com/docs/tempo/next/configuration/parquet#choose-a-different-block-format).

### Cache configuration refactored

The major cache refactor to allow multiple role-based caches to be configured. [[PR 3166](https://github.com/grafana/tempo/pull/3166)]
This change resulted in the following fields being deprecated.
These have all been migrated to a top level `cache:` field.

For more information about the configuration, refer to the [Cache]({{< relref "../configuration#cache" >}}) section.

The old configuration block looked like this:

```yaml
storage:
trace:
cache:
search:
cache_control:
background_cache:
memcached:
redis:
```
With the new configuration, you create your list of caches, with either `redis` or `memcached` cluster with your configuration, and then define the types of data and roles.

Simple configuration example:

```yaml
cache:
caches:
- memcached:
host: <some memcached cluster>
roles:
- bloom
- parquet-footer
- memcached:
host: <some memcached cluster>
roles:
- frontend-search
```

### Updated, removed, or renamed configuration parameters

<table>
<tr>
<td>Parameter
</td>
<td>Comments
</td>
</tr>
<tr>
<td><code>autocomplete_filtering_enabled</code>
</td>
<td>Set to <code>true</code> by default [PR <a href="https://github.com/grafana/tempo/pull/3178">3178</a>]
</td>
</tr>
<tr>
<td><code>distributor.log_received_traces</code>
</td>
<td>Use the <code>distributor.log_received_spans</code> configuration block instead. [PR <a href="https://github.com/grafana/tempo/pull/3008">#3008</a>]
</td>
</tr>
<tr>
<td><code>tempo_query_frontend_queries_total{op="searchtags|metrics"}</code>
</td>
<td>Removed deprecated frontend metrics configuration option
</td>
</tr>
</table>

The distributor now returns 200 for any batch containing only `trace_too_large` and `max_live_traces` errors. The number of discarded spans are still reflected in the `tempo_discarded_spans_total metrics`.

## Upgrade to Tempo 2.3

Expand All @@ -32,10 +126,10 @@ vParquet3 provides improved query performance and [dedicated attribute columns](

This block format is required for using dedicated attribute columns.

While vParquet2 remains the default backend for Tempo 2.3, vParquet3 is available as a stable option.
While vParquet2 remains the default backend for Tempo 2.3, vParquet3 is available as a stable option.
Both work with Tempo 2.3.

Upgrading to Tempo 2.3 doesn’t modify the Parquet block format.
Upgrading to Tempo 2.3 doesn’t modify the Parquet block format.

{{% admonition type="note" %}}
Tempo 2.2 can’t read data stored in vParquet3.
Expand All @@ -49,7 +143,7 @@ Recommended update process:

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.
However, if you have vParquet3 blocks and have to downgrade to Tempo 2.2, you will have data loss.

### Use Azure SDK v2

Expand Down Expand Up @@ -107,7 +201,7 @@ overrides:
<tr>
<td><code>distributor.log_received_traces</code>
</td>
<td>Use the <code>distributor.log_received_spans</code> configuration block instead. [PR <a href="https://github.com/grafana/tempo/pull/3008">#3008</a>]
<td>Use the <code>distributor.log_received_spans</code> configuration block instead. [PR <a href="https://github.com/grafana/tempo/pull/3008">3008</a>]
</td>
</tr>
<tr>
Expand Down

0 comments on commit 8514fc0

Please sign in to comment.