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

Prometheus 的一大优点是它无处不在——MinIO 也是如此。您可以使用Prometheus Federation深入了解整个多云,这是一种扩展 Prometheus 以监控跨多个数据中心及其节点的环境的方法。一个设置可能涉及许多 Prometheus 服务器来收集本地级别的指标,以及一组全球 Prometheus 服务器来收集和存储聚合指标,所有这些服务器都安全连接。组织通常依靠这样的设置来监视和警告通过 Prometheus 兼容端点提供指标的所有内容。在此示例中,您可以通过单个 Grafana 实例监控在任何地方运行的 MinIO 集群并发出警报。请注意,Prometheus/Grafana/Alertmanager 都可以配置为高可用性。
关键 MinIO 指标
指标在集群范围内报告,每个节点都有一个标签。目前收集了 26 个指标。重要的是为每个指标设定基线以了解典型和峰值使用情况。与正常基线的偏差可能表示潜在的错误或硬件故障。在许多情况下,偏差的大小与其严重程度相关——您可以忽略 S3 API 请求中 5% 的激增,但 25% 的激增需要引起注意。对于某些指标,例如离线服务器,您可能希望对任何更改采取行动。
无论您使用 Prometheus、Grafana 还是其他监控/警报应用程序,需要关注的一些最重要的指标包括:
Total Online/Offline Servers:快速查看在线和离线的 MinIO 节点总数,以确保它们可用。MinIO 最多可以容忍一半服务器的节点故障,具体取决于配置,但不用说,您应该调查离线服务器。
Total Online/Offline Disks:离线磁盘是可以容忍的,但不是理想的。根据纠删码设置,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 端点非常简单。安装过程在How to monitor MinIO server with Prometheus中有完整描述。您需要先安装 MinIO。
下载最新版本的 Prometheus 并解压缩。
为 Prometheus 指标的身份验证类型配置 MinIO。MinIO 支持 JWT 和公共身份验证模式。默认情况下,MinIO 以 JWT 模式运行,我们建议生产环境使用 JWT 模式。我们可以使用公共模式进行测试。请参阅文档以启用身份验证。
在命令提示符下,配置环境变量
并重启 MinIO 服务器。
将我们的 Prometheus 端点身份验证设置为public,我们可以在 中配置我们的端点抓取prometheus.yml。打开文件并编辑该scrape_configs部分。您只需要抓取一个端点,即一个节点或负载平衡的 IP 地址,即可监控集群。
监控 MinIO 集群:
保存文件后,您就可以运行 Prometheus 了。
您现在可以通过启动浏览器并导航到http://localhost:9090在 Prometheus 中查看 MinIO 指标。
Grafana 和 MinIO 教程
配置 Prometheus 后,使用 Grafana 可视化 Prometheus 收集的 MinIO 指标。
下载最新版本的 Grafana 并对其进行扩展。
如果您希望在首次启动之前配置 Grafana,您可以编辑其配置文件 (/etc/grafana/grafana.ini) 以设置配置选项,例如默认管理员密码、http 端口等。
启动格拉法纳。
或者,要使用 systemd 或 init.d 启动 Grafana,请参阅在 Debian 或 Ubuntu 上安装。
使用 Web 浏览器登录到 Grafana http://localhost:3000/。第一次您需要使用 admin 作为用户名和密码登录。系统将提示您更改密码。
要安装 MinIO Grafana 仪表板,请单击加号并选择导入。

输入https://grafana.com/grafana/dashboards/13502以导入 MinIO 仪表板。还提供了用于复制设置的单独仪表板 - https://grafana.com/grafana/dashboards/15305。

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

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

无论您使用的是 MinIO Grafana 仪表板还是 MinIO 控制台,验证最佳性能和可用性所需的所有指标都触手可及。
为了超越被动监控,让我们快速了解一下警报。
使用 Prometheus、Grafana 和 AlertManager 发出警报
有两种方法可以定义警报条件和发出通知:Prometheus 和 AlertManager,或者 Grafana。使用 Grafana 的可视化界面配置警报更容易,但缺点是您需要保持 Grafana 服务器运行以发出通知,这会为您的基础架构增加另一个移动部分。用 Prometheus 编写的警报规则可能更复杂(既是福也是祸),并且具有从 Alertmanager 发出的优势,可以配置为实现高可用性。由于这些原因,Prometheus 和 Alertmanager 在生产中比 Prometheus 和 Grafana 更常用于警报。
Prometheus 中的警报以 YAML 文件形式存在,在服务器启动时加载。警报规则使用 Prometheus 表达式语言定义条件。只要满足警报定义,警报就被视为活动警报。可以在 Web 浏览器中查看活动警报或在 Alertmanager 中触发通知。Alertmanager 处理重复数据删除、分组和路由通知到预定义的服务,例如电子邮件、webhook、PagerDuty 等。
该过程涉及Alertmanager 的设置和配置、配置 Prometheus以与 Alertmanager 通信以及在 Prometheus 中创建警报规则。
让我们看一下来自 Prometheus 的示例警报规则。如果 MinIO 节点出现故障,我们将发出一个导致页面的警报。
由于 Grafana 中的警报是通过 GUI 配置的,因此它是学习如何配置和发出警报的一种更简单、更快速的方法。我们将运行一个快速演示,有关更深入的指南,请参阅Grafana 警报概述。
首先,创建将用于发送警报的通知通道。单击警报下的通知通道,然后单击添加通道。

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

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

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

由于 GUI 会引导您构建查询表达式,因此在 Grafana 中创建警报要容易一些。

对于我们的演示,选择minio_cluster_nodes_offline_total. 然后单击“警报”并单击“创建警报”。

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

单击右上角的应用以保存您的仪表板和警报。您已经配置了第一个 Grafana 警报。
那是什么?你说你不想在你的 MinIO 集群上创建错误条件。出于演示目的,我将关闭我的 MinIO 节点。
您可以看到此情况反映在仪表板中。

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

我的 webhook 已收到通知。

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