监控基础设施硬件和软件的健康状况和性能对于维持应用程序的性能、可靠性和可用性至关重要。
云原生世界依赖于一个事实上的可观察性栈,该栈使用 Prometheus 收集和存储指标,并使用 Grafana 在这些指标上构建仪表盘、查询和警报。Prometheus 服务器抓取 HTTP 端点以收集指标,Grafana 连接到 Prometheus 以提供一种简单的方法来可视化存储在 Prometheus 多维时间序列数据库中的指标。Prometheus 可以与 Alertmanager 结合使用以发出通知,Grafana 也可以直接发出通知。
MinIO 提供了一个 HTTP 端点用于抓取与 Prometheus 兼容的数据。最简单的查看方式是使用 MinIO 控制台。我们还提供了一个 Grafana 仪表盘 来可视化收集的指标;当您想要自定义仪表盘和报表时,我们推荐使用 Grafana。或者,您可以使用任何其他读取 Prometheus 指标的软件。Prometheus 从 MinIO 中提取了广泛的粒度 硬件和软件指标。

Prometheus 的一个优点是它无处不在——MinIO 也是如此。您可以通过 Prometheus 联合(一种将 Prometheus 扩展到跨多个数据中心及其节点监控环境的方法)洞察整个多云环境。设置可能涉及许多 Prometheus 服务器在本地级别收集指标,以及一组全局 Prometheus 服务器来收集和存储聚合指标,所有这些都安全地连接在一起。组织通常依赖于这样的设置来监控和警报所有通过与 Prometheus 兼容的端点提供指标的组件。在这个例子中,您可以通过单个 Grafana 实例监控和警报在任何地方运行的 MinIO 集群。请注意,Prometheus/Grafana/Alertmanager 都可以配置为高可用性。
MinIO 关键指标
指标在集群范围内报告,每个节点都有一个标签。目前收集了 26 个指标。了解每个指标的基线以理解典型和峰值使用情况非常重要。与正常基线的偏差可能表示潜在的错误或硬件故障。在许多情况下,偏差的大小与其严重程度相关——您可能可以忽略 S3 API 请求的 5% 上升,但 25% 的激增需要引起注意。对于某些指标,例如离线服务器,您可能希望对任何更改采取措施。
无论您使用 Prometheus、Grafana 还是其他监控/警报应用程序,一些最重要的指标包括
- 在线/离线服务器总数:快速查看在线和离线的 MinIO 节点总数,以确保它们可用。MinIO 可以容忍最多一半服务器的节点故障(具体取决于配置),但不用说,您应该调查离线服务器。
- 在线/离线磁盘总数:离线磁盘是可以容忍的,但并非期望的。根据 擦除编码 设置,MinIO 可以容忍最多一半驱动器的丢失。我们有一个 擦除编码计算器 可帮助您确定最适合您需求的配置。
- S3 API 数据接收/发送速率:直方图显示来自和到 MinIO 的 S3 API 流量。意外的大幅下降可能表明连接丢失,应进行调查。同样,大幅激增也需要调查以确定其来源和原因。
- S3 API 请求速率:显示 MinIO 节点和操作的 S3 API 调用的直方图,深入了解每个节点的使用情况。
- S3 API 请求错误率:虽然总是会有一些错误,但错误率的激增可能需要更深入地查看应用程序和 MinIO 日志。通过检查日志以查看发生了什么或运行
mc admin trace
以查看实时 API 调用来收集更多信息。 - 数据使用量增长:跟踪存储在 MinIO 中的数据总大小以及它随时间推移的增长方式非常重要,以便预测对 服务器池扩展 的需求和时间。
- 对象大小分布:此指标有助于规划和调整工作负载。
- 节点 CPU/内存/驱动器使用率:当然,在管理存储时了解驱动器利用率非常重要。CPU 和内存利用率不太重要,因为 MinIO 已针对效率进行了优化,并有效地利用了资源。密切关注这些指标以维持峰值性能。
- 节点文件描述符:文件描述符是进程用来标识打开文件的无符号整数,可以在底层操作系统中配置。如果文件描述符设置得太低,它将限制 MinIO 集群上并发操作的数量。MinIO 目前默认为 1048576 个文件描述符。设置可以通过 systemd 轻松管理。
现在我们已经讨论了一些最重要的 MinIO 指标,接下来让我们看看如何安装和配置 Prometheus 和 Grafana 以进行监控和警报。
Prometheus 和 MinIO 教程
安装 Prometheus 并将其配置为抓取 MinIO 端点非常简单。安装过程在 如何使用 Prometheus 监控 MinIO 服务器 中进行了全面描述。您需要先 安装 MinIO。
下载 最新版本的 Prometheus 并解压缩。
tar xvfz prometheus-*.tar.gz cd prometheus-* |
为 Prometheus 指标配置 MinIO 的身份验证类型。MinIO 支持 JWT 和公共身份验证模式。默认情况下,MinIO 以 JWT 模式运行,我们建议在生产环境中使用 JWT 模式。我们可以使用公共模式进行测试。请参阅 文档 以启用身份验证。
在命令提示符下,配置一个环境变量
export MINIO_PROMETHEUS_AUTH_TYPE="public" |
并重新启动 MinIO 服务器。
将我们的 Prometheus 端点身份验证设置为 public
后,我们可以在 prometheus.yml
中配置我们的端点抓取。打开文件并编辑 scrape_configs
部分。您只需要抓取一个端点(例如,一个节点或负载均衡的 IP 地址)即可监控集群。
要监控 MinIO 集群
scrape_configs: - job_name: minio-job metrics_path: /minio/v2/metrics/cluster scheme: http static_configs: - targets: ['localhost:9000'] |
保存文件后,您就可以运行 Prometheus 了。
./prometheus --config.file=prometheus.yml |
您现在可以通过启动浏览器并导航到 http://localhost:9090 在 Prometheus 中查看 MinIO 指标。
Grafana 和 MinIO 教程
配置 Prometheus 后,使用 Grafana 可视化 Prometheus 收集的 MinIO 指标。
从 这里 下载 Grafana 最新版本并解压。
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.4.3.linux-amd64.tar.gz tar -zxvf grafana-enterprise-8.4.3.linux-amd64.tar.gz |
如果您希望在首次启动之前配置 Grafana,可以编辑其配置文件 (/etc/grafana/grafana.ini) 来设置 配置选项,例如默认管理员密码、HTTP 端口等等。
启动 Grafana。
cd /grafana-8.4.3/bin ./grafana-server |
或者,要使用 systemd 或 init.d 启动 Grafana,请参阅 在 Debian 或 Ubuntu 上安装。
使用 Web 浏览器登录到 Grafana,地址为 http://localhost:3000/
。第一次登录时,需要使用 admin 作为用户名和密码。系统会提示您更改密码。
要安装 MinIO Grafana 仪表板,请点击加号并选择导入。

输入 https://grafana.org.cn/grafana/dashboards/13502
导入 MinIO 仪表板。还有一个用于复制设置的单独仪表板 - https://grafana.org.cn/grafana/dashboards/15305
。

最后需要配置的是选择用于填充 MinIO 仪表板的 Prometheus 数据源。

点击导入后,MinIO 仪表板将打开。

无论您使用的是 MinIO Grafana 仪表板还是 MinIO 控制台,都可以轻松获取验证最佳性能和可用性所需的所有指标。
为了超越被动监控,让我们快速了解一下告警。
使用 Prometheus、Grafana 和 AlertManager 进行告警
有两种方法可以定义告警条件并发出通知:使用 Prometheus 和 AlertManager,或者使用 Grafana。使用 Grafana 的可视化界面配置告警更容易,但缺点是您需要保持 Grafana 服务器运行才能发出通知,这会为您的基础设施增加另一个移动部件。用 Prometheus 编写的告警规则可能更复杂(既是福也是祸),并且可以从 Alertmanager 发出,Alertmanager 可以配置为高可用性。由于这些原因,在生产环境中,Prometheus 和 Alertmanager 比 Prometheus 和 Grafana 更常用于告警。
Prometheus 中的告警以 YAML 文件的形式存在,并在服务器启动时加载。告警规则使用 Prometheus 表达式语言定义条件。只要满足告警定义,告警就会被计为活动状态。活动告警可以在 Web 浏览器中查看,或在 Alertmanager 中触发通知。Alertmanager 处理通知的去重、分组和路由到预定义的服务,例如电子邮件、Webhook、PagerDuty 等。
此过程涉及 设置和配置 Alertmanager、配置 Prometheus 以与 Alertmanager 通信以及 在 Prometheus 中创建告警规则。
让我们看看 Prometheus 中一个告警规则的示例。我们将发出一个告警,如果 MinIO 节点宕机,则会发送页面通知。
groups: - name: Minio rules: - alert: NodeOffline expr: minio_cluster_nodes_offline_total != 0 for: 2m labels: severity: page annotations: summary: Node offline |
由于 Grafana 中的告警是通过 GUI 配置的,因此它是学习如何配置和发出告警的一种更简单、更快速的方法。我们将快速演示一下,有关更深入的指南,请参阅 Grafana 告警概述。
首先,创建一个将用于发送告警的通知渠道。点击告警下的通知渠道,然后点击添加渠道。

从类型下拉菜单中选择您要使用的通知目标。有很多选项,包括 PagerDuty、电子邮件、Prometheus/Alertmanager、Slack 和 Webhook。从菜单中选择 Webhook。在测试时,Webhook 是一种简单的解决方案,因为我们不需要电子邮件服务器或服务帐户来验证通知是否已触发。

浏览到 https://webhook.site。这是一个用于快速测试和查看 Webhook 内容的有用工具。复制您的永久链接。返回 Grafana 并将永久链接粘贴到 URL 字段中。然后点击测试。返回您的 webhook.site 页面以查看测试通知是否已成功发送。

保存通知渠道并通过点击加号并选择仪表板来创建一个新的仪表板。Grafana 不允许在模板变量上构建告警,因此您不能使用 MinIO 仪表板定义的变量来创建告警规则。
点击添加新的面板。

在 Grafana 中创建告警更容易一些,因为它有一个 GUI 可以引导您构建查询表达式。

对于我们的演示,选择 minio_cluster_nodes_offline_total
。然后点击告警并点击创建告警。

如果需要,可以给告警规则命名。在条件中,我们将构建一个查询,如果离线节点数大于 0,则触发告警。我们还将配置如果未收集数据或查询超时,则发送告警。然后在通知下的发送到中选择 Webhook。

点击右上角的应用以保存您的仪表板和告警。您已配置了第一个 Grafana 告警。
什么?你说你不想在你的 MinIO 集群上创建错误条件?为了演示目的,我将使我的 MinIO 节点宕机。
您可以看到此条件反映在仪表板中。

Grafana 告诉我我们已经达到了错误条件。

我的 Webhook 已收到通知。

MinIO 的完整可见性
MinIO 通过 Prometheus 端点提供了一套完整的性能和健康指标。Prometheus/Grafana/Alertmanager 的组合简化了 MinIO 指标的监控和告警。这是一个非常丰富的主题,此演示旨在作为起点。还有很多东西需要学习!如果您有任何疑问,请加入我们的 Slack 频道 或发送电子邮件至 hello@min.io。