使用 Prometheus 和 Grafana 进行多云监控和警报

使用 Prometheus 和 Grafana 进行多云监控和警报

监控基础设施硬件和软件的健康状况和性能对于维护应用程序性能、可靠性和可用性至关重要。

云原生世界依赖于Prometheus事实上的可观察性堆栈来收集和存储指标,并依赖Grafana在其上构建仪表板、查询和警报。Prometheus 服务器抓取 HTTP 端点以收集指标,Grafana 连接到 Prometheus 以提供一种简单的方法来可视化存储在 Prometheus 的多维时间序列数据库中的指标。Prometheus可以结合Alertmanager发布通知,Grafana可以直接发布。

MinIO 提供了一个用于抓取 Prometheus 兼容数据的 HTTP 端点。查看它的最简单方法是使用MinIO Console我们还提供了一个Grafana 仪表板来可视化收集的指标;当您想要自定义仪表板和报告时,我们推荐使用 Grafana。或者,您可以使用任何其他读取 Prometheus 指标的软件。Prometheus从 MinIO 中提取了范围广泛的细粒度硬件和软件指标


pasted image 0 - 2023-04-02T193310.969.png


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 并解压缩。

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

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 端口等。

启动格拉法纳。

cd /grafana-8.4.3/bin
./grafana-server

或者,要使用 systemd 或 init.d 启动 Grafana,请参阅在 Debian 或 Ubuntu 上安装

使用 Web 浏览器登录到 Grafana http://localhost:3000/第一次您需要使用 admin 作为用户名和密码登录。系统将提示您更改密码。

要安装 MinIO Grafana 仪表板,请单击加号并选择导入。


pasted image 0 - 2023-04-02T193343.300.png



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


pasted image 0 - 2023-04-02T193404.987.png


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


pasted image 0 - 2023-04-02T193425.023.png


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


pasted image 0 - 2023-04-02T193447.557.png


无论您使用的是 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 节点出现故障,我们将发出一个导致页面的警报。

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 警报概述

首先,创建将用于发送警报的通知通道。单击警报下的通知通道,然后单击添加通道。


pasted image 0 - 2023-04-02T193513.543.png


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


pasted image 0 - 2023-04-02T193534.874.png


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


pasted image 0 - 2023-04-02T193558.936.png


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

单击以添加新面板。


pasted image 0 - 2023-04-02T193621.256.png


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


pasted image 0 - 2023-04-02T193642.430.png


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


pasted image 0 - 2023-04-02T193706.881.png


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


pasted image 0 - 2023-04-02T193727.418.png


单击右上角的应用以保存您的仪表板和警报。您已经配置了第一个 Grafana 警报。

那是什么?你说你不想在你的 MinIO 集群上创建错误条件。出于演示目的,我将关闭我的 MinIO 节点。

您可以看到此情况反映在仪表板中。


pasted image 0 - 2023-04-02T193750.853.png


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


pasted image 0 - 2023-04-02T193810.923.png


我的 webhook 已收到通知。


pasted image 0 - 2023-04-02T193831.365.png


MinIO 的完全可见性

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


上一篇 下一篇