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

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

ruisui884个月前 (02-03)技术分析38

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实用查询优化方式(查询优化的目的和方法)” 的相关文章

快速上手React

web前端三大主流框架1、Angular大家眼里比较牛的框架,甚至有人说三大框架中只有它能称得上一个完整的框架,因为它包含的东西比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能。对于刚开始学习使用框架的小伙伴们,可以推荐这个框架,学会之后简直能颠覆之前你对前端开发的认...

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了,所以真的要学习一下 Vue3.0 的语法了。本篇文章总共分两部分,望小伙伴们认真阅读。下一篇:10...

jvm疯狂吃内存,到底是谁的锅?

jvm应该是每一个java程序员都需要掌握的内容,但是在没有遇到问题之前,很多都是基于理论的,唯有实战才能增加个人的知识储备。本文是从一个角度来分析是谁在狂吃内存,希望对你有所帮助。本文是易观技术人员注意到一台开发机上各个微服务进程占用内存很高,随即便展开了调查......ps:本文来源于:http...

国产操作系统上Vim的详解03--安装和使用插件 | 统信 | 麒麟 | 中科方德

原文链接:国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插件管理器,可以帮助我们轻松地安...

VIM配置整理

一、基本配色set number set showcmd set incsearch set expandtab set showcmd set history=400 set autoread set ffs=unix,mac,dos set hlsearch set shiftwidth=2 s...

BuildKit 镜像构建工具

#暑期创作大赛#快速开始 对于 Kubernetes 部署,请参阅examples/kubernetes。BuildKit 由buildkitd守护进程和buildctl客户端组成。虽然buildctl客户端可用于 Linux、macOS 和 Windows,但buildkitd守护程序目前仅适用于...