转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
前言
在《MinIO集群怎么接入Prometheus监控?(上)》一文中主要记录了同在k8s集群内的Prometheus怎么监控minio集群。
本文则记录当Prometheus部署在k8s集群内,MinIO集群部署在k8s集群外部时怎么接入监控。
同时,新版MinIO的控制台新增了“Monitoring”模块,怎么将Prometheus收集到的监控指标展示在MinIO控制台。
1. k8s集群内Prometheus监控外部MinIO集群
1.1 MinIO端配置Prometheus访问权限
修改minIO集群的启动脚本,加入Prometheus权限的环境变量(所有MinIO集群节点都要加):
[root@test64 minio]# cat run.sh
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=passadmin@minio
export MINIO_PROMETHEUS_AUTH_TYPE=public #加入这行环境变量,“public”表示Prometheus访问minio集群可以不通过身份验证
/home/App/minio/minio server --config-dir /home/Config/minio --console-address ":9001" \
http://10.99.68.64:9000/home/Data/minio \
http://10.99.68.65:9000/home/Data/minio \
http://10.99.68.66:9000/home/Data/minio \
http://10.99.68.67:9000/home/Data/minio>/home/Logs/minio/start.txt 2>&1 &
[root@test64 minio]#
修改后重新启动MinIO集群服务。
1.2 Prometheus端监控配置
Prometheus监控配置需要手动创建MinIO的service、enpoint和servicemonitor。
1.2.1 创建MinIO集群service
[root@rancher-0001 minio]# cat service.yaml
apiVersion: v1
kind: Service
metadata:
labels: #此处label要和后面servicemonitor对象的seletor匹配
app: minio-cluster
name: minio-cluster
namespace: monitoring #指定创建service的namespace
spec:
type: ClusterIP
ports:
- name: minio-port
port: 9000
protocol: TCP
targetPort: 9000
[root@rancher-0001 minio]#
[root@rancher-0001 minio]# kubectl apply -f service.yaml
service/minio-cluster created
[root@rancher-0001 minio]#
service创建成功:
![](https://i-blog.csdnimg.cn/blog_migrate/0b5867073e5539928611056799b55d5c.png)
此时还看不到挂载点信息:
![](https://i-blog.csdnimg.cn/blog_migrate/48bd2678d8e16c522bfc055707bee4ec.png)
1.2.2 创建MinIO集群endpoint
在上一步创建的service下,创建MinIO集群endpoint信息
[root@rancher-0001 minio]# cat endpoint.yaml
apiVersion: v1
kind: Endpoints
metadata:
labels:
app: minio-cluster #此处和service保持一致
name: minio-cluster
namespace: monitoring
subsets:
- addresses: #minio集群节点IP
- ip: 10.99.68.64
- ip: 10.99.68.65
- ip: 10.99.68.66
- ip: 10.99.68.67
ports:
- name: minio-port
port: 9000
protocol: TCP
[root@rancher-0001 minio]#
[root@rancher-0001 minio]# kubectl apply -f endpoint.yaml #创建endpoint
endpoints/minio-cluster created
[root@rancher-0001 minio]#
再看svc,能看到挂载IP信息:
![](https://i-blog.csdnimg.cn/blog_migrate/bb17cfa89517235a6f2159428c424bb6.png)
1.2.3 创建MinIO集群servicemonitor
创建MinIO集群servicemonitor信息:
[root@rancher-0001 minio]# cat servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
app: minio-node
name: minio-node
namespace: monitoring
spec:
endpoints:
- interval: 15s # 采集频率根据实际需求配置,prometheus默认是15s
port: minio-port # 采集节点端口,service中定义的name
path: /minio/v2/metrics/cluster # 暴露指标的接口路径;默认路径是/metrics,老版本minio的监控接口是/minio/prometheus/metrics ,现在也还能用,暴露的指标少很多
namespaceSelector:
matchNames: # Namespace选择器,关联minio service所在namespace
- monitoring
selector:
matchLabels: #service选择器,和service的labels保持一致
app: minio-cluster
[root@rancher-0001 minio]#
[root@rancher-0001 minio]# kubectl apply -f servicemonitor.yaml #创建servicemonitor
servicemonitor.monitoring.coreos.com/minio-node created
[root@rancher-0001 minio]#
创建成功:
![](https://i-blog.csdnimg.cn/blog_migrate/8244e9eded942f25a8fc92a057527f8b.png)
访问Prometheus的Target界面,能看到4台MinIO服务器节点均已上线:
![](https://i-blog.csdnimg.cn/blog_migrate/1691590fb9a50490748fb39994adfd87.png)
1.3 Grafana看板导入
导入官方监控模板13502,即可看到监控数据:
![](https://i-blog.csdnimg.cn/blog_migrate/57edc227f389ad43b8ff0b2169a1ce4f.png)
1.4 MinIO控制台展示Prometheus数据
截至上一步骤,监控看板已经可以正常查看。目前Prometheus的数据尚未接入MinIO控制台,因此控制看无法查看监控数据,页面标签均为灰色,无法访问:
![](https://i-blog.csdnimg.cn/blog_migrate/50acb56ad2a22e57866f9f73045b0162.png)
将Prometheus监控数据展示在MinIO集群控制台,只需如下步骤:
1)配置Prometheus域名到每一台MinIO集群节点的/etc/hosts
因我没有做域名解析,只用了nginx转发,因此要配置hosts,如有做Prometheus域名解析,可跳过。
10.99.68.110 promethues-sre.com
2)修改MinIO启动脚本,加入Prometheus的URL和job_name两个环境变量。
MinIO根据Prometheus的URL访问Prometheus;根据job_name去获取该job下的监控数据。job_name一定不能配置错了!
[root@test64 minio]# cat run.sh
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=passadmin
export MINIO_PROMETHEUS_AUTH_TYPE=public #上一步骤加入的,允许Prometheus访问minio的配置
export MINIO_PROMETHEUS_URL="http://promethues-sre.com" #加入这行环境变量,连接Prometheus
export MINIO_PROMETHEUS_JOB_ID=minio-cluster #加入这行环境变量,根据job_id获取对应的监控数据
/home/App/minio/minio server --config-dir /home/Config/minio --console-address ":9001" \
http://10.99.68.64:9000/home/Data/minio \
http://10.99.68.65:9000/home/Data/minio \
http://10.99.68.66:9000/home/Data/minio \
http://10.99.68.67:9000/home/Data/minio>/home/Logs/minio/start.txt 2>&1 &
[root@test64 minio]#
MINIO_PROMETHEUS_JOB_ID和Prometheus的job字段保持一致:
![](https://i-blog.csdnimg.cn/blog_migrate/4c98a145cadeb48ac0b1a3fa4798d1ae.png)
3)重启MinIO
重启后,访问MinIO的monitoring界面,便能正常看到数据了:
![](https://i-blog.csdnimg.cn/blog_migrate/bcd1bdceae285daa7bae3e327089b653.png)
2. MinIO监控配置的踩坑记录
2.1 Prometheus采集数据报错403
Prometheus采集MinIO集群数据后,target页面报错server returned HTTP status 403 Forbidden:
![](https://i-blog.csdnimg.cn/blog_migrate/71e50ec74f296e9cc5c44fd4786b2f55.png)
原因:
是MinIO配置Prometheus访问权限异常,导致Prometheus没有权限访问MinIO集群。
2.2 Dashboard报错函数错误
导入MinIO监控模板13502到Grafana后,无法看到job集群,也无法看到数据,右上角报错 Templating [scrape_jobs] Error updating options: e.replace is not a function
![](https://i-blog.csdnimg.cn/blog_migrate/a2bce0d6b6b3fc8fe8f660e4062329d4.png)
原因:
Grafana版本过低,该错误是在grafana的7.3.4版本出现,后来把grafana升级到8.5.5版本后,Dashboard立即恢复正常。
2.3 Dashbord报错nodata
导入MinIO监控模板13502到Grafana后,能看到job集群,但是所有指标没有数据:
![](https://i-blog.csdnimg.cn/blog_migrate/0df318aeb9b45d3bed4af5da6f70ff62.png)
原因:
遇到该错误时,Prometheus的target界面看到4台MinIO均为在线状态,经查是Prometheus的接口配置问题。
因最开始参考的是MinIO的中文官网,中文官网落后很多,给出的监控指标接口路径是/minio/prometheus/metrics,这个接口的监控指标少很多,而且不适用于新的Dashboard 13502,所以拿不到数据。英文官网给的监控路径是/minio/v2/metrics/cluster,将监控路径改成/minio/v2/metrics/cluster,数据就出来了。
如果配置的监控接口路径是/minio/prometheus/metrics,则可使用ID为12563的Dashboard。
2.4 Prometheus URL is unreachable
开始将Prometheus接入MinIO控制台时,Monitoring界面刷不出来,页面提示Prometheus URL is unreachable:
![](https://i-blog.csdnimg.cn/blog_migrate/c03eb40f91d9bc30c6e22827e251e280.png)
原因:
MinIO无法访问到Prometheus,因我的Prometheus域名未作解析,只有一个内部nginx做的代理,没有配置hosts解析,MinIO集群解析不到环境变量中Prometheus的域名http://promethues-sre.com。
2.5 MinIO控制台拿不到Prometheus数据
MinIO控制台拿不到Prometheus数据:
![](https://i-blog.csdnimg.cn/blog_migrate/7bda5236b397e5acf623a20b98b1cbe6.png)
原因:
因为MinIO启动脚本中环境变量MINIO_PROMETHEUS_JOB_ID的配置问题,MINIO_PROMETHEUS_JOB_ID的值是Prometheus target界面标签中的job名:
![](https://i-blog.csdnimg.cn/blog_migrate/4fb423908891d5c995c6c32767cd21d9.png)