文章摘抄转载自:https://lluozh.blog.csdn.net/article/details/111027998

Loki 日志系统由以下3个部分组成:

  • loki是主服务器,负责存储日志和处理查询
  • promtail是专为loki定制的代理,负责收集日志并将其发送给 loki
  • Grafana用于查询和显示日志

整体架构



Loki 日志存储架构:

Loki 包含Distributor、Ingester、Querier和可选的Query frontend五个组件。每个组件都会起一个用于处理内部请求的 gRPC 服务器和一个用于处理外部 API 请求的 HTTP/1服务器

i. Distributor

Distributor 是客户端连接的组件,用于收集日志

在 promtail 收集并将日志发送给Loki 之后, Distributor 就是第一个接收它们的组件,每秒可以接收数百万次写入。Distributor会对接收到的日志流进行正确性校验,并将验证后的chunk日志块分批并行发送到Ingester。

ii. Ingester

Ingester 接收来自Distributor的日志流,并将日志压缩后存放到所连接的存储后端。

Ingester接受日志流并构建数据块,其操作通常是压缩和追加日志。每个Ingester 的生命周期有PENDING, JOINING, ACTIVE, LEAVING 和 UNHEALTHY 五种状态。处于JOINING和ACTIVE状态的Ingester可以接受写请求,处于ACTIVE和LEAVING状态时可以接受读请求。

Ingester 将收到的日志流在内存中打包成 chunks ,并定期同步到存储后端。由于存储的数据类型不同,Loki 的数据块和索引可以使用不同的存储

当满足以下条件时,chunks 会被标记为只读:

  • 当前 chunk 达到配置的最大容量
  • 当前 chunk 长时间没有更新
  • 发生了定期同步
  • 当旧的 chunk 经过了压缩并被打上了只读标志后,新的可写的 chunk 就会生成

iii. Querier

Querier 用来查询日志,可以直接从 Ingester 和后端存储中查询数据。当客户端给定时间区间和标签选择器之后,Querier 就会查找索引来确定所有匹配 chunk ,然后对选中的日志进行 grep并返回查询结果。查询时,Querier先访问所有Ingester用于获取其内存数据,只有当内存中没有符合条件的数据时,才会向存储后端发起同样的查询请求。

需要注意的是,对于每个查询,单个 Querier 会 grep 所有相关的日志。目前 Cortex 中已经实现了并行查询,该功能可以扩展到 Loki,通过分布式的 grep 加速查询。此外,由于副本因子的存在,Querier可能会接收到重复的数据,所以其内置了去重的功能,对拥有同样时间戳、标签组和消息内容的日志进行去重处理

Loki与其他日志聚合系统差别:

  • 不对日志进行全文本索引。通过存储压缩的,非结构化的日志以及仅索引元数据,Loki更加易于操作且运行成本更低
  • 使用与Prometheus相同的标签对日志流进行索引和分组,从而使您能够使用与Prometheus相同的标签在指标和日志之间无缝切换。
  • 特别适合存储Kubernetes Pod日志。诸如Pod标签之类的元数据会自动被抓取并建立索引
  • 在Grafana中原生支持(需要Grafana v6.0及以上)

最新文章

  1. 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(二)
  2. office 2010 2013卸载工具
  3. bzoj4337: BJOI2015 树的同构
  4. 【Bochs 官方手册翻译】 第一章 Bochs介绍
  5. 禁止鼠标多次点击选中div中的文字
  6. 安卓在SQLiteOpenHelper类进行版本升级和降级
  7. elasticsearch的5种分片查询优先级
  8. U3D脚本开发基础
  9. [代码]JS原生Ajax,GET和POST
  10. mysql8.0.13修改密码
  11. ftp服务器搭建及简单操作
  12. Coursera, Deep Learning 4, Convolutional Neural Networks, week3, Object detection
  13. UVALive 6906 Cluster Analysis 并查集
  14. nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
  15. JavaScript正则表达式检验手机号码、邮箱、ip地址等
  16. apache虚拟主机设置泛域名的方法
  17. 主成分分析PCA学习一条龙
  18. win7 64位备份时, 无法启动服务,0x80070422
  19. winfrom cahce 问题
  20. AWS系列-磁盘扩容

热门文章

  1. 1_day01_java入门
  2. 基于MIndSpore框架的道路场景语义分割方法研究
  3. Webpack学习系列 - Webpack5 怎么集成Babel ?
  4. CentOS 定时计划任务设置
  5. 使用Properties集合存储数据,遍历取出Properties集合中的数据和Properties集合中的方法store和load
  6. Cayley 公式的另一种证明
  7. php命名空间粗解
  8. 流量如何才能变现?实际测试谷歌广告联盟(Google Adsense)的广告效果以及如何优化相关代码
  9. 利用Docker挂载Nginx-rtmp(服务器直播流分发)+FFmpeg(推流)+Vue.js结合Video.js(播放器流播放)来实现实时网络直播
  10. 黑马2022最新redis课程笔记知识点(面试用)持续更新