使用 Grafana Loki 和 MinIO 进行日志记录

Logging with Grafana Loki and MinIO

本文将解释 Grafana Loki 的基础知识,Grafana Loki 是一个日志聚合系统,旨在存储和查询来自应用程序和基础设施的日志。我们将描述 Loki,解释其架构和用途,并讨论为什么 MinIO 对象存储是保存 Loki 数据的好地方。我们将在后续博文中提供有关如何使用 MinIO 存储 Loki 数据的教程。

日志提供有关设备和系统的基本信息。它们在企业内部被用于无数用途。监控是一个关键用例,它涉及监视日志中的错误,并在出现重大错误或错误率超过阈值时发出警报。日志是调试和故障排除信息的宝贵来源,在跟踪应用程序运行状况和崩溃时必不可少。日志可用于识别恶意活动并进行取证调查。日志还可以用于商业智能,提供见解并帮助制定业务增长策略。

日志一直在增长,使用传统企业存储对其进行索引、搜索和存储会变得资源密集。为了减轻这种负担,日志搜索工具将数据存储在与 S3 兼容的对象存储中,例如 MinIO。这是一个更简单的架构,基于日志数据构建的应用程序从 MinIO 的大规模高吞吐量以及版本控制、不变性和持久性中受益。我们最近的基准测试在使用 NVME 驱动器的 32 个节点上实现了 1.32 Tbps 的 PUT 吞吐量和 2.6 Tbps 的 GET 吞吐量。   

让我们深入了解 Loki。

Grafana Loki 简介

Grafana Loki 是一个分布式多租户日志聚合系统,其模型基于 Prometheus。在KubeCon 西雅图 2018 上宣布,并在 AGPLv3 许可下发布,Loki 在云原生可观察性堆栈中占据重要地位,并且经常与 Grafana 和 Prometheus 结合使用,以便在单个 UI 中查看和警报度量、日志和跟踪。 

将 Grafana-Loki-Promtail 的应用程序集视为大致等同于 ELK 堆栈,Promtail 代理将(跟踪)日志发送到 Loki 数据存储并在 Grafana 中可视化它们。Promtail 是一个日志收集器,它使用与 Prometheus 相同的服务发现,并包括用于在将日志发送到 Loki 之前标记、转换和过滤日志的类似功能。Loki 不会索引日志的文本,而是索引元数据。条目被分组到流中并使用标签索引。通常,管理员使用 Grafana 和 Loki 的查询语言 LogQL 来探索和可视化日志。他们还会配置警报规则并将警报发送到 AlertManager 以进行路由。

Loki 是一个轻量级且经济高效的日志分析工具,因为它只索引元数据。硬件需求远低于构建和存储内存中索引的全文本处理工具。您可以在自己的环境或云平台中本地运行 Loki,并随着操作的增长横向扩展。与 Prometheus 和 Grafana 一样,Loki 也可以轻松部署在 Kubernetes 上。 

Promtail 代理专为 Loki 设计。它获取日志,将其转换为流,并通过 HTTP API 将流推送到 Loki。Loki 不限于 Promtail 代理 - 您也可以使用其他客户端来发送日志,例如 Docker 驱动程序、Fluentd、Logstash 和 Lambda Promtail。能够使用 Logstash 作为客户端非常方便,如果您已经运行了它,并且想快速尝试 Loki。能够抓取 Kubernetes 和 Docker 容器日志对于故障排除非常有用。

从 2.0 版开始,Loki 将数据存储在单个对象存储后端中。Grafana Labs依赖于对象存储,因为它“快速、经济高效且简单,更不用说所有当前和未来的发展方向了”。这种模式依赖于适配器 boltdb_shipper 将 Loki 索引存储在对象存储中。BoltDB Shipper 允许您运行 Loki,而无需依赖外部数据库来存储索引。它在本地将索引存储在 BoltDB 文件中,并不断将这些文件发送到对象存储,例如 MinIO。这简化了 Loki 部署,消除了潜在的故障点,并消除了运行外部数据库(如 Apache Cassandra、Google Bigtable 或 Amazon DynamoDB)的成本。

现代化日志存储范式

处理日志可能是一项资源密集型工作。即使日志支持多种用例,摄取、存储和查询日志数据的努力也可能超过其价值。企业需要一种方法来降低存储和探索日志数据的复杂性,而对象存储(如 MinIO)就是答案。

企业竭尽全力存储日志并使其可用于分析。他们部署复杂的架构和流程来提高效率,例如将日志存档到冷存储、缩短日志存储期限、将日志汇总以减少详细程度,甚至完全丢弃日志。

这些策略违背了收集日志的初衷。价值不在于日志本身,而在于日志的应用方式。日志包含解决性能问题、分析使用数据、了解客户偏好等所有必要信息。许多行业要求为监管合规性和审计目的保存日志。但是,当存储如此繁琐以至于每个日志的价值都受到质疑时,将日志应用于解决问题的机会就会变得有限。

MinIO 可以存储和保护的日志量没有限制。MinIO 不会对对象的数量和组织施加任何限制,并使用擦除编码跨多个节点和驱动器分布和保护它们。MinIO 强大的性能已促使许多企业实施将对象存储作为主要存储,以整合存储空间、迁移到云原生应用程序架构,并获得灵活性、可移植性和弹性可扩展性。 

为日志提供无限可扩展的对象存储

对于在日志管理方面遇到困难的企业,对象存储(如 MinIO)提供了改进其策略的机会。对于高容量和高度复杂的日志数据所需性能和可扩展性,对象存储无与伦比。设计针对对象存储运行的应用程序堆栈,允许企业将存储与计算资源分离,从而提高传统单片日志管理解决方案的效率。迁移到云原生架构简化了操作,同时扩展了可用日志管理和分析工具(如 Humio、Cribl、Splunk、Elastic 等)的生态系统。

例如,将日志和 Loki 日志数据保存到 MinIO 可简化管理,同时显着增加可以应用这些数据的用例数量。管理员不必制定详细的计划,这些计划需要考虑数据格式和大小,或者用于数据保护的专有方法,例如快照和复制。以这种方式规划和管理存储会导致痛苦、过于复杂的结果,并且经常会增加运营开销。MinIO 抽象化了存储日志数据的挑战,在后台处理数据保护,同时通过无处不在的 S3 API 公开数据。MinIO 为日志数据提供持久对象存储,降低后端复杂性,同时简化和简化用例以及驱动它们的应用程序。对于普通开发人员或应用程序最终用户,MinIO 不需要管理或监督,让他们可以专注于导致真正商业洞察力的日志分析,而不是存储。 

MinIO 和 Loki 用于企业日志记录

将日志和 Loki 日志数据保存到 MinIO 有助于克服企业在管理大规模日志分析程序时面临的许多挑战。企业必须摆脱传统企业存储带来的限制,才能获得 MinIO 提供的更高性能、可移植性和持久性。摆脱过时存储模式的负担,使开发人员能够构建将使企业能够释放日志全部价值的分析和 AI/ML 应用程序。 

敬请关注,我们将在接下来的详细教程中,继续讨论本文“为什么”部分的“如何”。

立即下载 MinIO 开始使用。如果您有任何问题或意见,请通过 hello@min.io 与我们联系,或加入我们的 Slack 社区