springboot2.5后,Hystrix熔断器被官方弃用,同时用于可视化监控的Hystrix Dashboard仪表盘也被弃用,高版本springboot使用Resilience4j + Prometheus + Grafana替代Hystrix Dashboard仪表盘,实现服务熔断的可视化监控
一、可视化监控介绍
为什么要使用Prometheus + Grafana可视化监控
Prometheus + Grafana依靠其实时性、灵活性、可扩展性、强大的可视化能力,成为云原生和微服务框架下的主流选择:
①Prometheus负责采集与告警触发,Grafana提供直观展示,Alertmanager处理告警分发,形成“采集>存储>分析>可视化>告警”的全链路监控;
②Prometheus支持Kubernetes服务发现,自动追踪Pod变化;
③通过可视化仪表盘快速定位资源瓶颈,结合PromQL实现根因分析;Prometheus优势
①为云原生设计:
由springcloud开发,天然适配Kubernetes、Docker等容器化环境;
②轻量级易部署:
单个二进制文件运行,无外部依赖,支持Docker、Kubernetes等多种部署方式;
③丰富的Exporter生态:
支持Node、MySQL、Redis、Kafka等主流组件的指标采集;
④强大查询语言PromQL:
可对监控数据进行复杂查询、聚合、预测;
⑤多维数据模型与时序存储:
每条指标由名称 + 标签(Labels)唯一标识,支持灵活聚合与过滤,内置高效时序数据库(TSDB);
⑥Pull模型采集数据:
主动从目标Exporter拉取指标,降低被监控端耦合;Grafana优势
①跨平台、易操作:
支持 Web 访问,支持 RBAC 权限管理,适合团队协作;
②海量预置仪表盘:
通过Grafana Dashboard官网提供了不同场景的成熟模板;
③告警功能:
可基于面板设置告警规则,并通过邮件、钉钉等渠道通知;
④多数据源支持:
除Prometheus外,还兼容InfluxDB、Elasticsearch、MySQL、CloudWatch;
⑤丰富的可视化能力:
提供折线图、热力图、仪表盘等丰富图表类型,支持自定义面板与模板变量;Prometheus + Grafana应用场景
①服务器监控:
通过Node Exporter + Grafana监控 CPU、内存、磁盘、网络等指标变化;
②数据库监控:
结合mysqld_exporter或redis_exporter实现MySQL/Redis性能指标可视化;
③应用性能监控:
Java应用集成Prometheus Client Library,暴露自定义业务指标;
④Kubernetes集群监控:
通过kube-state-metrics + cAdvisor + Grafana实现Pod/Node资源全景视图;Resilience4j + Prometheus + Grafana监控架构
二、Prometheus安装
Prometheus下载
说明:选择所需要的环境和对应版本的安装包进行下载Windows环境安装
Windows环境解压压缩包后即可直接运行,Prometheus默认访问端口9090,本地启动后访问http://localhost:9090,即可打开Prometheus提供的建议UI页面Linux环境安装
①Linux在线环境执行wget https://github.com/prometheus/prometheus/releases/download/v3.11.2/prometheus-3.11.2.linux-amd64.tar.gz命令,将指定版本的Prometheus下载到想要存放的目录下(如果需要下载其他版本,替换命令中的版本号即可)
②Linux离线环境下,先访问Prometheus官网,下载Linux环境的Prometheus压缩包,再将下载的Prometheus压缩包上传至Linux服务器的指定存放目录下
③执行tar -xvf prometheus-3.11.2.linux-amd64.tar.gz对prometheus压缩包解压
④在prometheus文件目录下执行nohup ./prometheus --config.file="prometheus.yml" &后台启动prometheus服务,浏览器访问http://192.168.201.129:9090(对应服务器ip)验证服务是否启动
说明:也可以创建Systemd服务文件启动prometheus服务
-执行vi /etc/systemd/system/prometheus.service命令,在系统文件夹下创建prometheus.service文件,文件内容如下:
-其中[Service]模块的User和ExecStart在配置时需要特别注意,User需要配置具有权限的用户,ExecStart需要配置Prometheus安装相应的路径;
-执行systemctl daemon-reload重新加载单元模块,再执行systemctl start prometheus启动prometheus服务,最后执行systemctl status prometheus查看prometheus服务启动状态;
-浏览器验证http://192.168.201.129:9090UI界面是否可以打开;prometheus.yml文件配置
prometheus.yml是Prometheus的核心配置文件,定义了全局采集规则、告警规则文件位置以及需要监控的采集目标。下面给出一个完整的配置示例,并逐项说明每个配置项的作用:
# ========== 全局配置 ==========global:# 默认抓取间隔:每15秒从目标端点拉取一次指标scrape_interval:15s# 默认告警评估间隔:每15秒评估一次告警规则evaluation_interval:15s# 默认抓取超时时间:超过10秒未响应则放弃本次抓取scrape_timeout:10s# ========== 告警规则文件 ==========# 指定告警规则文件路径,支持通配符匹配多个规则文件rule_files:# - "first_rules.yml" # 示例:自定义告警规则文件# - "second_rules.yml" # 示例:第二个告警规则文件# ========== 抓取配置 ==========# 定义Prometheus需要采集指标的目标端点列表scrape_configs:# 任务名称:Prometheus自身监控-job_name:"prometheus"# 静态配置的采集目标static_configs:-targets:["localhost:9090"]# Prometheus自身暴露的指标端点# 任务名称:Spring Boot应用(Resilience4j指标采集)-job_name:"spring-boot-app"# 抓取间隔:覆盖全局配置,每10秒采集一次scrape_interval:10s# 指标路径:Spring Boot Actuator暴露的Prometheus端点metrics_path:"/actuator/prometheus"# 静态配置的采集目标:指向部署了Resilience4j的Spring Boot服务static_configs:-targets:["192.168.201.129:8080"]# 替换为实际的应用IP和端口# 附加标签:便于在Grafana中区分不同环境或服务labels:application:"order-service"# 应用名称environment:"prod"# 部署环境说明:
①global配置块中的scrape_interval、evaluation_interval、scrape_timeout为全局默认值,若某个job未单独指定,则沿用全局配置;
②scrape_configs中的每个job_name代表一个采集任务,static_configs.targets指定具体的采集地址,metrics_path指定指标暴露的HTTP路径;
③采集Resilience4j指标时,metrics_path必须配置为/actuator/prometheus,且Spring Boot应用需引入micrometer-registry-prometheus依赖并暴露actuator端点;
④labels可以为采集到的指标附加自定义标签,便于在Grafana中按应用名、环境等维度进行过滤和聚合;
⑤配置完成后,需重启Prometheus服务使配置生效,可在Prometheus的Targets页面(http://ip:9090/targets)查看采集目标是否处于UP状态。
三、Grafana安装
- Grafana下载
说明:选择所需要的环境和对应版本的安装包进行下载 - Windows环境安装
①自定义选择安装位置
②下一步至最后一步安装即可
③找到Grafana安装目录下的grafana-server.exe启动程序,双击启动Grafana服务
④浏览器访问Grafana服务平台(http://localhost:3000)
说明:默认访问地址为http://localhost:3000,默认账号密码均为admin
⑤服务停止:win+R并输入services.msc打开服务窗口查看服务列表,找到Grafana服务并停止
说明:如果Grafana服务无法正常结束进程,可通过服务窗口启动或停止服务 - Linux环境安装
①Linux处于离线环境,可以先下载Grafana官网提供的tar.gz压缩包,然后再上传到Linux服务器上
②Linux在线环境下,先cd到需要下载的目录下,通过执行wget https://dl.grafana.com/grafana-enterprise/release/12.4.2/grafana-enterprise_12.4.2_23531306697_linux_amd64.tar.gz命令,进行在线下载
③下载完成后,执行tar -zxvf grafana-enterprise_12.4.2_23531306697_linux_amd64.tar.gz命令解压
④执行cd命令进入grafana下的bin目录,执行nohup ./grafana-server log > grafana-server.log 2>&1 &命令后台启动grafana服务
⑤浏览器访问Grafana服务平台(http://ip:3000)
四、Grafana配置Prometheus数据源
Grafana安装并启动成功后,需要先将Prometheus添加为数据源,才能在后续创建仪表盘时读取到Prometheus采集的指标数据。下面详细介绍配置步骤:
登录Grafana
浏览器访问http://ip:3000(ip为Grafana所在服务器地址),使用默认账号密码admin/admin登录,首次登录会提示修改密码,按提示设置新密码即可进入Grafana首页;进入数据源管理页面
左侧菜单栏中选择Connections功能模块,在下拉菜单中选择Data sources,进入数据源管理页面;添加Prometheus数据源
点击页面右上角的Add data source按钮,在数据源类型列表中找到并点击Prometheus,进入Prometheus数据源配置页面;在Connection配置区域,填写Prometheus服务的访问地址,格式为http://ip:9090,其中ip为部署Prometheus的服务器地址,9090为Prometheus默认端口;
说明:
①若Grafana与Prometheus部署在同一台服务器,可填写http://localhost:9090;
②若Grafana与Prometheus部署在不同服务器,需填写Prometheus所在服务器的实际IP,并确保9090端口在防火墙中放行;
③Access访问模式一般保持默认的Server即可,由Grafana服务端去请求Prometheus;保存并测试连接
页面滚动到最底部,点击Save & test按钮,Grafana会立即向配置的Prometheus地址发起连接测试;
若配置正确,页面会弹出绿色的Successfully queried the Prometheus API提示,表示数据源连接成功,此时即可在创建仪表盘时选择该数据源;
说明:
①若提示Error,请检查Prometheus服务是否已启动、URL地址是否填写正确、网络及防火墙是否放行9090端口;
②连接成功后,可在Data sources列表中看到该数据源状态为Healthy,后续创建仪表盘时即可直接选用;
五、Resilience4j接入Prometheus
要让Prometheus成功采集到Resilience4j的熔断、限流等指标,需要先在Spring Boot应用中引入相关依赖、暴露Actuator端点,并确保Resilience4j的指标注册到Micrometer。下面详细介绍接入步骤:
- pom.xml添加依赖
在Spring Boot项目的pom.xml中,添加以下三个核心依赖:
<!-- Spring Boot Actuator:提供健康检查、指标暴露等生产级监控端点 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Micrometer Prometheus注册表:将应用指标以Prometheus格式暴露 --><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId></dependency><!-- Resilience4j Micrometer:将Resilience4j的熔断、限流等指标注册到Micrometer --><dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-micrometer</artifactId></dependency>说明:
①spring-boot-starter-actuator负责暴露/actuator下的各类监控端点;
②micrometer-registry-prometheus会把Micrometer收集到的指标转换为Prometheus格式,并通过/actuator/prometheus端点输出;
③resilience4j-micrometer负责把Resilience4j的CircuitBreaker、RateLimiter、Bulkhead等组件的指标注册到Micrometer,三者缺一不可;
④若使用Spring Cloud,resilience4j-spring-boot3等依赖已传递引入resilience4j-micrometer,可无需重复添加,但显式声明更稳妥。
- application.yml配置暴露Actuator端点
在application.yml中配置Actuator,仅暴露prometheus端点,并开启Resilience4j的指标注册:
# ========== Actuator端点配置 ==========management:endpoints:web:exposure:# 仅暴露prometheus端点,避免不必要的端点对外暴露include:prometheus# 开启Resilience4j指标注册到Micrometermetrics:tags:application:${spring.application.name:unknown}# 为所有指标附加应用名标签说明:
①management.endpoints.web.exposure.include指定通过HTTP暴露的端点,这里配置为prometheus,访问/actuator/prometheus即可获取指标;
②management.metrics.tags.application为所有指标附加application标签,便于在Grafana中按应用维度过滤;
③Resilience4j的指标默认会随Micrometer自动注册,无需额外配置即可在/actuator/prometheus中看到resilience4j_circuitbreaker_*等指标;
④若需在Grafana中按实例区分,可同时配置management.metrics.tags.instance等自定义标签。
- 验证指标端点
完成上述配置后,启动Spring Boot应用,浏览器访问http://ip:port/actuator/prometheus(ip为应用所在服务器地址,port为应用端口),即可看到Prometheus格式的指标输出;
在返回的指标中,重点查找resilience4j相关的指标,例如:
说明:
①resilience4j_circuitbreaker_state表示熔断器当前状态(closed关闭、open打开、half_open半开);
②resilience4j_circuitbreaker_calls_total统计成功与失败的调用次数,kind标签区分successful与failed;
③若页面返回404,请检查Actuator端点是否已暴露、依赖是否引入完整;
④若页面返回401或403,需检查是否配置了Spring Security,并放行/actuator/prometheus端点;
⑤确认指标正常返回后,回到Prometheus的Targets页面(http://ip:9090/targets),即可看到spring-boot-app任务处于UP状态,随后便可在Grafana中创建仪表盘展示Resilience4j指标。 - Grafana中新建仪表盘,查询
spring-boot-app节点的指标数据