配置缓存以加速查询
Loki 支持两种类型的缓存:查询结果缓存和块缓存,以提高查询性能并减少对存储层的调用。Loki Helm Chart 中包含了 Memcached,并且默认启用了 chunksCache
和 resultsCache
。本节介绍建议的 Memcached 配置,以启用块和查询结果的缓存。
结果缓存
结果缓存存储 index-stat、instant-metric、label 和 volume 查询的结果,并支持日志查询的负缓存。在某些配置中,它有时被称为前端缓存。有关每种支持的请求类型的详细信息,请参阅组件部分。查询前端会查询结果缓存,以便在后续查询中使用。如果缓存结果不完整,查询前端会计算所需的子查询并将其发送给查询器执行,然后也缓存这些结果。为了协调上述所有过程,结果缓存使用计算并存储在标头中的查询哈希作为键。
索引查找缓存仅支持旧版 BoltDB 索引存储,并且默认配置为内存缓存。由于迁移到 TSDB 索引,现在使用附加磁盘/持久卷作为缓存,内存索引查找缓存已弃用。
块缓存
块使用 chunkRef
作为缓存键进行缓存,chunkRef
是 Loki ingesters 中块生成时的唯一引用。每次计算一组 chunkRef
以服务查询时,查询器都会在访问存储层之前查询块缓存。
查询结果比块小得多。随着 Loki 集群摄取量的增加,结果缓存可以继续发挥作用,而块缓存需要按比例增加内存需求。为了能够支持集群不断增长的需求,我们在 2023 年引入了对 memcached-extstore 的支持。Extstore 是 Memcached 的一个附加功能,它支持将 SSD 磁盘附加到 Memcached Pod 以最大限度地提高其容量。
请参阅这篇博客文章,了解 Grafana Cloud(我们的 SaaS 产品)在使用 memcached-extstore 方面的经验。有关如何调整 memcached-extstore 的更多信息,请查阅开源 memcached 文档。
开始之前
- 建议将不同类型的 Memcached 作为单独的组件部署(
memcached_frontend
和memcached_chunks
)。 - 截至 2025-02-06,建议使用
memcached:1.6.32-alpine
版本的库。 - 请查阅 Loki ksonnet memcached 部署和 ksonnet memcached 库。
- TSDB 索引格式不需要索引缓存。
- 有关扩展缓存的建议,请参阅集群规模调整页面。
步骤
启用和配置 Memcached
部署每个 Memcached 服务至少包含三个副本,并按如下方式配置每个服务
- 块缓存
--memory-limit=4096 --max-item-size=2m --conn-limit=1024
- 查询结果缓存
--memory-limit=1024 --max-item-size=5m --conn-limit=1024
- 块缓存
配置 Loki 使用缓存。
如果使用 Helm Chart
将
memcached.chunk_cache.host
设置为块缓存的 Memcached 地址,将memcached.results_cache.host
设置为查询结果缓存的 Memcached 地址,并将memcached.chunk_cache.enabled
和memcached.results_cache.enabled
设置为 true。确保 Memcached 的连接限制至少为
number_of_clients * max_idle_conns
。host
和service
选项取决于安装类型。例如,使用bitnami/memcached
Helm Chart 并执行以下命令时,service
值始终为memcached
。helm upgrade --install chunk-cache -n loki bitnami/memcached -f memcached-overrides-chunk.yaml helm upgrade --install results-cache -n loki bitnami/memcached -f memcached-overrides-results.yaml
当前的 Helm Chart 仅支持块缓存和结果缓存。
在这种情况下,Loki 配置如下
loki: memcached: chunk_cache: enabled: true host: chunk-cache-memcached.loki.svc service: memcached-client batch_size: 256 parallelism: 10 results_cache: enabled: true host: results-cache-memcached.loki.svc service: memcached-client default_validity: 12h
如果使用 Loki 配置文件,请修改 Loki 配置文件中的以下两个部分。
- 配置块缓存
chunk_store_config: chunk_cache_config: memcached: batch_size: 256 parallelism: 10 memcached_client: host: <chunk cache memcached host> service: <port name of memcached service>
- 配置查询结果缓存
query_range: cache_results: true results_cache: cache: memcached_client: consistent_hash: true host: <memcached host> service: <port name of memcached service> max_idle_conns: 16 timeout: 200ms update_interval: 1m
- 配置块缓存