Loki 概述
Loki 是一款受 Prometheus 启发的水平可扩展、高可用、多租户日志聚合系统。Loki 与 Prometheus 的区别在于,它专注于日志而不是指标,并通过推送而不是拉取来收集日志。
Loki 的设计目标是具有极高的成本效益和可扩展性。与其他日志系统不同,Loki 不会索引日志的内容,而只索引有关日志的元数据,作为每个日志流的一组标签。
日志流是一组共享相同标签的日志。标签帮助 Loki 在数据存储中查找日志流,因此拥有高质量的标签集是有效执行查询的关键。
然后,日志数据会被压缩并以块的形式存储在对象存储中,例如 Amazon Simple Storage Service (S3) 或 Google Cloud Storage (GCS),或者甚至在文件系统中(用于开发或概念验证)。小型索引和高度压缩的块简化了操作并显着降低了 Loki 的成本。
一个典型的基于 Loki 的日志记录堆栈包含 3 个组件
Agent - 代理或客户端,例如 Grafana Alloy 或与 Loki 一起分发的 Promtail。代理抓取日志,通过添加标签将日志转换为流,并通过 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,提供完整可观察性堆栈,以及日志、指标和跟踪之间无缝关联。