菜单
文档breadcrumb arrow Grafana Tempobreadcrumb arrow 管理breadcrumb arrow 通过缓存提升性能
开源

通过缓存提升性能

缓存主要用于通过存储所有后端块的布隆过滤器(在每次查询时访问)来提升查询性能。

Tempo 使用外部缓存来提升查询性能。Tempo 支持 MemcachedRedis

有关搜索性能的信息,请参阅调整搜索性能

Memcached

Memcached 是 Tempo 支持的缓存实现之一。在 Tanka 和 Helm 示例中默认使用它。请参阅部署 Tempo

连接限制

随着集群规模的增长,连接到缓存服务器的 Tempo 实例数量也会增加。默认情况下,Memcached 的连接限制为 1024。超出此限制时,Memcached 会拒绝连接。您可以通过增加 Memcached 的连接限制来解决此问题。

您可以使用 tempo_memcache_request_duration_seconds_count 指标来观察这些错误。例如,使用以下查询:

promql
sum by (status_code) (
  rate(tempo_memcache_request_duration_seconds_count{}[$__rate_interval])
)

此指标也显示在监控仪表盘(左侧面板)中。

QPS and latency of requests to memcached

请注意,已打开的连接会继续运行。新连接会被拒绝。

此外,当 Memcached 无法接受任何新请求时,会记录以下错误:

accept4(): No file descriptors available
Too many open connections
accept4(): No file descriptors available
Too many open connections

使用 memcached_exporter 时,您可以在 memcached_current_connections 指标处观察打开的连接数。

缓存大小控制

Tempo 查询器在搜索链路时会访问所有块的布隆过滤器。这实际上要求缓存大小至少为布隆过滤器总大小(工作集)。然而,在大型部署中,工作集可能大于所需的缓存大小。此时,缓存的驱逐率会升高,命中率会下降。

Tempo 提供两个配置参数来筛选缓存中存储的项目。

        # Min compaction level of block to qualify for caching bloom filter
        # Example: "cache_min_compaction_level: 2"
        [cache_min_compaction_level: <int>]

        # Max block age to qualify for caching bloom filter
        # Example: "cache_max_block_age: 48h"
        [cache_max_block_age: <duration>]

结合使用这些配置选项,您可以缩小缓存哪些布隆过滤器的范围,从而降低缓存驱逐率,并提高缓存命中率。

为了决定这些配置参数的值,您可以在 tempo-cli 中使用 cache summary 命令,该命令会打印每天和每个压缩级别的布隆过滤器分片摘要。结果示例如下:

Cache summary

此图片显示了 14 天和 6 个压缩级别的布隆过滤器分片。这可用于决定配置参数。