如何使用 MinIO 作为持久化指标存储运行 Grafana Mimir

How to Run Grafana Mimir with MinIO for Persistent Metrics Storage

分布式系统包含许多活动部件,监控遥测数据(如指标、日志和跟踪)对于获得可视化并允许团队确定问题根本原因至关重要。许多可观测性计划的目标是提高可用性和性能。Grafana Labs 提供了最广泛使用的开源可观测性栈之一(Grafana 用于可视化,Loki 用于日志,Mimir 用于指标,Tempo 用于跟踪,Alertmanager 用于警报),并销售Grafana CloudGrafana Enterprise

Grafana Mimir 是一个采用 AGPLv3 许可的开源软件项目,当与 MinIO 结合使用时,它为 Prometheus 指标提供可扩展的长期存储。Mimir 使用基于微服务的架构构建,该架构可水平扩展。每个微服务称为一个组件,Mimir 作为由这些组件组成的单个二进制文件运行。大多数组件是无状态的,不需要在重启之间持久化任何数据。

当您将 Mimir 和 MinIO 结合使用时,您将构建一个特别适合满足企业云原生可观测性需求的基础设施,其特点包括:

  • 性能:MinIO 将可扩展性和高性能相结合,使每种工作负载(无论多么苛刻)都能轻松应对。MinIO 能够实现惊人的性能 - 最近的一项基准测试 在仅使用 32 个现成的 NVMe SSD 节点的 GET 操作中实现了 325 GiB/s(349 GB/s),在 PUT 操作中实现了 165 GiB/s(177 GB/s)。
  • 规模:MinIO 通过服务器池进行水平扩展,没有规模限制。每个服务器池都是一个独立的节点组,拥有自己的计算、网络和存储资源。在多租户配置中,每个租户都是单个命名空间中服务器池的集群,与其他租户的服务器池完全隔离。可以通过将 MinIO 指向新的服务器池轻松地向现有系统添加容量,MinIO 会自动准备它并将其投入服务。
  • 简单性:如果您希望将 Mimir 用于实际用途,而不是花费数小时来调整对象存储,那么您找不到比 MinIO 更简单的解决方案。MinIO 只服务于对象 - 这是我们所做的全部,我们痴迷于成为最好的。其他产品将对象存储和文件存储结合在一起,这会导致多个存储层,从而导致 Mimir 的查询响应时间延迟,并创建更复杂的架构,从而导致更大的故障可能性。
  • 多云:MinIO 生于云端,可在任何硬件和软件的任何组合上运行。丰富的集成意味着 MinIO 可以透明地插入现有的安全和管理工具和服务,以集中身份管理、加密密钥管理等。MinIO 在裸机或任何版本的 Kubernetes(包括 GKE、EKS、AKS、Red Hat OpenShift、VMware Tanzu)上提供与 S3 API 兼容的对象存储,并使用主动-主动复制有效地同步数据。

Grafana Mimir的一些核心优势包括:

  • 易于安装和维护:Grafana Mimir 广泛的文档、教程和部署工具使入门变得快速。使用其单体模式,您只需一个二进制文件即可启动并运行 Grafana Mimir,无需任何其他依赖项。部署后,与 Grafana Mimir 打包在一起的最佳实践仪表板、警报和剧本使监控系统健康状况变得容易。
  • 大规模可扩展性:您可以跨多台机器运行 Grafana Mimir 的水平可扩展架构,从而能够处理比单个 Prometheus 实例多几个数量级的时序数据。内部测试表明,Grafana Mimir 可以处理多达 10 亿个活动时序数据。
  • 指标的全局视图:Grafana Mimir 使您能够运行聚合来自多个 Prometheus 实例的序列的查询,从而为您提供系统的全局视图。其查询引擎广泛地并行化查询执行,因此即使是最高基数的查询也能以极快的速度完成。
  • 廉价、持久的指标存储:Grafana Mimir 使用对象存储进行长期数据存储,使其能够利用这种普遍存在、经济高效、高持久性的技术。它与多种对象存储实现兼容,包括 AWS S3、Google Cloud Storage、Azure Blob Storage、OpenStack Swift,以及任何与 S3 兼容的对象存储。
  • 高可用性:Grafana Mimir 复制传入的指标,确保在机器发生故障时不会丢失任何数据。其水平可扩展架构还意味着它可以在零停机时间的情况下重新启动、升级或降级,这意味着指标摄取或查询不会中断。
  • 原生多租户:Grafana Mimir 的多租户架构使您能够隔离来自独立团队或业务部门的数据和查询,使这些组能够共享相同的集群。高级限制和服务质量控制确保容量在租户之间公平共享。

Mimir 的开发旨在成为最具可扩展性和性能的开源时序数据库。Mimir 可以轻松扩展到 10 亿个指标甚至更多,并具有极快的查询性能,比 Cortex(Mimir 旨在取代的 TSDB)快 40 倍。Cortex 自 2018 年以来一直是 CNCF 项目,并被广泛用于存储 Prometheus 指标。在创建 Mimir 时,Grafana Labs 为企业级可观测性奠定了基础,包括 AGPLv3 许可、访问控制以及改进的性能、可扩展性和可用性。

Grafana Labs 对于 Mimir 有一个目标:成为最佳的可扩展时序数据库,无论指标格式如何。企业应该能够在不修改现有代码的情况下使用 Prometheus 指标(以及其他供应商协作的其他指标)。

现在我们已经了解了 Mimir 是什么,让我们来学习一个入门教程。

Grafana Mimir 和 MinIO 教程

本教程借鉴了一个现有的教程,使用 Grafana Mimir,展示了使用 Docker 入门 Mimir 的简单性。

使用 Git 命令行创建 Grafana Mimir 存储库的副本

git clone https://github.com/grafana/mimir.git

导航到教程目录

cd mimir/docs/sources/tutorials/play-with-grafana-mimir/

启动 MinIO、Mimir、Prometheus、Grafana 和 NGINX

docker compose up

这将启动以下组件:

  • Grafana Mimir - 三个 Mimir 实例,用于高可用性。启用了多租户功能(租户 ID 为 demo)。
  • Prometheus - 抓取 Mimir 指标,然后将其写回 Mimir,以便于访问。
  • MinIO - 用于块、规则和警报的与 S3 兼容的软件定义持久存储。
  • Grafana - 包含预安装的数据源以查询 Mimir,以及用于监控 Mimir 的预安装仪表板。
  • 负载均衡器 - 基于 NGINX 的负载均衡器,用于公开 Mimir 实例。

使用以下端口:

本教程的组件协同工作方式如下:

如果您想深入了解本教程中使用的任何配置,请参阅保存到~/mimir/docs/sources/tutorials/play-with-grafana-mimir/config/中的 YAML 文件。

要访问 Grafana,请启动浏览器并打开http://localhost:9000。您将使用 Grafana 查看显示 Mimir 集群状态的仪表板。仪表板查询 Mimir 以获取其显示的指标。从左上角的菜单中,单击“仪表板”,然后单击“浏览”以查看已为教程预加载的仪表板。这些仪表板来自 Grafana Mimir mixin,它将 Grafana Labs 的最佳实践仪表板、记录规则和警报打包在一起,用于监控 Mimir。

启动教程容器后,通常需要 3-5 分钟才能在 Grafana 仪表板中显示指标。我们还在没有入口网关、查询调度程序或 memcached 的情况下运行 Mimir,因此相关的仪表板将为空。

在学习 Mimir 的早期阶段,请先浏览写入、读取、查询和对象存储的仪表板。例如,对象存储仪表板显示自我们启动 Mimir 以来发生的运行操作。

配置记录规则

记录规则是一种机制,它预先计算经常需要或计算成本高的表达式,并将结果保存为一组新的时间序列。请按照以下说明在使用 Grafana 的 Mimir 中配置记录规则。

sum:up 记录规则将显示处于运行状态且可访问以进行抓取的 Mimir 实例的数量。创建规则后,即可用于查询和包含在仪表板中。

从左侧工具栏打开“警报”菜单,然后单击“新建警报规则”。

输入以下内容以配置记录规则。

  1. 选择 Mimir 或 Loki 记录规则
  2. 配置以下内容:
  3. 规则名称 = sum:up
  4. 在“选择数据源”字段中选择 Mimir。
  5. 命名空间 = example-namespace
  6. 组 = example-group
  7. 查询表达式 = sum(up)
  8. 在右上角选择“保存并退出”。

要验证新的记录规则是否正确运行,请从左侧菜单打开“探索”。

在“指标”下拉列表中,选择 sum:up,然后单击右上角的“运行查询”,然后单击“检查器”按钮。在下面,单击“数据”以查看时间和查询结果的列表。结果应为“3”,表示 Mimir 的三个本地实例正在运行。

配置警报规则

基于 Mimir 构建的警报规则遵循与基于 Prometheus 和 Loki 构建的警报规则相同的 PromQL 格式。Grafana 会评估表达式,并在必要时使用 Alertmanager 触发警报。我们之前的一篇博文中对此进行了深入探讨,使用 Prometheus 和 Grafana 进行多云监控和警报

我们将创建一个警报,当 Mimir 实例数量降至低于三个时触发。

在左侧菜单中,将鼠标悬停在“警报”上,然后单击“新建警报规则”。

  1. 选择 Mimir **或** Loki 警报
  2. 配置以下内容:
  3. 规则名称 = MimirNotRunning
  4. 在“选择数据源”字段中选择 Mimir
  5. 命名空间 = example-**namespace**
  6. 组 = example-**group**
  7. 查询表达式 = up == 0
  8. 在右上角选择“保存并退出”。

导航到“警报”页面,您将看到我们的 Mimir 记录规则和警报规则。请注意,警报旁边显示了一个漂亮的、醒目的绿色“正常”状态,因为我们所有的 Mimir 容器仍在运行。

我们将通过终止三个 Mimir 实例中的一个来模拟错误条件(请确保您位于 ~/mimir/docs/sources/tutorials/play-with-grafana-mimir 目录下)。

docker compose kill mimir-3

由于我们突然终止了一个 Mimir 实例,因此 Grafana 在查询规则时会短暂显示错误。一旦 Mimir 的内部健康检查检测到已终止的实例不健康,此错误将自动解决。

大约一分钟后,警报将很快显示黄色“待定”状态。

再过一分钟,警报将变为红色“触发”状态。

如果我们已使用通知渠道配置了 Alertmanager,警报将触发到相应的机制和联系人。有关说明,请参阅 使用 Prometheus 和 Grafana 进行多云监控和警报

在我们恢复已终止的 Mimir 实例之前,请返回 Grafana 的“探索”页面并查询我们的 sum:up 记录规则。我们可以看到,即使 Mimir 实例已关闭,Mimir 仍继续记录指标。

最后,恢复 Mimir 实例。

docker compose start mimir-3

返回“警报”页面,注意我们的警报状态已恢复为“正常”。

结论

在本教程中,您学习了如何在高可用性配置中运行 Grafana Mimir 和 MinIO。我们从 Mimir 本身获取了 Prometheus 指标,然后在 Grafana 中查询和可视化它们。我们还配置了一个记录规则和一个警报,并验证了警报在满足条件时按预期触发。

您还可以配置 Mimir 和 Grafana 以从 MinIO 抓取 Prometheus 指标,并通过 AlertManager 触发警报。Mimir 将数据存储在对象存储中以实现持久性,从而使其能够利用无处不在、经济高效且持久性高的 MinIO。

尝试使用 Grafana Mimir!如果您有任何疑问,请加入我们的 Slack 频道 或发送电子邮件至 hello@min.io。