ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Resilience4j + Prometheus + Grafana实现熔断服务可视化监控

Resilience4j + Prometheus + Grafana实现熔断服务可视化监控 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.fileprometheus.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⑤服务停止winR并输入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 21 命令后台启动grafana服务⑤浏览器访问Grafana服务平台http://ip:3000四、Grafana配置Prometheus数据源Grafana安装并启动成功后需要先将Prometheus添加为数据源才能在后续创建仪表盘时读取到Prometheus采集的指标数据。下面详细介绍配置步骤登录Grafana浏览器访问http://ip:3000ip为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提供健康检查、指标暴露等生产级监控端点 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!-- Micrometer Prometheus注册表将应用指标以Prometheus格式暴露 --dependencygroupIdio.micrometer/groupIdartifactIdmicrometer-registry-prometheus/artifactId/dependency!-- Resilience4j Micrometer将Resilience4j的熔断、限流等指标注册到Micrometer --dependencygroupIdio.github.resilience4j/groupIdartifactIdresilience4j-micrometer/artifactId/dependency说明①spring-boot-starter-actuator负责暴露/actuator下的各类监控端点②micrometer-registry-prometheus会把Micrometer收集到的指标转换为Prometheus格式并通过/actuator/prometheus端点输出③resilience4j-micrometer负责把Resilience4j的CircuitBreaker、RateLimiter、Bulkhead等组件的指标注册到Micrometer三者缺一不可④若使用Spring Cloudresilience4j-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/prometheusip为应用所在服务器地址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节点的指标数据
返回列表