云原生之运维监控实践-使用Prometheus与Grafana实现对MinIO服务的监测

背景

如果你要为应用程序构建规范或用户故事,那么务必先把应用程序每个组件的监控指标考虑进来,千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》

去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章,当时使用的是 docker-compose 在单台机器上部署若依微服务 ruoyi-cloud 项目;在这个基础上,作为演示项目,我们计划实现对所有基础组件和微服务的监控。之前记录了搭建 PrometheusGrafana 监控系统的过程。今天这篇文章主要是记录下对分布式文件存储 MinIO 服务的监测。

虚机资源

共用到了2台虚机,1台作为应用服务节点,1台运维监控节点。

主机名IP说明
svc192.168.44.168服务节点
ops192.168.44.169监控节点

基本选用当前最新版本,即将安装的 PrometheusGrafana 及组件版本信息如下:

  • Prometheus版本:v2.54.1
  • Grafana版本:11.2.0
  • MinIO版本:RELEASE.2024-11-07T00-52-20Z

系统环境

[root@ops ~]# uname -a
Linux ops 5.10.0-182.0.0.95.oe2203sp3.x86_64 #1 SMP Sat Dec 30 13:10:36 CST 2023 x86_64 x86_64 x86_64 GNU/Linux
[root@ops ~]# cat /proc/version
Linux version 5.10.0-182.0.0.95.oe2203sp3.x86_64 (root@dc-64g.compass-ci) (gcc_old (GCC) 10.3.1, GNU ld (GNU Binutils) 2.37) #1 SMP Sat Dec 30 13:10:36 CST 2023

ops节点:docker-compose安装Prometheus与Grafana

参考云原生之运维监控实践-OpenEuler22.03SP3上安装Prometheus与Grafana实现主机状态监测

svc节点:MinIO服务

无需 exporterMinIO 本身支持 Prometheus 集成,因此只需要简单配置即可开始监控其运行状况、性能和相关指标。

生成抓取配置

安全起见,这里以带认证的方式抓取监测数据。如果以匿名方式开启,可以使用环境变量:MINIO_PROMETHEUS_AUTH_TYPE=public

下载 mc 客户端工具,通过 mc admin prometheus generate <ALIAS> 命令生成 Prometheus 抓取配置。

./mc admin prometheus generate my-minio
./mc admin prometheus generate my-minio bucket
./mc admin prometheus generate my-minio resource
./mc admin prometheus generate my-minio node

具体命令执行结果如下(实际对结果中的 job_name 以及 localhost 进行了修改,具体见后面的 prometheus 配置):

[root@svc minio-bucket]# ./mc alias set my-minio http://localhost:9000 myMinio youGuess
Added `my-minio` successfully.
[root@svc minio-bucket]# ./mc admin prometheus generate my-minio
scrape_configs:
- job_name: minio-job
  bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoibWluaW9BZG1pbiIsImV4cCI6NDg4NTk0ODIwNH0.TJCvrtlu_DeGW2lVr6JDPUinRZk8gTGAk7wKXhAilg2XApJHdMIY_1KITkbw1lpiv5G56Mi1mUjzOHrEwG40Sw
  metrics_path: /minio/v2/metrics/cluster
  scheme: http
  static_configs:
  - targets: ['localhost:9000']

[root@svc minio-bucket]# ./mc admin prometheus generate my-minio bucket
scrape_configs:
- job_name: minio-job-bucket
  bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoibWluaW9BZG1pbiIsImV4cCI6NDg4NTk0ODIxNX0.PizTh7TFF93I2tEj4s_8C8mL08fjKPE661ADcg9N1HeYpUz6MpSwqwWuHKB41VDafdIkw81kdtNKisZGzoC39A
  metrics_path: /minio/v2/metrics/bucket
  scheme: http
  static_configs:
  - targets: ['localhost:9000']

[root@svc minio-bucket]# ./mc admin prometheus generate my-minio resource
scrape_configs:
- job_name: minio-job-resource
  bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoibWluaW9BZG1pbiIsImV4cCI6NDg4NTk0ODIxOH0.0yY305xDG6fcPl0Bj18PFzS8U0LeSZl7QOz_rn4bU_7h6RLfMJ-u74W_rKZEMed115FDD5Ti5WM9MYtBx_d0tA
  metrics_path: /minio/v2/metrics/resource
  scheme: http
  static_configs:
  - targets: ['localhost:9000']

[root@svc minio-bucket]# ./mc admin prometheus generate my-minio node
scrape_configs:
- job_name: minio-job-node
  bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoibWluaW9BZG1pbiIsImV4cCI6NDg4NTk0ODIyMn0.rmf4_xB0nS8PVUuAJnYp6S5Wyqo8y4YUzOTjXwjRhr6pXn0-y-Bi60IIo2vJQUUSOFrtbNuehEkt_FhEeplnjA
  metrics_path: /minio/v2/metrics/node
  scheme: http
  static_configs:
  - targets: ['localhost:9000']

修改Prometheus配置

Prometheus 配置中增加对svc主机上 MinIO 运行状态的抓取配置。

  • [root@ops monitoring]# vi ./prometheus/conf/prometheus.yml
scrape_configs:
  - job_name: ops-minio-job
    bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoibWluaW9BZG1pbiIsImV4cCI6NDg4NTk0ODIwNH0.TJCvrtlu_DeGW2lVr6JDPUinRZk8gTGAk7wKXhAilg2XApJHdMIY_1KITkbw1lpiv5G56Mi1mUjzOHrEwG40Sw
    metrics_path: /minio/v2/metrics/cluster
    scheme: http
    static_configs:
    - targets: ['192.168.44.168:9000']

  - job_name: ops-minio-job-bucket
    bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoibWluaW9BZG1pbiIsImV4cCI6NDg4NTk0ODIxNX0.PizTh7TFF93I2tEj4s_8C8mL08fjKPE661ADcg9N1HeYpUz6MpSwqwWuHKB41VDafdIkw81kdtNKisZGzoC39A
    metrics_path: /minio/v2/metrics/bucket
    scheme: http
    static_configs:
    - targets: ['192.168.44.168:9000']

  - job_name: ops-minio-job-resource
    bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoibWluaW9BZG1pbiIsImV4cCI6NDg4NTk0ODIxOH0.0yY305xDG6fcPl0Bj18PFzS8U0LeSZl7QOz_rn4bU_7h6RLfMJ-u74W_rKZEMed115FDD5Ti5WM9MYtBx_d0tA
    metrics_path: /minio/v2/metrics/resource
    scheme: http
    static_configs:
    - targets: ['192.168.44.168:9000']

  - job_name: ops-minio-job-node
    bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoibWluaW9BZG1pbiIsImV4cCI6NDg4NTk0ODIyMn0.rmf4_xB0nS8PVUuAJnYp6S5Wyqo8y4YUzOTjXwjRhr6pXn0-y-Bi60IIo2vJQUUSOFrtbNuehEkt_FhEeplnjA
    metrics_path: /minio/v2/metrics/node
    scheme: http
    static_configs:
    - targets: ['192.168.44.168:9000']

重启 Prometheus 容器。

[root@ops monitoring]# docker restart ops-prometheus

验证MinIO抓取配置

  • 验证metrics端点
  1. http://192.168.44.168:9000/minio/v2/metrics/cluster
  2. http://192.168.44.168:9000/minio/v2/metrics/bucket

由于我使用的是带认证方式的抓取配置,因此上述的指标端点不能在浏览器中直接打开访问;下面是在 Postman 中测试的结果。

2024-11-24-6-Metrics.jpg

  • Prometheus控制台验证minio相关的指标

2024-11-24-3-MinIOIndex.jpg

配置Grafana对主机状态的可视化

浏览器访问http://192.168.44.169:3000。

  • 配置数据源
  1. 点击左侧菜单中的"Add new connection"。
  2. 选择或搜索"Data Sources"。
  3. 点击"Add data source"并选择"Prometheus"。
  4. 在"HTTP"部分输入Prometheus地址,eg:http://192.168.44.169:9090
  5. 点击"Save & Test"确认连接成功。
  • 查看现成的仪表板

https://grafana.com/grafana/dashboards/这个页面是 Grafana 的官方仪表板目录,用户可以在这里找到和共享各种现成的 Grafana 仪表板。这些仪表板覆盖了多种监控需求,包括系统性能、应用监控、网络流量等。用户可以根据自己的需求搜索和导入适合的仪表板,提高监控效率和可视化效果。这里我们搜索 MinIO ,结果中有个 MinIO Dashboard 监控Server, MinIO Bucket Dashboard 监控Bucket,点击进去可以查看详细的UI效果,复制仪表板的id,两个ID分别如下:

  1. 13502 MinIO Dashboard
  2. 19237 MinIO Bucket Dashboard
  • 导入现成的仪表板
  1. 在右侧菜单中点击"New"按钮,然后选择"Import"。
  2. 在输入框中,可以直接输入现成仪表板的ID,或者上传JSON文件。常用的主机监控仪表板ID是13502(MinIO Dashboard),19237(MinIO Bucket Dashboard)。
  3. 点击"Load",随后选择已配置好的数据源。
  4. 点击"Import"完成导入。

2024-11-24-1-ImportServer.jpg

2024-11-24-2-ImportBucket.jpg

MinIO监控效果

2024-11-24-4-DashboardServer.jpg

2024-11-24-5-DashboardBucket.jpg

遇到的问题

Fatal glibc error: CPU does not support x86-64-v2

参考 Issues 解决:https://github.com/minio/minio/issues/18365

小总结

If you can’t measure it, you can’t improve it!

没有度量就没有改进,实际上,监控系统有以下两个客户:技术,业务。上述内容即是对技术组件的监控,方便技术方面的改进与优化。
本文记录了在 Docker 环境下通过 PrometheusGrafana 实现对 MinIO 服务的监控。具体步骤包括在服务节点上使用 mc 生成抓取配置 ,配置 Prometheus 抓取 MinIO 的监控数据,并在 Grafana 中配置数据源和导入现成的监控仪表板,以实现对分布式对象存储服务的性能监控和可视化。

Reference

  • https://github.com/minio/minio/tags
  • https://min.io/docs/minio/container/operations/monitoring/collect-minio-metrics-using-prometheus.html
  • https://min.io/docs/minio/linux/operations/monitoring/grafana.html#minio-server-grafana-metrics
  • https://grafana.com/grafana/dashboards/

If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/922266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL注入--时间盲注--理论

时间盲注的原理 当我们使用任何查询语句&#xff0c;界面都没有回显或者回显都不变化时&#xff0c;就要通过sleep()函数来判断我们的查询是否正确&#xff0c;这个过程就叫做时间盲注。 sleep(3) 延时三秒后再进行SQL查询。 ?id1 and sleep(3)-- //立即查询&#xff0c;…

Spring注入Map学习

Spring注入Map学习 在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例 有2个方法很好用 1. 使用Autowired注入 2. 使用构造方法注入 但是奇怪的一点是: 日志打印并没有看到结果, 第一行的 Autowired的结果 是个null 那是因为 注入时机 的问题 注入时机&…

基于卡尔曼滤波器的 PID 控制

基于卡尔曼滤波器的PID控制算法结合了经典控制理论和现代信号处理技术。卡尔曼滤波器&#xff08;Kalman Filter, KF&#xff09;可以对噪声数据进行平滑处理&#xff0c;从而改善PID控制器的性能&#xff0c;特别是在处理具有噪声和不确定性的系统时。以下是详细的设计过程&am…

Day 25

491.递增子序列 力扣题目链接(opens new window) 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 说明: …

机器学习: 阿里巴巴发布基于:蒙特卡洛的应用Marco-o1

本人项目地址大全&#xff1a;Victor94-king/NLP__ManVictor: CSDN of ManVictor git地址&#xff1a;https://github.com/opendatalab/MinerU 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路…

数据结构(Java版)第五期:ArrayList与顺序表(下)

目录 一、用数组实现顺序表 一、用数组实现顺序表 我们提到过&#xff0c;顺序表是基于数组的封装&#xff0c;这次我们以int为例&#xff0c;用数组去实现一个顺序表。 public class MyArrayList {private int[] arr;public MyArrayList(int capacity){//指定初始容量arr n…

YonBuilder移动开发鸿蒙版本编译教程

0.YonBuilder移动开发应用详情页访问路径 登录用友开发者中心&#xff0c;鼠标悬浮右上角昵称处&#xff0c;点击「工作台」进入「开发者中心工作台」 「开发者中心工作台」页面点击左侧竖直菜单面板中「移动应用开发」后&#xff0c;选择右侧页面内的目标应用&#xff0c;即可…

kafka进阶_3.消费消息

文章目录 一、消费消息概览1.1、基本代码1.2、消费过程 二、消费者组2.1、push & pull2.2、消费者组 三、调度器Coordinator四、消费者分配策略五、偏移量offset5.1、起始偏移量5.2、指定偏移量消费5.3、偏移量提交5.3.1、自动提交5.3.2、手动提交 5.4、偏移量的保存 六、消…

(笔记,自己可见_1)简单了解ZYNQ

1、zynq首先是一个片上操作系统&#xff08;Soc&#xff09;&#xff0c;结合了arm&#xff08;PS&#xff09;和fpga&#xff08;PL&#xff09;两部分组成 Zynq系统主要由两部分组成&#xff1a;PS&#xff08;Processing System&#xff09;和PL&#xff08;Programmable L…

c语言的qsort函数理解与使用

介绍&#xff1a;qsort 函数是 C 标准库中用于排序的快速排序算法函数。它的用法非常灵活&#xff0c;可以对任意类型的元素进行排序&#xff0c;只要提供了比较函数即可。 qsort 函数原型及参数解释&#xff1a; void qsort ( void* base, //指向要排序的数组的首元素…

【淘汰9成NLP面试者的高频面题】LSTM中的tanh和sigmoid分别用在什么地方?为什么?

博客主页&#xff1a; [青松] 本文专栏: NLP 大模型百面百过 【淘汰9成NLP面试者的高频面题】LSTM中的tanh和sigmoid分别用在什么地方&#xff1f;为什么&#xff1f; 重要性&#xff1a;★★★ &#x1f4af; 本题主要考察面试者对以下问题的理解&#xff1a; ① 数据特征和模…

JWT加解密应用方案设计与实现

为什么要用令牌技术&#xff1f; 这个问题其实问的就是Cookice、Session、Token(令牌)之间的区别了。 首先&#xff0c;存放的位置做一下比较&#xff0c;Cookice小饼干存放在客户端的浏览器当中&#xff0c;Session会话存放在服务器线程当中(本质上还是需要利用Cookice实现)…

数据集-目标检测系列- 安全背心 检测数据集 safety_vests >> DataBall

数据集-目标检测系列- 安全背心 检测数据集 safety DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff09;数据集可视化项目&#xff1a;gi…

C语言菜鸟入门·关键字·int的用法

目录 1. int关键字 1.1 取值范围 1.2 符号类型 1.3 运算 1.3.1 加法运算() 1.3.2 减法运算(-) 1.3.3 乘法运算(*) 1.3.4 除法运算(/) 1.3.5 取余运算(%) 1.3.6 自增()与自减(--) 1.3.7 位运算 2. 更多关键字 1. int关键字 int 是一个关键字&#xff0…

unity中:超低入门级显卡、集显(功耗30W以下)运行unity URP管线输出的webgl程序有那些地方可以大幅优化帧率

删除Global Volume&#xff1a; 删除Global Volume是一项简单且高效的优化措施。实测表明&#xff0c;这一改动可以显著提升帧率&#xff0c;甚至能够将原本无法流畅运行的场景变得可用。 更改前的效果&#xff1a; 更改后的效果&#xff1a; 优化阴影和材质&#xff1a; …

Vue + Websocket播放PCM(base64转ArrayBuffer、 字符串转ArrayBuffer)

文章目录 引言I 音视频处理相关概念和APIII 案例:基于开源库 pcm-player方式播放借助MediaSource和Audio对象播放音频流。基于原生api AudioContext 播放操作III 格式转换js字符串转ArrayBufferbase64 转 ArrayBufferIV 解决pcm-player分片播放问题引言 需求: 基于webscoket传…

【JavaEE进阶】SpringBoot 快速上⼿

了解Maven,并配置国内源 使⽤SpringBoot创建⼀个项⽬, 输出HelloWorld 一、Maven 1.什么是Maven 官⽅对于Maven的描述: Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can man…

QT QFormLayout控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例&#xff0c;包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizonta…

PCA算法所体现的核心数学思维

一、PCA算法的基本思想 PCA算法的核心思想是通过线性变换&#xff0c;将数据从原始的高维空间投影到低维空间&#xff0c;同时尽可能保留数据的主要变异性。这种变换是通过找到一组新的坐标轴&#xff08;即主成分&#xff09;来实现的&#xff0c;这些坐标轴是原始数据空间的…

如何解决pdf.js跨域从url动态加载pdf文档

摘要 当我们想用PDF.js从URL加载文档时&#xff0c;将会因遇到跨域问题而中断&#xff0c;且是因为会触发了PDF.js和浏览器的双重CORS block&#xff0c;这篇文章将会介绍&#xff1a;①如何禁用pdf.js的跨域&#xff1f;②如何绕过浏览器的CORS加载URL文件&#xff1f;②如何使…