使用 InfluxDB 与 MinIO

Using InfluxDB with MinIO

作为维护一个栈的工程师,指标是理解你的基础设施最重要的工具之一。过去,我们发布了几篇博客文章,介绍了使用 Grafana 和 PrometheusLoki 以及 OpenTelemetry 从 MinIO 部署中衡量和提取指标的几种方法,但你可以使用任何你想要的东西来利用 MinIO 的 Prometheus 指标。我们邀请你观察、监控和提醒你的 MinIO 部署 – 开源 MinIO 是为简洁和透明而构建的,因为这就是你在规模化运营时的方式。

InfluxDB 是基于与 MinIO 相同的理念构建的。它是一个单一的 Go 二进制文件,可以在许多不同类型的云和内部部署环境中启动。它非常轻巧,但也功能丰富,包括复制和加密等功能,并且它提供了与各种应用程序的集成。MinIO 是 InfluxDB 的完美伴侣,因为它拥有业界领先的性能和可扩展性。MinIO 能够实现超高性能 – 我们曾在 基准测试 中使用 32 个节点的现成 NVMe SSD 获得 325 GiB/s(349 GB/s)的 GET 速度和 165 GiB/s(177 GB/s)的 PUT 速度 – 并且被用于构建数据湖/湖仓以及分析和 AI/ML 工作负载。随着 MinIO 在存储基础设施中发挥着关键作用,收集、监控和分析性能和使用指标至关重要。

你可能会问,“为什么我要使用像 InfluxDB 这样的东西而不是 Prometheus 和 Grafana?”使用 Prometheus 和 Grafana,你需要多个组件来协调和配置才能使它们正常工作。你必须首先将指标/数据发送到 Prometheus,然后连接到 Grafana 以可视化数据。这只是一个例子 – Grafana 生态系统中肯定还有很多其他活动部件。使用 InfluxDB,数据存储和可视化组件都捆绑在一起,就像 MinIO 一样。

在这篇博文中,我们将讨论以下几个方面

  • InfluxDB 服务的抓取器,用于抓取 MinIO 指标
  • 配置对抓取指标的警报

让我们开始吧。

MinIO

我们将启动一个包含 4 个磁盘的 Minio 节点。MinIO 可以在任何地方运行 – 物理、虚拟或容器 – 在本概述中,我们将使用使用 Docker 创建的容器。

对于这 4 个磁盘,请在主机上为 `minio` 创建目录

mkdir -p /home/aj/minio/disk-1 \
mkdir -p /home/aj/minio/disk-2 \
mkdir -p /home/aj/minio/disk-3 \
mkdir -p /home/aj/minio/disk-4

使用以下规范启动 MinIO 节点的 Docker 容器

docker run -d \
  -p 20091:9001 \
  -v /home/aj/minio/disk-1:/mnt/disk1 \
  -v /home/aj/minio/disk-2:/mnt/disk2 \
  -v /home/aj/minio/disk-3:/mnt/disk3 \
  -v /home/aj/minio/disk-4:/mnt/disk4 \
  --name minio \
  --hostname minio \
  quay.io/minio/minio server http://minio/mnt/disk{1...4}/minio --console-address ":9001"

以上操作将在 Docker 中启动 MinIO 服务,控制台端口将在主机上的 `20091` 上监听。它还会将我们创建的本地目录作为卷安装到容器中,MinIO 将在这些目录中存储数据。你可以通过 `http://localhost:20091` 访问你的 MinIO 服务。

状态:        4 在线, 0 离线。
API: http://172.20.0.2:9000  http://127.0.0.1:9000

控制台: http://172.20.0.2:9001 http://127.0.0.1:9001

文档: https://docs.min.io


如果看到4 在线,则表示已成功使用 4 个驱动器设置了 Minio 节点。

转到浏览器,使用http://localhost:20091加载 MinIO 控制台,使用minioadminminioadmin分别作为用户名和密码登录。点击创建存储桶按钮,创建testbucket123

在 MinIO 控制台中,请注意有一个点对点指标仪表板,可用于快速轻松地监控。

InfluxDB

接下来,让我们设置 InfluxDB 以从 MinIO 容器中抓取一些指标。MinIO 使用 Prometheus 数据模型发布了许多指标。请参见指标和警报 - MinIO 对象存储用于 Kubernetes,以获取可用指标的完整列表。

让我们看看是否可以使用 InfluxDB 监控一些基本的 MinIO 统计信息。

创建一个目录来存储 InfluxDB 数据和config.yml

mkdir -p /home/aj/influx/disk

创建 InfluxDB 所需的配置文件

docker run --rm influxdb:2.7.1 influxd print-config > /home/aj/influx/config.yml

docker run -d \
  -p 20086:8086 \
  -v /home/aj/influx/disk:/var/lib/influxdb2 \
-v /home/aj/influx/config.yml:/etc/influxdb2/config.yml \
  --name influxdb \
  --hostname influxdb \
  Influxdb:2.7.1

设置默认凭据以登录 InfluxDB

docker exec influxdb influx setup \
  --bucket BUCKET_NAME \
  --org ORG_NAME \
  --password PASSWORD \
  --username USERNAME \
  --force

注意:上面的存储桶是 InfluxDB 中的数据库,而不是 MinIO 存储桶,它们都称为存储桶,但没有关系。

现在您可以使用http://localhost:20086登录仪表板

在开始之前

  • 让我们创建一个组织,我们将在其中存储 MinIO 指标
  • 创建一个 InfluxDB 存储桶来存储 MinIO 指标

抓取器

抓取器用于从 MinIO 服务中获取信息。

创建一个 InfluxDB 抓取器

  • 在左侧的导航菜单中,选择数据(加载数据)> 抓取器。

  • 点击加载数据
  • 点击创建抓取器。
  • 输入“MinIO”作为抓取器的名称。
  • 选择之前创建的 Influx 存储桶以存储抓取的数据。
  • 对于要抓取的目标 URL,输入在 Docker 中运行的 MinIO 实例的 URL。由于两个容器可以在内部相互通信,因此 URL 值为http://minio:9000/minio/v2/metrics/cluster,它以 Prometheus 数据格式提供 InfluxDB 特定指标。
  • 点击创建。

此时,您应该正在收集指标,并且可以选择使用 Grafana 等工具来可视化它们。我们将在下一篇博文中更详细地介绍此主题。

警报

根据为捕获的指标设置的阈值,设置警报非常容易。首先,让我们使用数据资源管理器确保抓取器正常工作。


minio_cluster_capacity_usable_total_bytesminio_cluster_capacity_usable_free_bytes设置过滤器,以比较 MinIO 部署上的可用总空间与可用空闲空间。

使用以下步骤创建新的检查

  • 在左侧的导航菜单中,选择警报> 警报。
  • 点击创建,选择要创建的检查类型。
  • 点击左上角的命名此检查,为检查提供唯一的名称,然后配置检查。

那么,您实际上会设置这些检查以提醒哪些内容呢?

  • 创建一个名为MINIO_NODE_DOWN的阈值检查。为minio_cluster_nodes_offline_total键设置过滤器。将阈值设置为当值为 1 以上时发出警告。
  • 创建一个名为MINIO_QUORUM_WARNING的阈值检查。为minio_cluster_disk_offline_total键设置过滤器。将阈值设置为当值为配置的擦除码奇偶校验设置少 1 时为严重。例如,使用 EC:4 的部署应将此值设置为 3。
  • 客户设置的最受欢迎的检查之一是可用的空闲磁盘空间量minio_node_disk_free_bytes。这很重要,因为您永远不想接近任何磁盘容量的 100%,因为磁盘越接近满,您可以在它们上执行的操作就越少。因此,通常建议将阈值设置为可用总磁盘空间的约 20%。例如,如果您的磁盘是 4 TB,您希望将阈值设置为 0.8 TB。

有关更多阈值,请查看文档。选择阈值后,您可以通过Slack 或 Pagerduty收到通知。

结语

对于任何基础设施,尤其是像存储这样的关键基础设施,系统监控至关重要,需要设置合理的阈值并尽快发出警报。不仅要进行监控和警报,还需要对数据进行趋势分析,以便进行长期分析。例如,假设您突然发现您的 MinIO 集群正在使用大量的存储空间,您是否想知道这部分空间是在过去 6 小时、6 周还是 6 个月内使用的?根据此信息,您可以决定是否需要添加更多存储空间或清理一些使用效率低的空间。

您是 InfluxDB 的粉丝吗?在我们下一篇 InfluxDB 博客文章中,我们将演示如何使用 MinIO 作为 InfluxDB 的后端存储,使用他们的最新 IOX 代码库,并向您展示如何创建自定义仪表板来监控 MinIO。

如果您有任何关于设置新检查的问题,或者您已经创建了一些用于监控 MinIO 的仪表板,并且愿意与我们分享,请在 Slack 上联系我们!