使用 OpenTelemetry 和 Jaeger 使用 MinIO 进行分布式跟踪

几年前,当你有一个单体应用程序时,调试和诊断相当容易,因为可能只有一个服务有几个用户。如今,系统被分解为更小的微服务,这些微服务部署在 Kubernetes 之上的容器中,分布在不同云环境的多个集群中。在这些类型的分布式环境中,需要观察所有情况,包括整体情况,如果需要,还需要在更细粒度的级别上进行观察。

可观察性大致可以分为三个子类别:日志记录、度量和跟踪。在这篇博文中,我们将向您展示在新的或现有的 MinIO 应用程序中设置跟踪是多么简单。我们将构建一个小型 MinIO 应用程序来执行一些基本请求;这将是我们的基础应用程序,我们将添加跟踪以更好地了解系统组件和功能如何交互。

跟踪是用于描述记录和观察应用程序发出的请求的活动,以及这些请求如何通过系统传播的术语。当系统以分布式方式设置时,我们称之为分布式跟踪,因为它涉及观察应用程序及其通过多个系统的交互。例如,作为开发人员,您的代码可能包含多个函数,但您更感兴趣的是 MinIO 函数需要多长时间执行以及这些函数在应用程序中使用时的相互依赖性。跟踪将通过以下方式提供必要的见解:

  • 识别性能和延迟瓶颈

  • 重大事件发生后寻找根本原因分析

  • 确定多服务架构中的依赖关系

  • 监控应用程序中的事务

迷你IO

我们将从一个小型的 MinIO Python 应用程序开始,它将展示几个简单的操作。稍后我们将添加用于跟踪的代码,以测量代码执行所需的时间。

安装 MinIO

有几种方法可以在各种环境中安装 MinIO 。在这篇博文中,我们将使用 Docker 启动 MinIO,但在生产环境中请确保安装在分布式设置中。

  • 在您的本地机器上创建一个目录,MinIO 将在其中保存数据

$ mkdir -p /minio/数据

  • 使用 Docker 启动 MinIO 容器

$ docker run -d \ -p 9000:9000 \ -p 9001:9001 \ --name minio \ -v /minio/data:/data \ -e "MINIO_ROOT_USER=minio" \ -e "MINIO_ROOT_PASSWORD=minioadmin" \ quay .io/minio/minio 服务器 /data --console-address ":9001"

注意:保留上面使用的凭据的副本,稍后您将需要它们来访问 MinIO。

  • 验证您是否可以通过使用浏览器通过http://localhost:9001/使用用于启动上述容器的凭据登录来访问 MinIO 。

MinIO SDK

有几个SDK支持您将您的应用程序与 MinIO API 集成。在本例中,我们将使用Python SDK。

  • 安装 MinIO Python SDK

$ pip 安装 minio

  • 将包含 MinIO 函数的整个 Python 脚本复制并粘贴到本地文本编辑器中,并将其另存为minio_app.py. 您可以参考它,因为我们将在下面描述它的作用。

from minio import Minio # 方便的基本配置config = { "dest_bucket" : "processed" , # 这将自动创建"minio_endpoint" : "localhost:9000" , "minio_username" : "minio" , "minio_password" : " minioadmin" , } # 初始化 MinIO 客户端minio_client = Minio(config[ "minio_endpoint" ], secure= False , access_key=config[ "minio_username"], secret_key=配置[ "minio_password" ] ) #如果不存在,则创建目标桶minio_client.bucket_exists (config[ "dest_bucket" ]): minio_client.make_bucket(config[ "dest_bucket" ]) print( "Destination Bucket '%s' has been created" % (config[ "dest_bucket" ])) # 创建一个测试对象file_path = "test_object.txt" f = open(file_path, "w" ) f.write( "created test object" ) f.close() #将一个对象放入存储桶minio_client 中。fput_object(配置[ “dest_bucket” ], file_path, file_path) # 从桶中获取对象minio_client.fget_object(config[ "dest_bucket" ], file_path, config[ "dest_bucket" ] + "/" + file_path) # 获取minio_client.list_objects中obj的对象列表(config[ "dest_bucket" ]): print(obj) print( "Some objects here" )

让我们来看看上面的脚本。我们正在使用我们在上一步中启动的 MinIO 容器调用一些基本操作。

在最顶部,我们正在导入我们之前安装的 MinIO Python SDK 并使用默认值初始化它

  • MinIO 端点

  • MinIO 用户名

  • MinIO 密码

  • MinIO 中的目标存储桶名称

from minio import Minio # 方便的基本配置config = { "dest_bucket" : "processed" , # 这将自动创建"minio_endpoint" : "localhost:9000" , "minio_username" : "minio" , "minio_password" : " minioadmin"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pxr007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值