文章目录
整体介绍
Loki 是受 Prometheus 启发的水平可扩展、高可用、多租户日志聚合系统。非常适合采集 Kubernetes Pod 的日志,关键 Loki 还易于操作且更加轻量级(相比 ELK/EFK/EFLK )。
在 Loki 架构中有以下几个概念:
- Grafana:相当于 EFK 中的 Kibana ,用于 UI 的展示。
- Loki:相当于 EFK 中的 ElasticSearch ,用于存储日志和处理查询。
- Promtail:相当于 EFK 中的 Filebeat/Fluentd ,用于采集日志并将其发送给 Loki 。
- LogQL:Loki 提供的日志查询语言,类似 Prometheus 的 PromQL,而且 Loki 支持 LogQL 查询直接转换为
Prometheus 指标。
Loki整体架构
Promtail 介绍
Promtail 将本地日志内容传送到 Loki 实例。需要监控的应用程序的机器上都需要部署该组件。
它的主要工作流程可以划分为:
- 使用 fsnotify 监听指定目录下(例如:/var/log/*.log)的文件创建与删除
- 对每个活跃的日志文件起一个 goroutine 进行类似 tail -f 的读取,读取到的内容发送给 channel
- 有一个单独的 goroutine 会读取 channel 中的日志行,分批并附加上标签后推送给 Loki
promtail原理
Loki 介绍
Loki 是用来接受、存储、处理、查询日志的集合体。
Loki 采用读写分离架构,关键组件有:
- Distributor 分发器:日志数据传输的“第一站”,Distributor 分发器接收到日志数据后,根据元数据和 hash
算法,将日志分批并行地发送到多个 Ingester 接收器上 - Ingester 接收器:接收器是一个有状态的组件,在日志进入时对其进行 gzip 压缩操作,并负责构建和刷新 chunck 块,当
chunk 块达到一定的数量或者时间后,就会刷新 chunk 块和对应的 Index 索引存储到数据库中 - Querier 查询器:给定一个时间范围和标签选择器,Querier 查询器可以从数据库中查看