使用 OpenObserve 与 MinIO

Using OpenObserve with MinIO

可观察性是关于收集信息(跟踪、日志、指标),目的是提高性能、可靠性和可用性。很少只有一种可以查明事件根本原因的信息,更多的时候,当我们关联这些信息来形成叙述时,我们才能更好地理解。随着越来越多的组织构建可观察性堆栈,他们发现高性能、与 S3 兼容且原生于 Kubernetes 的 MinIO 对象存储必不可少。

作为负责维护堆栈的工程师,指标是您用于了解基础设施的最重要工具之一。过去,我们已经发布过几篇博客文章,介绍了使用 Grafana 和 PrometheusLokiElasticSearchOpenTelemetry 从 MinIO 部署中衡量和提取指标的几种方法,但您可以使用任何您想要的方法来利用 MinIO 的 Prometheus 指标。我们邀请您观察、监控和提醒您在 MinIO 部署中 - 开源 MinIO 是为简便性和透明度而构建的,因为这是您在大规模运营时的方式。

在关于可观察性的过去几篇博客文章中,我们介绍了如何 在 MinIO 中实现跟踪 并将 MinIO 日志发送到 ElasticSearch,这表明 MinIO 由于其业界领先的性能和可扩展性,是 OpenObserve 的完美伴侣。MinIO 能够实现惊人的性能 - 我们已 对它进行了基准测试 ,在 32 个现成的 NVMe SSD 节点上,GET 的速度为 325 GiB/s (349 GB/s),PUT 的速度为 165 GiB/s (177 GB/s) - 并用于构建数据湖/湖仓和分析以及 AI/ML 工作负载。随着 MinIO 在存储基础设施中发挥着至关重要的作用,收集、监控和分析 MinIO 及其支持的应用程序堆栈的性能和使用指标非常重要。

今天,我们将重点关注 OpenObserve 和 MinIO。OpenObserve 是一个开源的可观察性平台,旨在简化日志、指标和跟踪的监控。由于与 Minio 等存储服务的兼容性,OpenObserve 显着降低了存储成本 - 将其降低到比 Elasticsearch 低约 140 倍。

我们选择 OpenObserve 是因为其简单的学习曲线和统一的可观察性功能。事实上,OpenObserve 可用于从各种来源收集指标、日志和跟踪,并且可以用于关联这些数据以洞察应用程序或系统的运行状况。

在这篇博文中,我们将讨论如何

  • 使用存储桶设置 MinIO 以进行数据流
  • 将 MinIO 配置为 OpenObserve 后端并摄取日志数据

让我们开始吧。

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 控制台,使用 minioadmin 和 minioadmin 作为用户名和密码分别登录。单击“创建存储桶”按钮并创建 testbucket123。

当您在 MinIO 控制台中时,请注意,有一个时间点 指标仪表板,您可以使用它来快速轻松地进行监控。

OpenObserve

在我们设置 OpenObserve 之前,让我们讨论一下部署中的一些基本架构。OpenObserve 需要存储两种不同类型的数据,具体取决于它是在本地模式还是集群模式下部署的。

在本地模式下,元数据可以存储在 MinIO 存储桶中,而在集群模式下,由于设置的分布式性质,它必须存储在 etcd 中。另一方面,本地和集群模式中的数据都可以存储在 MinIO 存储桶中。

在此迭代中,我们将向您展示如何在您的本地数据中心中设置 OpenObserve 托管安装。

为了快速入门,我们将使用 Docker 进行设置。从以下列表中选择一个 Docker 镜像

https://gallery.ecr.aws/zinclabs/openobserve

如果是本地存储,我们将创建一个本地文件夹,但在这种情况下,我们将让它直接将数据存储到我们之前创建的 MinIO 存储桶中。有几个 环境变量 可用于配置 MinIO,我们将介绍其中一些以更好地理解。

  • ZO_S3_SERVER_URL:这是 MinIO 终结点 URL;http://localhost:20091
  • ZO_S3_ACCESS_KEY:这是 MinIO 部署的默认用户名;minioadmin
  • ZO_S3_SECRET_KEY:这是 MinIO 部署的默认密码;minioadmin
  • ZO_S3_BUCKET_NAME:我们在 MinIO 部署后创建了此存储桶;testbucket123。此存储桶必须事先创建,OpenObserve 不会创建它,如果它不存在,则会出错。
  • ZO_S3_PROVIDER:由于我们使用 MinIO 作为流后端,因此通常将其设置为 minio。但 MinIO 的优点是它与 S3 SDK 兼容,因此,如果您需要使用特定 S3 功能(如 force_style=true),请将其设置为 s3。
  • ZO_S3_REGION_NAME:这可以是任何东西,我们将将其设置为 us-east-1。

这些是绝对必要的。有关更多可选变量,请参阅 文档

我们现在将上述变量合并到下面的 docker run 命令中

docker run -d \
  -p 5080:5080 \
  -e ZO_ROOT_USER_EMAIL="root@example.com" \
  -e ZO_ROOT_USER_PASSWORD="Complexpass#123" \

  -e ZO_S3_SERVER_URL="http://localhost:20091" \

  -e ZO_S3_ACCESS_KEY="minioadmin" \

  -e ZO_S3_SECRET_KEY="minioadmin" \

  -e ZO_S3_BUCKET_NAME="testbucket123" \

  -e ZO_S3_PROVIDER="minio" \

  -e ZO_S3_REGION_NAME="us-east-1" \
  --name openobserve \
  --hostname openobserve \
  public.ecr.aws/zinclabs/openobserve:latest

您现在应该已经拥有一个已启动并处于运行状态的 OpenObserve 实例。但在我们能够看到任何有意义的仪表板并在其上进行查询之前,我们将加载一些示例数据。

下载示例日志数据

$ curl -L https://zinc-public-data.s3.us-west-2.amazonaws.com/zinc-enl/sample-k8s-logs/k8slog_json.json.zip -o k8slog_json.json.zip

$ unzip k8slog_json.json.zip

我们将使用 OpenObserve 的 API 以及在启动容器时设置的凭据来加载此示例数据

curl http://localhost:5080/api/default/default/_json -i -u "root@example.com:Complexpass#123"  -d "@k8slog_json.json"

数据被摄取后,使用 URL http://localhost:5080 访问 OpenObserve UI,并使用与摄取数据相同的凭据登录。

访问左侧的“日志”页面,并选择 default 索引。在搜索栏中键入 match_all('error') 并单击“搜索”按钮。

结语

对于任何基础设施,特别是存储等关键基础设施,监控系统并设置合理的阈值以及尽快发出警报至关重要。不仅要进行监控和警报,还要对数据进行趋势分析,以便进行长期分析。例如,假设您突然注意到您的 MinIO 集群占用了大量的空间,那么了解这部分空间是在过去的 6 个小时、6 个星期还是 6 个月内占用的是很有帮助的。根据此信息,您可以决定是否需要添加更多空间或清理现有空间中使用的无效空间。您不仅可以使用它来监控 MinIO,还可以监控您的整个基础设施,以便全面了解生态系统,这将有助于您在出现问题时进行关联分析。


如果您对设置新的 OpenObserve 有疑问,或者您已经为 MinIO 创建了现有的仪表板,并且想与我们分享,请通过 Slack 与我们联系!