侧边栏壁纸
博主头像
平凡的运维之路博主等级

行动起来,活在当下

  • 累计撰写 49 篇文章
  • 累计创建 25 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

Loki理论篇

平凡的运维之路
2024-10-16 / 0 评论 / 0 点赞 / 18 阅读 / 11341 字

开启日志汇聚之Loki

Loki说明

  • 将Loki的所有微服务组件打包部署到单一进程中。

  • 适合小规模系统的日志存储场景(每天不超过100G),在必要时,可部署共享外部对象存储(minio)的多实例进行水平扩容。

  • 支持高可的部署方式

    • 多个实例需要配置共享的外部对象存储
    • 需要设定合理的复制因子
  • Loki分为两个部分,一个是promtail用于采集日志、另一个是Loki服务端。


架构图

loki架构.png


各组件说明

Promtail

  • Promtail负责在节点上收集日志并push到Loki Server,它支持与Prometheus相同的服务发现机制,以及重新打标、格式转换和过滤功能
  • Promtail是专为Loki设计的日志收集器,它的职责包括:发现目标、向日志信息附加标签,向Loki推送日志流

Loki

  • Loki Server负责接收并存储日志信息,但它不会索引日志文本,而仅是完成标签索引,从而显著降低系统开销及接近实时的查询性能;

Grafana

  • 一个用于监控和可视化观测的开源平台,支持非常丰富的数据源,在 Loki 技术栈中它专门用来展示来自 Prometheus 和 Loki 等数据源的时间序列数据,可进行查询、可视化、报警等操作,可以用于创建、探索和共享数据 Dashboard,鼓励数据驱动。

AlertManager

  • 用户可编写告警规则并进行周期性评估,超出合理阈值或者阈值范围的日志信息,可由AlertManager通知给用户。

  • LogQL是Loki提供的日志查询语言,Grafana可对查询结果进行可视化,基于命令行的查询通常由LogCLI进行

  • Loki支持很多种客户端,包括Grafana Agent、Promtail,以及第三方的Docker Driver、Fluentd/Fluent-bit、Logstash等


Loki组件

loki架构.png

Loki的系统组件大体可以分为两类

  • Read path:处理读取日志样本请求的组件
  • Write path:处理存储日志样本请求的组件
    核心组件介绍
  • Distributor(write path)
  • 从Loki客户端(如Promtail)接收数据、检查数据,随后将其分成数据块(Chunks)并发往Ingester
  • 无状态应用,可接受LB进行数据分发
  • Ingester(write, read path)
    • 负责将数据存入外部的存储系统(如S3)以长期存储数据,以及接受客户端的查询请求并响应相关的数据
    • 为避免数据丢失,通常应该提供复制式多实例
  • Querier(read path)
    • 处理LogQL请求,并从Ingester或长期存储系统中加载数据
  • Query Frontend(read path)
    • 处理查询请求的前端组件

Loki 系统数据流(Data flow)

Read path

  • ① Querier基于HTTP接收到查询请求
  • ② 转发请求至Ingester,以检查缓存在内存中的日志数据
  • ③ 若Ingester查询到了相关数据,则返回给Querier
  • ④ 若Ingester未查询到相关数据,则Querier将会向存储系统发起请求
  • ⑤ Querier基于HTTP协议响应查询请求

Write path

  • ① Distributor基于HTTP协议接收到写请求,并将其附加到特定的stream
  • ② Distributor将每个stream发往Ingester
  • ③ Ingester创建一个新Chunk或附加至现有的Chunk上
  • ④ Distributor将结果响应给客户端

Loki Architecture

  • Distributor收到的日志流基于标签进行consistent hashing计算后,分发至不同的Ingester,复制因子用于指定要存储的副本数以实现容错.

  • Loki中的日志存储由两部分组成:索引数据(index)和 日志数据(chunk)

  • Chunks 数据块

  • 每个Chunk存储有特定时间窗口内的日志条目,这些日志条目会被压缩后再进行存储.

  • 每个Chunk的所有日志条目会按照timestamp进行排序

  • Chunk中的内容包括压缩的日志条目(Compressed log entries)、时序信息(Time series information)和 块标识符(Chunk identifiers)

  • index

    • Loki会对Chunks基于标签集和时间范围进行索引以加快检索操作。
    • Loki仅索引日志流的元数据(标签集),它不会索引日志内容。
    • 索引中主要存储标签集、日志流标识符(Stream identifiers)和时间范围(内部日志流的时间边界)
0

评论区