菜单
开源

Loki 概述

Loki 是一款受 Prometheus 启发的水平可扩展、高可用、多租户日志聚合系统。Loki 与 Prometheus 的区别在于,它专注于日志而不是指标,并通过推送而不是拉取来收集日志。

Loki 的设计目标是具有极高的成本效益和可扩展性。与其他日志系统不同,Loki 不会索引日志的内容,而只索引有关日志的元数据,作为每个日志流的一组标签。

日志流是一组共享相同标签的日志。标签帮助 Loki 在数据存储中查找日志流,因此拥有高质量的标签集是有效执行查询的关键。

然后,日志数据会被压缩并以块的形式存储在对象存储中,例如 Amazon Simple Storage Service (S3) 或 Google Cloud Storage (GCS),或者甚至在文件系统中(用于开发或概念验证)。小型索引和高度压缩的块简化了操作并显着降低了 Loki 的成本。

**Loki logging stack**
Loki 日志记录堆栈

一个典型的基于 Loki 的日志记录堆栈包含 3 个组件

  • Agent - 代理或客户端,例如 Grafana Alloy 或与 Loki 一起分发的 Promtail。代理抓取日志,通过添加标签将日志转换为流,并通过 HTTP API 将流推送到 Loki。

  • Loki - 主服务器,负责接收和存储日志以及处理查询。它可以部署在三种不同的配置中,有关更多信息,请参阅部署模式

  • Grafana 用于查询和显示日志数据。您还可以使用LogCLI或直接使用 Loki API 从命令行查询日志。

Loki 功能

  • 可扩展性 - Loki 旨在实现可扩展性,可以从在 Raspberry Pi 上运行的小规模扩展到每天摄取 PB 级数据。在其最常见的部署“简单可扩展模式”中,Loki 将请求解耦到单独的读写路径中,以便您可以独立扩展它们,从而实现灵活的大规模安装,可以快速适应以满足您在任何给定时间的负载。如果需要,每个 Loki 组件也可以作为微服务运行,这些微服务设计为原生运行在 Kubernetes 中。

  • 多租户 - Loki 允许多个租户共享单个 Loki 实例。使用多租户,每个租户的数据和请求与其他租户完全隔离。多租户通过在代理中分配租户 ID 来配置

  • 第三方集成 - 通过插件,一些第三方代理(客户端)支持 Loki。这使您能够保留现有的可观察性设置,同时也将日志发送到 Loki。

  • 高效存储 - Loki 将日志数据存储在高度压缩的块中。类似地,Loki 索引由于仅索引标签集,因此比其他日志聚合工具小得多。通过利用对象存储作为唯一的存储机制,Loki 继承了底层对象存储的可靠性和稳定性。它还利用了对象存储相对于其他存储机制(如本地连接的固态硬盘 (SSD) 和硬盘驱动器 (HDD))的成本效益和操作简单性。
    压缩块、较小的索引以及使用低成本对象存储使 Loki 的运营成本更低。

  • LogQL,Loki 查询语言 - LogQL 是 Loki 的查询语言。已经熟悉 Prometheus 查询语言PromQL的用户会发现 LogQL 对生成针对日志的查询既熟悉又灵活。该语言还有助于从日志数据生成指标,这是一项强大的功能,远远超出了日志聚合的范围。

  • 告警 - Loki 包含一个名为ruler的组件,该组件可以持续地针对您的日志评估查询,并根据结果执行操作。这使您能够监视日志中的异常或事件。Loki 集成了Prometheus Alertmanager或 Grafana 中的警报管理器

  • Grafana 集成 - Loki 集成 Grafana、Mimir 和 Tempo,提供完整可观察性堆栈,以及日志、指标和跟踪之间无缝关联。