如何使用 MinIO 运行 Grafana Mimir 以实现持久性指标存储
分布式系统包含许多移动部件,监控指标、日志和跟踪等遥测数据以获得可见性并允许团队确定问题的根本原因至关重要。许多可观察性计划的目标是提高可用性和性能。Grafana Labs 是使用最广泛的开源可观察性堆栈之一(用于可视化的 Grafana、用于日志的 Loki、用于度量的 Mimir、用于跟踪的 Tempo、用于警报的 Alertmanager),并销售 Grafana Cloud和Grafana Enterprise。
Grafana Mimir 是一个 AGPLv3 许可的开源软件项目,当与 MinIO 结合使用时,它可以为 Prometheus 指标提供可扩展的长期存储。Mimir 是使用可水平扩展的基于微服务的架构构建的。每个微服务都称为一个组件,Mimir 作为由这些组件组成的单个二进制文件运行。大多数组件都是无状态的,不需要在重启之间保留任何数据。
当您结合 Mimir 和 MinIO 时,您会生成一个特别适合满足企业云原生可观察性需求的基础设施:
性能: MinIO 将可扩展性和高性能相结合,使每一个工作负载,无论多么苛刻,都触手可及。MinIO 具有惊人的性能——最近的基准测试在 GET 上达到了 325 GiB/s (349 GB/s),在 PUT 上达到了 165 GiB/s (177 GB/s),只有 32 个现成的 NVMe SSD 节点。
规模: MinIO 没有限制,因为它可以通过服务器池水平扩展。每个服务器池都是一组独立的节点,拥有自己的计算、网络和存储资源。在多租户配置中,每个租户都是单个命名空间中的服务器池集群,与其他租户的服务器池完全隔离。通过将 MinIO 指向新的服务器池,可以轻松地将容量添加到现有系统中,MinIO 会自动为其做好准备并将其投入使用。
简单:如果你宁愿使用 Mimir 而不是花几个小时摆弄对象存储,那么你找不到比 MinIO 更直接的解决方案了。MinIO 只为对象服务——这是我们所做的一切,我们执着于成为最好的。其他产品结合了对象和文件存储,这导致了多个存储层,这给 Mimir 的查询响应时间带来了延迟,并创建了一个更复杂的架构,失败的可能性更大。
多云: MinIO 诞生于云端,可在任意硬件和软件组合上随处运行。丰富的集成意味着 MinIO 可以透明地插入现有的安全和管理工具和服务,以集中身份管理、加密密钥管理等。MinIO 在 baremetal 或任何版本的 Kubernetes(包括 GKE、EKS、AKS、Red Hat OpenShift、VMware Tanzu)上提供 S3 API 兼容对象存储,并使用主动-主动复制有效地同步数据。
Grafana Mimir的一些核心优势包括:
易于安装和维护: Grafana Mimir 丰富的文档、教程和部署工具使其可以快速上手。使用其整体模式,您只需一个二进制文件即可启动并运行 Grafana Mimir,无需其他依赖项。部署后,与 Grafana Mimir 一起打包的最佳实践仪表板、警报和 playbook 可以轻松监控系统的运行状况。
巨大的可扩展性:您可以在多台机器上运行 Grafana Mimir 的水平可扩展架构,从而能够处理比单个 Prometheus 实例多几个数量级的时间序列。内部测试表明,Grafana Mimir 可处理多达 10 亿个活动时间序列。
指标的全局视图: Grafana Mimir 使您能够运行聚合来自多个 Prometheus 实例的系列的查询,从而为您提供系统的全局视图。它的查询引擎广泛并行化查询执行,因此即使是最高基数的查询也能以惊人的速度完成。
廉价、耐用的指标存储: Grafana Mimir 使用对象存储进行长期数据存储,使其能够利用这种无处不在、成本高效、高耐用性的技术。它与多个对象存储实现兼容,包括 AWS S3、谷歌云存储、Azure Blob 存储、OpenStack Swift 以及任何 S3 兼容的对象存储。
高可用性: Grafana Mimir 复制传入的指标,确保在机器发生故障时不会丢失任何数据。它的水平可扩展架构还意味着它可以在零停机的情况下重新启动、升级或降级,这意味着指标摄取或查询不会中断。
原生多租户: Grafana Mimir 的多租户架构使您能够隔离来自独立团队或业务部门的数据和查询,从而使这些组可以共享同一个集群。高级限制和服务质量控制确保容量在租户之间公平共享。
Mimir 被开发为可扩展性最强、性能最高的开源时间序列数据库。Mimir 可以轻松扩展到 10 亿个指标甚至更多,具有比 Cortex 快 40 倍的超快查询性能,TSDB Mimir 旨在取代它。Cortex 自 2018 年以来一直是 CNCF 项目,广泛用于存储 Prometheus 指标。在创建 Mimir 时,Grafana Labs 通过 AGPLv3 许可、访问控制以及改进的性能、可扩展性和可用性为企业就绪的可观察性奠定了基础。
Grafana Labs 为 Mimir 设定了一个目标:无论指标格式如何,都成为最好的可扩展时间序列数据库。企业应该能够在不修改现有代码的情况下使用 Prometheus 指标(以及其他供应商协作的其他指标)。
现在我们已经了解了 Mimir 是什么,让我们来看一个介绍性教程。
Grafana Mimir 和 MinIO 教程
本教程借鉴了现有教程,使用 Grafana Mimir来展示使用 Docker 开始使用 Mimir 是多么容易。
使用 Git 命令行创建 Grafana Mimir 存储库的副本:
导航到教程目录:
启动 MinIO、Mimir、Prometheus、Grafana 和 NGINX
这将显示以下内容:
Grafana Mimir - 三个 Mimir 实例以实现高可用性。启用多租户(租户 ID 为 demo)。
Prometheus - 抓取 Mimir 指标,然后将它们写回 Mimir,以便它们可用
MinIO - 兼容 S3 的软件为块、规则和警报定义持久存储
Grafana - 包括用于查询 Mimir 的预安装数据源和用于监控 Mimir 的预安装仪表板
Load Balancer - 基于 NGINX 的负载均衡器,公开 Mimir 实例
使用以下端口:
Grafana 密米尔:http://localhost:9009。
我们教程的组件是这样组合在一起的:

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

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

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

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

配置录制规则
记录规则是一种预先计算经常需要或计算成本高的表达式并将结果保存为一组新的时间序列的机制。按照这些说明使用 Grafana 在 Mimir 中配置记录规则。
此sum:up记录规则将显示已启动且可访问的 Mimir 实例的数量。创建规则后,它将可用于查询和包含在仪表板中。
从左侧工具栏打开警报菜单,然后单击“新建警报规则”:

输入以下内容配置录制规则:
选择
Mimir or Loki recording rule配置以下内容:
规则名称 =
sum:up在选择数据源字段中选择 Mimir
命名空间=
example-namespace组 =
example-group查询表达式 =
sum(up)选择右上角的保存并退出。

要验证您的新记录规则是否正确运行,请从左侧菜单中打开 Explore:

在 Metric 下拉列表中,选择sum:up,然后单击右上角的 Run query,然后单击 Inspector 按钮。在下方,单击“数据”以查看时间列表和查询结果。结果应该是“3”,表示 Mimir 的三个本地实例都在运行。

配置警报规则
基于 Mimir 构建的警报规则遵循与基于 Prometheus 和 Loki 构建的相同的PromQL格式。Grafana 计算表达式,并在必要时使用 Alertmanager 发出警报。我们在较早的博文“使用 Prometheus 和 Grafana 进行多云监控和警报”中深入探讨了这一点。
我们将创建一个警报,当 Mimir 实例的数量低于三个时触发。
在左侧菜单中,将鼠标悬停在警报上,然后单击新建警报规则。

选择
Mimir or Loki alert配置以下内容:
规则名称 =
MimirNotRunningMimir在选择数据源字段中选择命名空间=
example-namespace组 =
example-group查询表达式 =
up == 0选择右上角的保存并退出。

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

我们将通过终止三个 Mimir 实例之一来模拟错误情况(确保您位于目录中~/mimir/docs/sources/tutorials/play-with-grafana-mimir:
当我们突然终止 Mimir 实例时,Grafana 在查询规则时会短暂显示错误。一旦 Mimir 的内部健康检查检测到终止的实例不健康,这将自动解决。
大约一分钟后,警报将很快指示黄色待处理状态。

再过一分钟后,警报将变为红色 Firing 状态:

如果我们为 Alertmanager 配置了通知通道,警报将被触发到适当的机制和联系人。有关说明,请参阅使用 Prometheus 和 Grafana 进行多云监控和警报。
在我们恢复我们终止的 Mimir 实例之前,返回到 Grafana 中的 Explore 页面并查询我们的sum:up记录规则。我们可以看到 Mimir 继续记录指标,即使 Mimir 实例已关闭。

最后,恢复 Mimir 实例:
返回到 Alerting 页面,注意我们的警报状态恢复为 Normal。

结论
在本教程中,您学习了如何在高可用性配置中运行 Grafana Mimir 和 MinIO。我们使用 Mimir 本身的 Prometheus 指标,然后在 Grafana 中查询和可视化它们。我们还配置了记录规则和警报,并验证警报是否在满足条件时按预期触发。
您还可以配置 Mimir 和 Grafana 以从 MinIO 中抓取 Prometheus 指标并通过 AlertManager 发出警报。Mimir 将数据存储在对象存储中以实现持久化,使其能够利用无处不在、经济高效和高持久性的 MinIO。
试试 Grafana Mimir!如果您有任何疑问,请加入我们的Slack 频道或发送电子邮件至 sales@minio.org.cn。