Loki 概览
Loki 是一个受 Prometheus 启发的、水平可扩展、高可用、多租户的日志聚合系统。Loki 与 Prometheus 的不同之处在于,它专注于日志而非指标,并且通过推送而不是拉取来收集日志。
Loki 设计得非常经济且高度可扩展。与其他日志系统不同,Loki 不索引日志内容,而只索引关于日志的元数据,作为每个日志流的一组标签。
日志流是共享相同标签的一组日志。标签帮助 Loki 在您的数据存储中找到日志流,因此拥有一组高质量的标签是高效执行查询的关键。
然后将日志数据压缩并以块的形式存储在对象存储中,例如 Amazon Simple Storage Service (S3) 或 Google Cloud Storage (GCS),甚至,对于开发或概念验证用途,也可以存储在文件系统上。小型索引和高度压缩的块简化了操作并显著降低了 Loki 的成本。

典型的基于 Loki 的日志 Stack 由 3 个组件组成
代理 - 例如 Grafana Alloy 或 Promtail 等随 Loki 一同分发的代理或客户端。代理抓取日志,通过添加标签将日志转换为流,并通过 HTTP API 将流推送到 Loki。
Loki - 主服务器,负责摄取和存储日志以及处理查询。它可以部署为三种不同的配置,更多信息请参阅部署模式。
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 集成,提供完整的可观测性 Stack,并在日志、指标和追踪之间实现无缝关联。