diff --git a/CHANGELOG.md b/CHANGELOG.md index a86e11d57d9..63176986347 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * [FEATURE] Ruler: Experimental: Add `ruler.frontend-address` to allow query to query frontends instead of ingesters. #6151 * [FEATURE] Ruler: Minimize chances of missed rule group evaluations that can occur due to OOM kills, bad underlying nodes, or due to an unhealthy ruler that appears in the ring as healthy. This feature is enabled via `-ruler.enable-ha-evaluation` flag. #6129 * [FEATURE] Store Gateway: Add an in-memory chunk cache. #6245 +* [ENHANCEMENT] Index Cache: Add a configuration for an index cache ttl. #6234 * [ENHANCEMENT] Ingester: Add `blocks-storage.tsdb.wal-compression-type` to support zstd wal compression type. #6232 * [ENHANCEMENT] Query Frontend: Add info field to query response. #6207 * [ENHANCEMENT] Query Frontend: Add peakSample in query stats response. #6188 diff --git a/docs/blocks-storage/querier.md b/docs/blocks-storage/querier.md index ba6caa34e30..b94b61fe31f 100644 --- a/docs/blocks-storage/querier.md +++ b/docs/blocks-storage/querier.md @@ -642,6 +642,10 @@ blocks_storage: # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.index-ttl + [index_ttl: | default = 24h] + redis: # Comma separated list of redis addresses. Supported prefixes are: dns+ # (looked up as an A/AAAA query), dnssrv+ (looked up as a SRV query, @@ -772,6 +776,10 @@ blocks_storage: # CLI flag: -blocks-storage.bucket-store.index-cache.redis.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.redis.index-ttl + [index_ttl: | default = 24h] + multilevel: # The maximum number of concurrent asynchronous operations can occur # when backfilling cache items. diff --git a/docs/blocks-storage/store-gateway.md b/docs/blocks-storage/store-gateway.md index 5279be48672..732042e0d60 100644 --- a/docs/blocks-storage/store-gateway.md +++ b/docs/blocks-storage/store-gateway.md @@ -757,6 +757,10 @@ blocks_storage: # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.index-ttl + [index_ttl: | default = 24h] + redis: # Comma separated list of redis addresses. Supported prefixes are: dns+ # (looked up as an A/AAAA query), dnssrv+ (looked up as a SRV query, @@ -887,6 +891,10 @@ blocks_storage: # CLI flag: -blocks-storage.bucket-store.index-cache.redis.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.redis.index-ttl + [index_ttl: | default = 24h] + multilevel: # The maximum number of concurrent asynchronous operations can occur # when backfilling cache items. diff --git a/docs/configuration/config-file-reference.md b/docs/configuration/config-file-reference.md index ceda75705bb..bc0b0cdfc6e 100644 --- a/docs/configuration/config-file-reference.md +++ b/docs/configuration/config-file-reference.md @@ -1194,6 +1194,10 @@ bucket_store: # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.index-ttl + [index_ttl: | default = 24h] + redis: # Comma separated list of redis addresses. Supported prefixes are: dns+ # (looked up as an A/AAAA query), dnssrv+ (looked up as a SRV query, @@ -1323,6 +1327,10 @@ bucket_store: # CLI flag: -blocks-storage.bucket-store.index-cache.redis.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.redis.index-ttl + [index_ttl: | default = 24h] + multilevel: # The maximum number of concurrent asynchronous operations can occur when # backfilling cache items. diff --git a/pkg/storage/tsdb/index_cache.go b/pkg/storage/tsdb/index_cache.go index 74506896526..50713810883 100644 --- a/pkg/storage/tsdb/index_cache.go +++ b/pkg/storage/tsdb/index_cache.go @@ -157,6 +157,7 @@ func (cfg *InMemoryIndexCacheConfig) RegisterFlagsWithPrefix(f *flag.FlagSet, pr type MemcachedIndexCacheConfig struct { ClientConfig MemcachedClientConfig `yaml:",inline"` EnabledItems []string `yaml:"enabled_items"` + IndexTTL time.Duration `yaml:"index_ttl"` } func (cfg *MemcachedIndexCacheConfig) Validate() error { @@ -169,16 +170,19 @@ func (cfg *MemcachedIndexCacheConfig) Validate() error { func (cfg *MemcachedIndexCacheConfig) RegisterFlagsWithPrefix(f *flag.FlagSet, prefix string) { cfg.ClientConfig.RegisterFlagsWithPrefix(f, prefix) f.Var((*flagext.StringSlice)(&cfg.EnabledItems), prefix+"enabled-items", "Selectively cache index item types. Supported values are Postings, ExpandedPostings and Series") + f.DurationVar(&cfg.IndexTTL, prefix+"index-ttl", defaultTTL, "How long to cache an index for a block.") } type RedisIndexCacheConfig struct { ClientConfig RedisClientConfig `yaml:",inline"` EnabledItems []string `yaml:"enabled_items"` + IndexTTL time.Duration `yaml:"index_ttl"` } func (cfg *RedisIndexCacheConfig) RegisterFlagsWithPrefix(f *flag.FlagSet, prefix string) { cfg.ClientConfig.RegisterFlagsWithPrefix(f, prefix) f.Var((*flagext.StringSlice)(&cfg.EnabledItems), prefix+"enabled-items", "Selectively cache index item types. Supported values are Postings, ExpandedPostings and Series") + f.DurationVar(&cfg.IndexTTL, prefix+"index-ttl", defaultTTL, "How long to cache an index for a block.") } func (cfg *RedisIndexCacheConfig) Validate() error { @@ -217,8 +221,7 @@ func NewIndexCache(cfg IndexCacheConfig, logger log.Logger, registerer prometheu if err != nil { return nil, err } - // TODO(yeya24): expose TTL - cache, err := storecache.NewRemoteIndexCache(logger, c, nil, iReg, defaultTTL) + cache, err := storecache.NewRemoteIndexCache(logger, c, nil, iReg, cfg.Memcached.IndexTTL) if err != nil { return nil, err } @@ -229,8 +232,7 @@ func NewIndexCache(cfg IndexCacheConfig, logger log.Logger, registerer prometheu if err != nil { return nil, err } - // TODO(yeya24): expose TTL - cache, err := storecache.NewRemoteIndexCache(logger, c, nil, iReg, defaultTTL) + cache, err := storecache.NewRemoteIndexCache(logger, c, nil, iReg, cfg.Redis.IndexTTL) if err != nil { return nil, err }