Minio配置Prometheus监控

一、Minio配置

1、使用minio client(mc命令) 配置连接minio server

curl https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc
chmod a+x /usr/local/bin/mc
# mc config host add [alias] [endpoint] [username] [password] 四个参数,依次为命名,服务端点,账号,密码
mc config host add myoss https://minio.test.com crazy crazy123.
# 查看本地配置的minio server
mc config host ls

image-20250331174245445

2、利用mc命令生成Prometheus的minio配置

# mc admin prometheus generate myoss  参数解释,通过这段命令生成对应的prometheus配置
mc admin prometheus generate myoss
# 此段配置,后面要加到Prometheus的配置文件中
scrape_configs:
- job_name: minio-job
  bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiY3Jhenl3ZW5nIiwiZXhwIjo0ODk2MDYyODA2fQ.kDes2yFpCTTPhi8g5rOXhyp52-9PXh_dDrKyDJ_Mms6J_smi232nySkigKueHu6bSvz8sPkmcNSx1Y2bUHqnEQ
  metrics_path: /minio/v2/metrics/cluster
  scheme: https
  static_configs:
  - targets: ['minio.test.com'] # 此处使用了域名,使用了nginx反代了minio的api接口,如没域名,直接填写minio api地址

3、验证minio metric接口是否正常

curl -H "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiY3Jhenl3ZW5nIiwiZXhwIjo0ODk2MDM4Mjk0fQ.bMFmArjjx4wW34qswmMkAg1BDDbvAUMCXR4IGEMr8PRF4tuSYUHCdByyDYawYoC4zD9f4XRKd_tsM5KHWaTTzg" https://minio.test.com/minio/v2/metrics/cluster

image-20250331174932691

二、Prometheus配置

1、配置Prometheus配置文件prometheus.yml

# vim /opt/prometheus/config/prometheus.yml
global:
  scrape_interval: 15s # 默认抓取周期
  external_labels:
    monitor: 'codelab-monitor'
rule_files:
  - "./rules/*.yml"
alerting:
  alertmanagers:
  - static_configs:
      - targets:
        - "alertmanager:9093"
scrape_configs:
  - job_name: minio-job
    bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiY3Jhenl3ZW5nIiwiZXhwIjo0ODk2MDM4Mjk0fQ.bMFmArjjx4wW34qswmMkAg1BDDbvAUMCXR4IGEMr8PRF4tuSYUHCdByyDYawYoC4zD9f4XRKd_tsM5KHWaTTzg
    metrics_path: /minio/v2/metrics/cluster
    scheme: https
    static_configs:
    - targets: ['minio.test.com']

2、Prometheus + Grafana 部署(docker-compose)

# mkdir config prometheus_data prometheus_data &&  chmod 777 config prometheus_data prometheus_data
# 创建映射目录,并授予权限
# vim docker-compose.yaml
version: "3.7"
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: "prometheus"
    restart: always
    ports:
      - "9090:9090"
    volumes:
      - "./config:/etc/prometheus"
      - "./prometheus_data:/prometheus"
      - "/etc/timezone:/etc/timezone"
      - "/etc/localtime:/etc/localtime:ro"
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --web.enable-lifecycle
      - --web.external-url=/prometheus # 配置了Prometheus的子路径,目的为了用同一个域名反代grafana和prometheus
      - --web.enable-admin-api
  alertmanager:
    image: prom/alertmanager:latest
    container_name: altermanager
    restart: always
    ports:
      - "9093:9093"
    volumes:
      - "./config:/etc/alertmanager"
      - "/etc/timezone:/etc/timezone"
      - "/etc/localtime:/etc/localtime:ro"
    command:
      - --config.file=/etc/alertmanager/alertmanager.yml
  grafana:
    image: grafana/grafana
    container_name: "grafana"
    ports:
      - "3010:3000"
    restart: always
    volumes:
      - "./c:/var/lib/grafana"
      - "/etc/timezone:/etc/timezone"
      - "/etc/localtime:/etc/localtime:ro"

# 启动prometheus
docker-compose up -d

3、配置nginx反代Prometheus的接口地址

# 配置grafana面板地址
upstream grafana {
  server 127.0.0.1:3010;
}
# 配置prometheus面板地址
upstream prometheus {
  server 127.0.0.1:9090;
}

server {
        listen 443 ssl;
        server_name status.test.com;  #你的域名

        ssl_certificate       /etc/nginx/cert/test/status/fullchain.pem;  #证书位置
        ssl_certificate_key   /etc/nginx/cert/test/status/privkey.key; #私钥位置

        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;
        ssl_session_tickets off;
        ssl_protocols    TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers off;

        access_log  /var/log/nginx/status-access.log  main;
        error_log  /var/log/nginx/status-error.log;


#PROXY-START/
location / {
    proxy_pass http://grafana;
    client_max_body_size 100m;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $http_host;
  }

location /prometheus { # 此处与prometheus的启动配置有关, "--web.external-url=/prometheus"
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd; 
		# 此处使用了basic_auth加密了prometheus的访问
        # 使用apache2-utils的htpasswd工具生成密码,  htpasswd -c /etc/nginx/.htpasswd crazy
        proxy_pass http://prometheus;
    }
}

三、minio配置Prometheus接口

1、修改minio的启动环境配置

version: '3.8'

services:
  minio:
    image: quay.io/minio/minio
    container_name: minio
    restart: always
    ports:
      - "127.0.0.1:9000:9000"
      - "127.0.0.1:9001:9001"
    environment:
      MINIO_ROOT_USER: "crazy"
      MINIO_ROOT_PASSWORD: "crazy123."
      MINIO_BROWSER_REDIRECT_URL: "https://minio.test.com/minio/ui"
      #MINIO_PROMETHEUS_AUTH_TYPE: "public"
      MINIO_PROMETHEUS_URL: "https://crazy:[email protected]/prometheus" # 新增prometheus配置
      MINIO_PROMETHEUS_JOB_ID: "minio-job"  # 新增prometheus配置的 Job ID
      #MINIO_PROMETHEUS_AUTH_TOKEN:
    volumes:
      - ./minio-data:/data
    command: server /data --console-address ":9001"
# 重新启动minio
docker-compose down
docker-compose up -d

2、minio console界面验证

image-20250331175011079

image-20250331175021281

image-20250331175028808