监控实战之Prometheus
author:JevonWei
版权声明:原创作品
一 背景
Prometheus的特点
多维度数据模型。
灵活的查询语言。
不依赖分布式存储,单个服务器节点是自主的。
通过基于HTTP的pull方式采集时序数据。
可以通过中间网关进行时序列数据推送。
通过服务发现或者静态配置来发现目标服务对象。
支持多种多样的图表和界面展示,比如Grafana等。
当前环境中业务都是基于docker部署的,为了完善环境中的监控系统,对比了其他监控系统的优缺点之后,最终决定采用Prometheus作为容器化应用的监控系统,
监控环境
四个区域网络相互独立,sz与sh通过proxy实现网络互通,hk,sz,us各部署一台prometheus server,实现同区域的主机数据采集,sz同时作为grafana server,统一展示四个区域的监控信息。各区域部分主机与该区域的Prometheus Server网络是独立的,需要通过Proxy代理通信。各区域的Prometheus Server与Grafana通过Proxy通信。
整体架构图如下
监控系统架构
Prometheus:数据采集与存储
Grafana:数据展示
Alertmanager:告警
PrometheusAlert:告警方式
node_exporter:采集主机信息
cadvisor:采集容器信息
二 部署Prometheus Server
Prometheus 的数据映射路径:/data/prometheus
日志映射路径:/data/logs
Prometheus 主配置文件:/data/prometheus/prometheus.yml
Prometheus Rules文件:/data/prometheus/rules
Prometheus Targets: /data/prometheus/targets/
Prometheus 主配置文件
由于我们这边网络环境中所有主机不是全部相通的,再次无法使用targets自动发现的规则,故在此使用targets静态文件配置主机信息
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
scrape_timeout: 5s
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- ${prometheus_server_ip}:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "rules/rules*.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
#static_configs:
#- targets: ['localhost:9090']
file_sd_configs:
- files:
- targets/prometheus.yaml
refresh_interval: 1ms
- job_name: 'nodes_server'
file_sd_configs:
- files:
- targets/nodes*.yaml
refresh_interval: 30s
relabel_configs:
- source_labels:
- "__hostname__"
regex: "(.*)"
target_label: "nodename"
action: replace
replacement: "$1"
- job_name: 'docker'
file_sd_configs:
- files:
- targets/docker*.yaml
refresh_interval: 30s
relabel_configs:
- source_labels:
- "__hostname__"
regex: "(.*)"
target_label: "nodename"
action: replace
replacement: "$1"
targets 节点配置文件
# cat targets/nodes.yaml
- targets:
- 1.1.1.1:8888 # support-xxxxx
labels:
cluster: "support"
area: "sz"
job: "docker"
__hostname__: support-xxxxxx
host_ip: 1.1.1.1
rules 告警规则
rules.yaml 告警规则文件
groups:
- name: Node Alert
rules:
- alert: 主机CPU告警
expr: 100 - ((avg by (nodename,instance,area,cluster,host_ip)(irate(node_cpu_seconds_total{mode="idle"}[30m]))) *100) > 70
for: 30m
labels:
name: Host CPU Warning
hostname: "{{ $labels.nodename }}"
level: 2 #告警级别,告警级别定义 0 信息,1 警告,2 一般严重,3 严重,4 灾难
generatorURL: "https://grafana.danran.com/d/_Zg4oiwMz/xiang-gang-zhu-ji-xiang-xi-xin-xi?orgId=1&var-area={{ $labels.area }}&var-hostname={{ $labels.nodename }}&var-cluster={{ $labels.cluster }}"
annotations:
description: "{{ $labels.host_ip }} 主机在30m内CPU使用率持续在70%以上,当前值为 {{ $value }}%" #告警信息
fsurl: "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx-4877-4b14-bda7-xxxxxxx" #支持添加多个飞书机器人告警,用,号分割即可,如果留空或者未填写,则默认发送到配置文件中填写的飞书器人地址
运行Prometheus容器
docker run -p 9090:9090 -d -v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /data/prometheus/targets/:/etc/prometheus/targets/ -v /data/prometheus/data:/prometheus -v ${LOGS_DIR}/prometheus:/data/logs/ -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro -v /data/prometheus/rules:/etc/prometheus/rules --restart=always --name prometheus prom/prometheus:v2.25.0 --web.enable-lifecycle --config.file=/etc/prometheus/prometheus.yml --web.external-url=https://https://prometheus-sz.danran.com/ --storage.tsdb.retention=30d
部署Grafana
https://grafana.com/docs/ #官方安装文档
运行Grafana
grafana 数据存储目录:/data/grafana
docker run -d -p 3000:3000 --name=grafana --restart=always -v /data/grafana/grafana/:/var/lib/grafana:rw -v /data/grafana/grafana.ini:/etc/grafana/grafana.ini:rw -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro grafana/grafana:7.4.3
grafana web界面
登录界面
添加prometheus数据源
import模板
模板下载地址
https://grafana.com/grafana/dashboards
点击目标模板
下载模板
通过模板ID导入
确认模板信息
验证图形信息
饼图插件未安装,需要提前安装
https://grafana.com/grafana/plugins/grafana-piechart-panel
在线安装:
# grafana-cli plugins install grafana-piechart-panel
离线安装:
root@master3:/var/lib/grafana/plugins# pwd
/var/lib/grafana/plugins
root@master3:/var/lib/grafana/plugins# ls
grafana-piechart-panel-v1.5.0-0-g3234d63.zip
root@master3:/var/lib/grafana/plugins# unzip grafana-piechart-panel-v1.5.0-0-g3234d63.zip
root@master3:/var/lib/grafana/plugins# mv grafana-piechart-panel-3234d63/ grafana-piechart-panel
root@master3:/var/lib/grafana/plugins# systemctl restart grafana-server
部署node_exporter和cadvisor
node_exporter部署
docker run -d -p 9100:9100 --name=node-exporter --restart=always -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter:v1.1.2
cadvisor部署
cadvisor由谷歌开源,cadvisor不仅可以搜集一台机器上所有运行的容器信息,还提供基础查询界面和http接口,方便其他组件如Prometheus进行数据抓取,cAdvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况。
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker:/var/lib/docker:ro --volume=/dev/disk:/dev/disk:ro --publish=8888:8080 --detach=true --name=cadvisor --restart=always google/cadvisor:v0.32.0
部署alertmanager
prometheus触发一条告警的过程:
prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等。
分组(group): 将类似性质的警报合并为单个通知。
静默(silences): 是一种简单的特定时间静音的机制,例如:服务器要升级维护可以先设置这个时间段告警静默。
抑制(inhibition): 当警报发出后,停止重复发送由此警报引发的其他警报即合并一个故障引起的多个报警事件,可以消除冗余告警
alertmanager.yml配置文件
# cat alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: ['instance']
group_wait: 30s
group_interval: 1m
repeat_interval: 1h
receiver: 'web.hook.prometheusalert'
routes:
- receiver: 'prometheusalert-feishu'
group_wait: 10s
match:
level: '2'
receivers:
- name: 'web.hook.prometheusalert'
webhook_configs:
- url: "http://${prometheus_server_ip}:8080/prometheusalert"
- name: 'prometheusalert-feishu'
webhook_configs:
- url: "http://${prometheus_server_ip}:8080/prometheusalert?type=fs&tpl=prometheus-fsv2&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx"
inhibit_rules:
- source_match:
level: '3'
target_match:
level: '2'
equal: ['alertname', 'instance']
- source_match:
alertname: '容器CPU告警'
target_match:
alertname: '主机CPU告警'
equal: ['nodename']
- source_match:
alertname: '容器Memory告警'
target_match:
alertname: '主机Memory告警'
equal: ['nodename']
启动alertmanager
alertmanager 数据目录:/data/alert
docker run -d -p 9093:9093 --restart=always -v /data/alert:/etc/alertmanager -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro --name alertmanager prom/alertmanager:v0.21.0
部署prometheusalert
conf/app.conf配置文件
本环境使用飞书作为告警通道,故配置文件只修改了飞书的相关配置
#---------------------↓全局配置-----------------------
appname = PrometheusAlert
#监听端口
httpport = 8080
runmode = dev
#设置代理 proxy = http://123.123.123.123:8080
proxy =
#开启JSON请求
copyrequestbody = true
#告警消息标题
title=PrometheusAlert
#链接到告警平台地址
#GraylogAlerturl=http://graylog.org
#钉钉告警 告警logo图标地址
#logourl=https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png
#钉钉告警 恢复logo图标地址
#logourl=https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png
#短信告警级别(等于3就进行短信告警) 告警级别定义 0 信息,1 警告,2 一般严重,3 严重,4 灾难
messagelevel=2
#电话告警级别(等于4就进行语音告警) 告警级别定义 0 信息,1 警告,2 一般严重,3 严重,4 灾难
phonecalllevel=4
#默认拨打号码(页面测试短信和电话功能需要配置此项)
defaultphone=
#故障恢复是否启用电话通知0为关闭,1为开启
phonecallresolved=0
#自动告警抑制(自动告警抑制是默认同一个告警源的告警信息只发送告警级别最高的第一条告警信息,其他消息默认屏蔽,这么做的目的是为了减少相同告警来源的消息数量,防止告警炸弹,0为关闭,1为开启)
silent=1
#是否前台输出file or console
logtype=file
#日志文件路径
logpath=/data/logs/prometheusalert/prometheusalertcenter.log
#转换Prometheus,graylog告警消息的时区为CST时区(如默认已经是CST时区,请勿开启)
prometheus_cst_time=0
#---------------------↓webhook-----------------------
#是否开启钉钉告警通道,可同时开始多个通道0为关闭,1为开启
open-dingding=0
#默认钉钉机器人地址
ddurl=https://oapi.dingtalk.com/robot/send?access_token=xxxxx
#是否开启 @所有人(0为关闭,1为开启)
dd_isatall=1
#是否开启微信告警通道,可同时开始多个通道0为关闭,1为开启
open-weixin=0
#默认企业微信机器人地址
wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx
#是否开启飞书v1告警通道,可同时开始多个通道0为关闭,1为开启
open-feishu=1
#默认飞书机器人地址
fsurl=
#是否开启飞书v2告警通道,可同时开始多个通道0为关闭,1为开启
open-feishuv2=1
#默认飞书机器人地址
#fsv2url=https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxxx
fsv2url=https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxx-4877-4b14-bda7-xxxxxxxxxx
#---------------------↓腾讯云接口-----------------------
#是否开启腾讯云短信告警通道,可同时开始多个通道0为关闭,1为开启
open-txdx=0
#腾讯云短信接口key
TXY_DX_appkey=xxxxx
#腾讯云短信模版ID 腾讯云短信模版配置可参考 prometheus告警:{1}
TXY_DX_tpl_id=xxxxx
#腾讯云短信sdk app id
TXY_DX_sdkappid=xxxxx
#腾讯云短信签名 根据自己审核通过的签名来填写
TXY_DX_sign=腾讯云
#是否开启腾讯云电话告警通道,可同时开始多个通道0为关闭,1为开启
open-txdh=0
#腾讯云电话接口key
TXY_DH_phonecallappkey=xxxxx
#腾讯云电话模版ID
#TXY_DH_phonecalltpl_id=xxxxx
#腾讯云电话sdk app id
TXY_DH_phonecallsdkappid=xxxxx
#---------------------↓华为云接口-----------------------
#是否开启华为云短信告警通道,可同时开始多个通道0为关闭,1为开启
open-hwdx=0
#华为云短信接口key
HWY_DX_APP_Key=xxxxxxxxxxxxxxxxxxxxxx
#华为云短信接口Secret
HWY_DX_APP_Secret=xxxxxxxxxxxxxxxxxxxxxx
#华为云APP接入地址(端口接口地址)
HWY_DX_APP_Url=https://rtcsms.cn-north-1.myhuaweicloud.com:10743
#华为云短信模板ID
HWY_DX_Templateid=xxxxxxxxxxxxxxxxxxxxxx
#华为云签名名称,必须是已审核通过的,与模板类型一致的签名名称,按照自己的实际签名填写
HWY_DX_Signature=华为云
#华为云签名通道号
HWY_DX_Sender=xxxxxxxxxx
#---------------------↓阿里云接口-----------------------
#是否开启阿里云短信告警通道,可同时开始多个通道0为关闭,1为开启
open-alydx=0
#阿里云短信主账号AccessKey的ID
ALY_DX_AccessKeyId=xxxxxxxxxxxxxxxxxxxxxx
#阿里云短信接口密钥
ALY_DX_AccessSecret=xxxxxxxxxxxxxxxxxxxxxx
#阿里云短信签名名称
ALY_DX_SignName=阿里云
#阿里云短信模板ID
ALY_DX_Template=xxxxxxxxxxxxxxxxxxxxxx
#是否开启阿里云电话告警通道,可同时开始多个通道0为关闭,1为开启
open-alydh=0
#阿里云电话主账号AccessKey的ID
ALY_DH_AccessKeyId=xxxxxxxxxxxxxxxxxxxxxx
#阿里云电话接口密钥
ALY_DH_AccessSecret=xxxxxxxxxxxxxxxxxxxxxx
#阿里云电话被叫显号,必须是已购买的号码
ALY_DX_CalledShowNumber=xxxxxxxxx
#阿里云电话文本转语音(TTS)模板ID
ALY_DH_TtsCode=xxxxxxxx
#---------------------↓容联云接口-----------------------
#是否开启容联云电话告警通道,可同时开始多个通道0为关闭,1为开启
RLY_DH_open-rlydh=0
#容联云基础接口地址
RLY_URL=https://app.cloopen.com:8883/2013-12-26/Accounts/
#容联云后台SID
RLY_ACCOUNT_SID=xxxxxxxxxxx
#容联云api-token
RLY_ACCOUNT_TOKEN=xxxxxxxxxx
#容联云app_id
RLY_APP_ID=xxxxxxxxxxxxx
#---------------------↓邮件配置-----------------------
#是否开启邮件
open-email=0
#邮件发件服务器地址
Email_host=smtp.qq.com
#邮件发件服务器端口
Email_port=465
#邮件帐号
Email_user=xxxxxxx@qq.com
#邮件密码
Email_password=xxxxxx
#邮件标题
Email_title=运维告警
#默认发送邮箱
Default_emails=xxxxx@qq.com,xxxxx@qq.com
#---------------------↓七陌云接口-----------------------
#是否开启七陌短信告警通道,可同时开始多个通道0为关闭,1为开启
open-7moordx=0
#七陌账户ID
7MOOR_ACCOUNT_ID=Nxxx
#七陌账户APISecret
7MOOR_ACCOUNT_APISECRET=xxx
#七陌账户短信模板编号
7MOOR_DX_TEMPLATENUM=n
#注意:七陌短信变量这里只用一个var1,在代码里写死了。
#-----------
#是否开启七陌webcall语音通知告警通道,可同时开始多个通道0为关闭,1为开启
open-7moordh=0
#请在七陌平台添加虚拟服务号、文本节点
#七陌账户webcall的虚拟服务号
7MOOR_WEBCALL_SERVICENO=xxx
# 文本节点里被替换的变量,我配置的是text。如果被替换的变量不是text,请修改此配置
7MOOR_WEBCALL_VOICE_VAR=xxx
飞书告警模版
通过访问prometheusalert的8080端口,对告警渠道的通知模版进行更改
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
{{if $v.labels.container_name }}
**[Prometheus恢复信息]({{$v.generatorURL}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.level}}
开始时间:{{$v.startsAt}}
结束时间:{{$v.endsAt}}
故障主机名: {{$v.labels.nodename}}
故障主机IP:{{$v.labels.host_ip}}
**容器名: {{$v.labels.container_name}}**
集群: {{$v.labels.cluster}}
处理结果: resolved
**{{$v.annotations.description}}**
{{else}}
**[Prometheus恢复信息]({{$v.generatorURL}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.level}}
开始时间:{{$v.startsAt}}
结束时间:{{$v.endsAt}}
故障主机名: {{$v.labels.nodename}}
故障主机IP:{{$v.labels.host_ip}}
集群: {{$v.labels.cluster}}
处理结果: resolved
**{{$v.annotations.description}}**
{{end}}
{{else}}
{{if $v.labels.container_name }}
**[Prometheus告警信息]({{$v.labels.generatorURL}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.level}}
开始时间:{{$v.startsAt}}
故障主机名: {{$v.labels.nodename}}
故障主机IP:{{$v.labels.host_ip}}
容器名: **{{$v.labels.container_name}}**
集群: {{$v.labels.cluster}}
**{{$v.annotations.description}}**
{{else}}
**[Prometheus告警信息]({{$v.labels.generatorURL}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.level}}
开始时间:{{$v.startsAt}}
故障主机名: {{$v.labels.nodename}}
故障主机IP:{{$v.labels.host_ip}}
集群: {{$v.labels.cluster}}
**{{$v.annotations.description}}**
{{end}}
{{end}}
{{ end }}
启动prometheusalert
prometheusalert 数据目录:/data/prometheusAlert
docker run -d -p 8080:8080 --restart=always -v /data/prometheusAlert/conf:/app/conf -v ${LOGS_DIR}/prometheusAlert:/data/logs/prometheusalert -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro --name prometheusalert feiyu563/prometheus-alert:4.2
参考
https://www.cnblogs.com/JevonWei/p/13188038.html
监控实战之Prometheus的更多相关文章
- K8S(13)监控实战-部署prometheus
k8s监控实战-部署prometheus 目录 k8s监控实战-部署prometheus 1 prometheus前言相关 1.1 Prometheus的特点 1.2 基本原理 1.2.1 原理说明 ...
- Prometheus监控实战day1-监控简介
福利 Prometheus监控实战PDF电子书下载 链接:https://pan.baidu.com/s/1QH4Kvha5g70OhYQdp4YsfQ 提取码:oou5 若你喜欢该资料,请购买该资料 ...
- 监控实战Prometheus+Grafana
这期的分享是监控实战,其实不想写这篇的,因为网上相关的文章也挺多的,但是出于光说不练都是假把式,而且也想告诉你:当帅气的普罗米修斯(Prometheus)遇到高颜值的格拉法纳(Grafana)究竟会擦 ...
- prometheus和granfana企业级监控实战v5
文件地址:https://files.cnblogs.com/files/sanduzxcvbnm/prometheus和granfana企业级监控实战v5.pdf
- Docker 监控实战
如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据: 2 / 3 的公司在尝试了 Docker 后最终使用了它 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 ...
- K8S(15)监控实战-ELK收集K8S内应用日志
K8S监控实战-ELK收集K8S内应用日志 目录 K8S监控实战-ELK收集K8S内应用日志 1 收集K8S日志方案 1.1 传统ELk模型缺点: 1.2 K8s容器日志收集模型 2 制作tomcat ...
- K8S(14)监控实战-grafana出图_alert告警
k8s监控实战-grafana出图_alert告警 目录 k8s监控实战-grafana出图_alert告警 1 使用炫酷的grafana出图 1.1 部署grafana 1.1.1 准备镜像 1.1 ...
- 主流前沿的开源监控和报警系统Prometheus+Grafana入门之旅
Prometheus概述 定义 Prometheus 官网地址 https://prometheus.io/ Prometheus 官网文档地址 https://prometheus.io/docs/ ...
- 项目实战——企业级Zabbix监控实战(一)
项目实战--企业级Zabbix监控实战 实验一:Zabbix监控的搭建 1.实验准备 centos系统服务器3台. 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源. 防火墙关闭. 各节点 ...
随机推荐
- 面试常问的Java虚拟机内存模型,看这篇就够了!
一.虚拟机 同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的. 同一个java代码在windows上生成的机器码可能是0101.......,在lin ...
- 番外篇:使用nssm工具将ES、Kibana、Logstash或者其他.bat文件部署为Windows后台服务的方法
使用NSSM工具安装bat文件为Windows服务 nssm是一个可以把bat批处理文件部署为Windows服务的小工具.例如很多.net项目可能还是在Windows服务器上面跑的,但是很多组件只提供 ...
- Kubernetes自动横向伸缩集群节点以及介绍PDB资源
在kubernetes中,有HPA在需要的时候创建更多的pod实例.但万一所有的节点都满了,放不下更多pod了,怎么办?显然这个问题并不局限于Autoscaler创建新pod实例的场景.即便是手动创建 ...
- 流程自动化RPA,Power Automate Desktop系列 - 不讲武德的Windows10内置应用
简介 Power Automate Desktop 扩展Power Automate中的现有机器人流程自动化(RPA)功能,并使您能够自动化所有重复的桌面流程. 使用预生成的拖放操作或记录您自己的桌面 ...
- 4、基本数据类型(init、bool)
4.1.数字: 1.age = 21 weight = 64 fight = 5 2.数字的特点: (1)数字是不可变数据类型(不可以增加,删除,修改元素) (2)数字可以直接访问 (3)数字不可使用 ...
- js 实时监听滚动条状态 判断滚动条位置
var scrollFunc = function (e) { e = e || window.event; var t = document.documentElement.scrollT ...
- 自然语言处理(NLP)——简介
自然语言处理(NLP Natural Language Processing)是一种专业分析人类语言的人工智能.就是在机器语⾔和⼈类语言之间沟通的桥梁,以实现人机交流的目的. 在人工智能出现之前,机器 ...
- 最大子序和:暴力->递归->动规->线段树
题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. LeetCode:53. 最大子序和 题解 显而易见的暴力解法 最容易想到的便是暴力穷 ...
- Springboot整合shardingsphere和druid进行读写分离
最近在使用springboot整合shardingsphere和druid实现mysql数据库读写分离时遇到了一些问题,特此记录一下. 依赖版本 Springboot 2.1.6.RElEASE sh ...
- MinIO关闭公开桶的列表展示(S3 browser)
MinIO通过配置桶策略关闭列表展示,以下为操作教程. 下载:s3browser官网 安装完成S3 browser后,添加账号 修改桶policy,选择桶public右键 删除 s3:ListBuck ...