首页 > 其他分享 >巧用缓存加速Loki查询

巧用缓存加速Loki查询

时间:2022-10-08 20:01:19浏览次数:43  
标签:缓存 default cache redis Loki config 巧用

正文共:1053字
预计阅读时间:3分钟

缓存在当下已被广泛的应用到大型业务系统当中 合理的使用缓存可有效加快应用速度、提升应用的可扩展性和降低对后端数据的性能依赖。那么对于Loki来说,它支持哪些缓存以及缓存的作用范围呢?小白今天带大家简单过下Loki中关于缓存的应用

缓存类型

cache_config是Loki的缓存配置区块,当前Loki 1.6支持的缓存主要是​​in-memory​​​、​​memcached​​​和​​redis​​。这三种缓存类型各有自己的场景需求,如果你的Loki是AllinOne部署话,三选一都可以。如果你的Loki是分布式的架构,那么可以选择redis作为主要缓存服务

  • 内存缓存(in-memory)
# 启动内存缓存
enable_fifocache: <boolean>
# 缺省缓存过期时间
default_validity: <duration>
fifocache:
# 缓存最大内存占用
max_size_bytes: <int> = 10000
# 字段限制,0无限制
max_size_items: <int> | default = 0
validity: <duration>
  • Memcached
# 启用Memcached后的后台配置
background:
#回写memcacehd的goroutines数目
writeback_goroutines: <int> | default = 10]
writeback_buffer: <int> = 10000
memcached:
# 过期时间
expiration: <duration>
batch_size: <int>
# 并发限制
parallelism: <int> | default = 100
memcached_client:
host: <string>
service: <string> | default = "memcached"
# 超时时间
timeout: <duration> | default = 100ms
# 最大空闲连接数
max_idle_conns: <int> | default = 100
update_interval: <duration> | default = 1m
consistent_hash: <bool>
  • Redis
redis
endpoint: <string>
timeout: <duration> | default = 100ms
# 过期时间
expiration: <duration> | default = 0s
max_idle_conns: <int> | default = 80
max_active_conns: <int> | default = 0
password: <string>
enable_tls: <boolean> | default = false

缓存作用域

  • 查询结果缓存

​queryrange_config​​里面定义了Loki查询时关于缓存和切块的配置,缓存的相关配置如下

# 查询缓存开关,默认关闭
cache_results: <boolean> | default = false
results_cache:
# 缓存配置块
cache: <cache_config>
  • 日志索引缓存

​index_queries_cache_config​​定义Loki的索引缓存,大部分情况下可以等同于日志label的查询缓存

storage_config:
#索引缓存有效时间
index_cache_validity: <duration> | default = 5m
index_queries_cache_config: <cache_config>

注意!index_cache_validity的时间要小于ingester_config.chunk_idle_period配置的时间。大意是日志的入到Loki后,缓存的日志索引在原始日志flush进存储前都为有效的,以保证查询的缓存索引是正确的。

  • 原始日志缓存

​chunk_store_config​​定义Loki将原始日志写入存储阶段的配置,这里引入缓存其主要目的为增大Loki接收日志的吞吐量。

chunk_store_config:
# 日志写入存储前的缓存配置
chunk_cache_config: <cache_config>
# 删除重复写入的日志缓存配置
write_dedupe_cache_config: <cache_config>

注意!对于原始日志(chunk)引入缓存,我们务必要将数据持久化,如果采用in-memory或者MemoryCache存在服务异常掉日志内容的风险,如果采用redis则最好把硬盘持久化打开

举个栗子

小白以redis作为Loki缓存来举个例子,让大家更直观看到关于缓存在全局配置里面的分布。

...
frontend:
compress_responses: true

query_range:
split_queries_by_interval: 24h
results_cache:
cache:
redis:
endpoint: redis:6379
expiration: 1h
cache_results: true

storage_config:
index_queries_cache_config:
redis:
endpoint: redis:6379
expiration: 1h

chunk_store_config:
chunk_cache_config:
redis:
endpoint: redis:6379
expiration: 1h
write_dedupe_cache_config:
redis:
endpoint: redis:6379
expiration: 1h
...

经过小白的测试,当前引入缓存对Loki的日志查询效果还是挺明显的,效果图如下,从P99的耗时数据来看,qeury_range接口的整体下降还是比较明显的。

巧用缓存加速Loki查询_缓存

下面是redis运行状态,看起来除了网络流量比较高外,其他压力也不大,完美的解决了小白的问题。

巧用缓存加速Loki查询_redis_02


标签:缓存,default,cache,redis,Loki,config,巧用
From: https://blog.51cto.com/u_15820126/5738635

相关文章

  • 今日实践:Loki丝滑般的数据切换
    正文共:2463字预计阅读时间:7分钟用过Loki的同学都知道,日志存储在Loki里主要分为两部分,日志原始文件以及日志索引。按照Loki数据的设计思路,日志原始文件可以存放在任何文件系......
  • lokijs
    ​​http://lokijs.org/#/​​ 500,000+ 1.1Mops/s. Afast,in-memorydocument-orienteddatastorefornode.js,browserandcordovaIn-memoryJavascriptDatastor......
  • 基于Golang的简易缓存系统实现
    github:https://github.com/jwcen/gocache本文来自博客园,作者:Jayvee,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/gocache-implement.html本项目,我们将了解缓存......
  • go-zero微服务实战系列(五、缓存代码怎么写)
    缓存是高并发服务的基础,毫不夸张的说没有缓存高并发服务就无从谈起。本项目缓存使用Redis,Redis是目前主流的缓存数据库,支持丰富的数据类型,其中集合类型的底层主要依赖:整数数......
  • Map<Integer,Value>放入缓存后取出来变成了Map<String,Value>
    背景将一个类型为Map<Integer,String>的一个Map对象放到redis中后,再次取出来时。当我们想便利Map.entrySet()获取每个Entry中的Key,如执行Integerkey=entry.getKey();那......
  • CPU缓存对性能的影响
    CPU缓存机制的几个特点及编写程序时需要注意的点:1.时间局部性,CPU缓存会假设,如果访问了某一内存区域的,那么很快会重复访问它需要时才声明变量,尽可能缩短对象的周期,提高缓......
  • 【.NET 6+Loki+Grafana】实现轻量级日志可视化服务功能
    前言:日志功能是几乎所有程序或系统都必备的一个功能。该文章通过使用Loki+Grafana来实现日志记录与可视化查询,欢迎围观。有关环境:操作系统:WIN10.NET环境:.NET6开发环......
  • 缓存雪崩等问题
    缓存雪崩就是在同一段时间内有大量缓存数据失效了(缓存过期了、被内存淘汰策略淘汰了或者Redis服务宕机了),然后在这段时间内又有请求想要获取这些数据,因为这些缓存数据已经......
  • MyBatis框架:第十章:mybatis缓存
    mybatis缓存说明:缓存指的是把一些常用的数据,保存到一个可以高速读取的缓冲区中。方便程序在频繁读取的时候,可以快速的取出数据。这就叫做缓存。一级缓存指的是,这些缓存......
  • 2022年中国研究生数学建模竞赛C题代码及参考思路-汽车制造涂装-总装缓存调序区调度优
    一、背景介绍汽车制造厂主要由焊装车间、涂装车间、总装车间构成,每个车间有不同的生产偏好,如:焊装车间由于车身夹具的限制偏向最小车型及配置切换生产,涂装车间由于喷漆(固定每......