Promtail 介绍
Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签,专门为 Prometheus 和 Kubernetes 用户做了相关优化。
与传统日志收集系统(例ELK)相比,Loki的优势有哪些?
- 不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki操作起来会更简单,更省成本
- 通过与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高
- 特别适合存储 Kubernetes Pod 日志;诸如 Pod 标签之类的元数据会被自动删除和编入索引
- 受 Grafana 原生支持,与 Prometheus 配合更加方便
解决痛点?
无需再去其他界面,或者终端上查看单个Pod的日志
Loki的架构并不难,主要是以下三部分组成:
- Loki 为主服务器。负责存储日志和处理查询
- Promtail 是代理。负责收集日志并将其发送给Loki
- Grafana 用来UI展示。
Promtail 将本地日志内容传送到 Loki 实例。需要监控的应用程序的机器上都需要部署该组件。
它的主要工作流程可以划分为:
- 使用 fsnotify 监听指定目录下(例如:/var/log/*.log)的文件创建与删除
- 对每个活跃的日志文件起一个 goroutine 进行类似 tail -f 的读取,读取到的内容发送给 channel
- 有一个单独的 goroutine 会读取 channel 中的日志行,分批并附加上标签后推送给 Loki