微信公众号“SRE成长记”可查看更多精彩内容

前言

minio集群有暴露监控指标接口给Prometheus,可通过配置Prometheus访问MinIO集群的权限,将MinIO集群接入Prometheus监控,并通过MinIO官方发布的Grafana Dashboard(ID:13502,链接:https://grafana.com/grafana/dashboards/13502-minio-dashboard/)将指标展示在Grafana。

本文记录Prometheus与MinIO集群部署在同一k8s集群内的监控接入过程。

k8s集群内Prometheus监控MinIO集群

1.1 MinIO端配置Prometheus访问权限

MinIO给Prometheus提供了两种访问策略:

1)public方式: 给MinIO集群设置环境变量export MINIO_PROMETHEUS_AUTH_TYPE=public,Prometheus可以不通过验证访问MinIO集群;这种方式方便简洁,本文采用这种方式。 2)访问验证token方式: 通过客户端命令mc使用命令mc admin prometheus generate <ALIAS>生成验证token,将token配置到Prometheus,Prometheus根据token信息访问集群,具体方法可参考官网。 修改MinIO集群的minio.yaml文件,修改环境变量env部分,新增Prometheus访问权限:

env:
 - name: MINIO_PROMETHEUS_AUTH_TYPE
   value: public

执行kubectcl apply minio.yaml生效。

1.2 service暴露监控指标接口

在service的yaml文件中增加annotations模块,暴露监控接口信息:

[root@rancher-0001 minio]# cat service-minio.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: minio
  name: minio
  namespace: public
  namespace: monitoring
  annotations:        #增加该模块信息
    prometheus.io/scrape: "true"
    prometheus.io/port: "9000"
    prometheus.io/path: "/minio/v2/metrics/cluster"
spec:
  ports:
  - name: minio-port-9000
    port: 9000
    protocol: TCP
    targetPort: 9000
  - name: minio-port-9001
    port: 9001
    protocol: TCP
    targetPort: 9001
  selector:
    app: minio
  type: ClusterIP

执行kubectl apply service-minio.yaml配置生效

1.3 创建servicemonitor

[root@rancher-0001 minio]# cat service-monitor-minio.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: minio
namespace: public
labels:
app: minio-cluster
spec:
endpoints:
- interval: 15s
path: /minio/v2/metrics/cluster
port: minio-port-9000
namespaceSelector:
matchNames:
- public
selector:
matchLabels:
app: minio
[root@rancher-0001 minio]#

执行kubectl apply -f service-monitor-minio.yaml创建。 创建好后,访问Prometheus的Target界面,能看到minio集群节点均已上线: image.png

1.4 监控看板接入

将MinIO官方的发布的Grafana Dashboard (ID为13502)导入Grafana,就能看到监控信息了。

2.MinIO集群监控指标汇总

2.1 对象衡量指标

minio_bucket_objects_size_distribution 存储桶中对象大小的分布,包括存储桶名称的标签。

2.2.复制指标

这些指标仅针对启用了服务器端存储桶复制的 MinIO 集群进行填充。 minio_bucket_replication_failed_bytes 复制的字节总数至少失败一次。 minio_bucket_replication_pending_bytes 等待复制的总字节数。 minio_bucket_replication_received_bytes 从另一个源存储桶复制到此存储桶的字节总数。 minio_bucket_replication_sent_bytes 复制到目标存储桶的总字节数。 minio_bucket_replication_pending_count 此存储桶挂起的复制操作总数。 minio_bucket_replication_failed_count 此存储桶的复制操作失败总数。

2.3 存储桶指标

minio_bucket_usage_object_total 对象总数 minio_bucket_usage_total_bytes 总存储桶大小(以字节为单位)

2.4 缓存指标

minio_cache_hits_total 磁盘缓存命中总数 minio_cache_missed_total 磁盘缓存未命中总数 minio_cache_sent_bytes 从缓存中提供的总字节数 minio_cache_total_bytes 缓存磁盘的总大小(以字节为单位) minio_cache_usage_info 总缓存使用百分比,值 1 表示高,0 表示低,标签级别也设置 minio_cache_used_bytes 当前缓存使用情况(以字节为单位)

2.5 集群指标

minio_cluster_capacity_raw_free_bytes 群集中联机的总可用容量。 minio_cluster_capacity_raw_total_bytes 群集中联机的总容量。 minio_cluster_capacity_usable_free_bytes 群集中联机的总可用容量。 minio_cluster_capacity_usable_total_bytes 群集中联机的总可用容量。

2.6 节点指标

minio_cluster_nodes_offline_total 脱机的 MinIO 节点总数。 minio_cluster_nodes_online_total 联机的最小值节点总数。 minio_heal_objects_error_total 在当前自我修复运行中修复失败的对象 minio_heal_objects_heal_total 在当前自我修复运行中修复的对象 minio_heal_objects_total 在当前自我修复运行中扫描的对象 minio_heal_time_last_activity_nano_seconds 自上次自我修复活动以来经过的时间(以纳米秒为单位)。这被设置为 -1,直到初始自我修复 minio_inter_node_traffic_received_bytes 从其他对等节点接收的总字节数。 minio_inter_node_traffic_sent_bytes 发送到其他对等节点的总字节数。 minio_node_disk_free_bytes 磁盘上可用的总存储。 minio_node_disk_total_bytes 磁盘上的总存储。 minio_node_disk_used_bytes 磁盘上使用的总存储。 minio_node_file_descriptor_limit_total 限制 MinIO 服务器进程的打开文件描述符的总数。 minio_node_file_descriptor_open_total MinIO 服务器进程打开的文件描述符的总数。 minio_node_io_rchar_bytes 进程从底层存储系统(包括缓存) 读取的总字节数,/proc/[pid]/io rchar minio_node_io_read_bytes 进程从底层存储系统读取的总字节数,/proc/[pid]/io read_bytes minio_node_io_wchar_bytes 进程写入底层存储系统的总字节数,包括页面缓存,/proc/[pid]/io wchar minio_node_io_write_bytes 进程写入底层存储系统的总字节数,/proc/[pid]/io write_bytes minio_node_process_starttime_seconds 每个节点的 MinIO 进程的开始时间,自 Unix 纪元以来的时间(以秒为单位)。 minio_node_process_uptime_seconds 每个节点的 MinIO 进程的正常运行时间(以秒为单位)。 minio_node_scanner_bucket_scans_finished 自服务器启动以来完成的存储桶扫描总数。 minio_node_scanner_bucket_scans_started 自服务器启动以来启动的存储桶扫描总数。 minio_node_scanner_directories_scanned 自服务器启动以来扫描的目录总数。 minio_node_scanner_objects_scanned 自服务器启动以来扫描的唯一对象总数。 minio_node_scanner_versions_scanned 自服务器启动以来扫描的对象版本总数。 minio_node_syscall_read_total 总读取系统调用内核。/proc/[pid]/io syscr minio_node_syscall_write_total 总写入系统调用到内核。/proc/[pid]/io syscw

2.7 S3 指标

minio_s3_requests_error_total 有错误的 S3 请求总数 minio_s3_requests_inflight_total 当前正在运行的 S3 请求总数 minio_s3_requests_total S3 请求总数 minio_s3_time_ttbf_seconds_distribution 跨 API 调用到第一个字节的时间分布。 minio_s3_traffic_received_bytes 接收的 s3 字节总数。 minio_s3_traffic_sent_bytes 发送的 s3 字节总数

2.8 软件指标

minio_software_commit_info Git 提交最小值版本的哈希值。 minio_software_version_info 服务器的最小 IO 发布标记

::: hljs-right

未完待续,可前往公众号先阅读下集...

:::

下期预告:

  1. k8s集群内部Prometheus怎么监控集群外部MinIO集群?
  2. MinIO控制台怎么展示监控数据?
  3. 在配置监控过程中可能踩哪些坑? image.png