当前位置:首页 > 技术分析 > 正文内容

实践中总结Loki实用查询优化方式(查询优化的目的和方法)

ruisui883个月前 (02-03)技术分析16

Loki是一个基于日志的分布式系统,它提供了一个简单而有效的方式来收集、聚合和查询日志数据。然而,在处理大量日志数据时,性能和稳定性问题可能会成为一个瓶颈。在这篇文章中,我们将介绍一些优化Loki服务的方式,以提高性能和可靠性。

1. 配置Loki实例

1.1 调整GOMAXPROCS

GOMAXPROCS是Golang的环境变量,用于控制可以同时执行的最大线程数。将它设置为CPU核心数可以最大程度地利用CPU资源。对于Loki服务而言,建议将其设置为物理核心数的2倍。

export GOMAXPROCS=16

1.2 调整块大小

Loki将日志数据存储在一系列的块中,每个块包含一定时间范围内的日志数据。块的大小对查询性能和存储效率都有影响。如果块太小,查询时需要扫描更多的块,从而影响查询性能。如果块太大,可能会浪费存储空间。

建议将块大小设置为10-50MB之间。可以使用以下配置修改块大小:

ingester:
  chunk_idle_period: 10m
  max_chunk_age: 1h
  chunk_target_size: 20M  # 修改块大小
  chunk_retain_period: 30d
  chunk_encoding: snappy # 高效压缩

2. 使用索引

2.1 索引生命周期

索引是一种用于加速查询的数据结构。Loki使用基于时间的索引来快速定位日志数据。索引数据会占用一定的磁盘空间,因此需要对索引的生命周期进行管理,以保证性能和存储效率。

建议对索引的生命周期进行定期维护,删除过期的索引数据。可以使用以下命令删除过期索引:

loki index delete --config.file=loki.yaml --delete-older-than=48h

3 使用 Loki 的聚合功能

Loki 支持对查询结果进行聚合,从而减少返回数据的大小。聚合操作可以通过 sum, avg, min, max, count 等函数实现。

3.1. 使用 sum 函数

使用 sum 函数可以将查询结果中的某个标签的值相加。例如,查询某个服务的请求数:

sum(request_count{service="myservice"})

3.2. 使用 count 函数

使用 count 函数可以统计查询结果中标签的数量。例如,查询某个服务的请求数量:

count(request_count{service="myservice"})

3.3. 使用 topk 函数

使用 topk 函数可以查询某个标签的前 k 个值。例如,查询某个服务访问次数最多的前 10 个 IP:

topk(10, sum(request_count) by (service, ip))

4 使用缓存

Loki支持使用缓存(内存缓存,Redis,memcache),加速查询速度

query_range:
  results_cache:
    cache:
      redis:
        endpoint: loki-redis:6379
        expiration: 24h
        db: 4
        pool_size: 10
        password: abc
  align_queries_with_step: true
  max_retries: 5 //最大重试次数
  parallelise_shardable_queries: true // 并行查询
  cache_results: true // 缓存查询结果
chunk_store_config:
  chunk_cache_config: // 写入块存储
    redis:
      endpoint: loki-redis:6379
      expiration: 2h
      db: 1
      pool_size: 10
      password: 123
  write_dedupe_cache_config:
    redis:
      endpoint: loki-redis:6379
      expiration: 2h
      db: 2
      pool_size: 10
      password: 123
querier:
  query_timeout: 5m
  query_ingesters_within: 2h
  max_concurrent: 20 # 并发查询
  engine:
      timeout: 5m

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1044.html

标签: 查询优化
分享给朋友:

“实践中总结Loki实用查询优化方式(查询优化的目的和方法)” 的相关文章

vue项目-父页面数据变化使子页面更新的几种情况

当操作页面时候,特别是增删改操作之后,数据会有所改变,这个时候我们希望组件中的数据要和最新数据一致,就需要重新更新渲染。以下是针对几种不同情况下方式:一.子页面调用接口后重新渲染1.使用ref方式父组件中用ref=“xxx” 来声明子组件,然后通过在父组件值改变的地方来调用子组件中的方法this.$...

博信股份新战略后再推新品 TOPPERS E2耳机售价199元

中新网6月21日电 20日,博信股份在北京正式推出新品TOPPERS主动降噪耳机E2,这是博信股份继2月战略暨新品发布会后的第二次新品亮相。价格方面,TOPPERS主动降噪耳机E2零售价199元,并于6月20日下午4点在京东商城公开销售。据介绍,TOPPERS主动降噪耳机E2采用AMS(奥地利微电子...

VUE-router

七.Vue-router1、什么是vue-routervue-router是vue.js官方路由管理器。vue的单页应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统页面切换是用超链接a标签进行切换。但vue里是用路由,因为我们用Vue做的都是单页应用,就相当于只有一个主的i...

Vue真是太好了 壹万多字的Vue知识点 超详细!

1??、Vue和其他两大框架的区别Angular 学习成本太高React 代码可读性差Vue 学习成本较低 很容易上手VUE官方: https://cn.vuejs.org/v2/guide/comparison.html?2??、Vue是什么Vue是一套用于构建用户界面的渐进式框架 "前端...

vue2中路由的使用步骤,你学会了吗?

今天我们来整理下关于vue2中路由的使用步骤:1. 导入 vue 文件和Vue-router文件(注意:vue-router是依赖vue运行的,所以一定在vue后引入vue-router)2. 定义路由组件模板3. 创建路由实例并定义路由规则4. 将路由实例挂载给Vue实例5. 在结构区域定义控制路...

vue打开新窗口并且实现传参,有图有真相

我要实现的功能是打开一个新窗口用来展示新页面,而且需要传参数,并且参数不能显示在地址栏里面,而且当我刷新页面的时候,传过来的参数不能丢失,要一直存在,除非我手动关闭这个新窗口,即浏览器的标签页。通过面向百度编程,发现网上的根本达不到这个效果,而且还都是坑,明明实现不了,还若有其事的写出来,于是我在标...