Prometheus 监控服务 Spring Boot 接入

在使用 Spring Boot 作为开发框架时,需要监控应用的状态,例如 JVM/Spring MVC 等。Prometheus 监控服务基于 Spring Actuator 机制采集 JVM 等数据,结合配套提供的 Grafana Dashboard 可以方便地监控 Spring Boot 应用的状态。

相关产品
Prometheus 监控服务 产品页,含版本规格、价格与购买入口。

一、操作场景

这篇档以在容器服务上部署 Spring Boot 应用为例,介绍如何通过 Prometheus 监控服务监控其状态。

二、前提条件

·创建 腾讯云容器服务-托管版集群:在腾讯云容器服务中创建 Kubernetes 集群。

·使用 容器镜像服务 管理应用镜像。

·应用基于 Spring Boot 框架进行开发。

以下主要以 Maven 为例,说明整个集成。

三、操作步骤

注意:@Component
public class MetricCommonTag {
@Autowired
protected MeterRegistry meterRegistry;
@PostConstruct
public void initialize() {
this.meterRegistry.config()
.commonTags("region","gz"); // key->value
}
}

四、步骤1:修改 pom 依赖

项目中已经引用 spring-boot-starter-web 的基础上,在 pom.xml 文件中添加 actuator/prometheus Maven 依赖项。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId></dependency>

五、步骤2:修改配置

编辑 resources 目录下的 application.yml 文件,修改 actuator 相关的配置来暴露 Prometheus 协议的指标数据。

server:
tomcat:
mbeanregistry:
enabled: true
management:
endpoints:
web:
exposure:
include: prometheus # 打开 Prometheus 的 Web 访问 Path
metrics:
# 在 Prometheus 中添加特别的 Labels
# 必须加上对应的应用名,因为需要以应用的维度来查看对应的监控
tags:
application: spring-mvc-demo
# 下面选项建议打开,以监控 http 请求的 P99/P95 等,具体的时间分布可以根据实际情况设置
distribution:
sla:
http:
server:
requests: 1ms,5ms,10ms,50ms,100ms,200ms,500ms,1s,5s
percentiles-histogram:
http:
server:
requests: true # 开启 http server 的请求监控

六、步骤3:本地验证

在项目当前目录下,运行 mvn spring-boot:run 之后,可以通过 http://localhost:8080/actuator/prometheus 访问到 Prometheus 协议的指标数据,说明相关的依赖配置已经正确。

注意:说明:

注意:例子中配置默认配置,对应的端口和路径以实际项目为准。

七、步骤1:本地配置 Docker 镜像环境

如果本地之前未配置过 Docker 镜像环境,可以参考 Docker 镜像操作快速入门 进行配置,如果已经配置可以直接执行下一步。

八、步骤2:打包及上传镜像

1. 在项目根目录下添加 Dockerfile ,你可以参考如下示例进行添加,在实际项目中需要修改 Dockerfile 。

FROM openjdk:21-jdkWORKDIR /spring-mvc-demoADD target/spring-mvc-demo-*.jar /spring-mvc-demo/spring-mvc-demo.jarCMD ["java","-jar","spring-boot-demo.jar"]

2. 打包镜像,在项目根目录下运行如下命令,在实际项目中需要替换对应的 namespace、ImageName、镜像版本号。

mvn clean packagedocker build . -t ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]docker push ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]

例如:

mvn clean packagedocker build . -t ccr.ccs.tencentyun.com/prom_spring_demo/spring-mvc-demo:latestdocker push ccr.ccs.tencentyun.com/prom_spring_demo/spring-mvc-demo:latest

九、步骤3:应用部署

1. 登录 容器服务控制台。

2. 在左侧菜单栏中选择集群,进入集群列表选择需要部署的容器集群。

3. 选择工作负载 > Deployment,在 Deployment 管理页面,选择对应的命名空间来进行部署服务,这里选择通过控制台的方式创建,同时打开 Service 访问方式,你也可以选择通过命令行的方式创建。

十、步骤4:添加采集任务

1. 登录 Prometheus 监控服务控制台,选择对应 Prometheus 实例进入管理页面。

2. 选择数据采集 > 集成容器服务,进入到容器服务集成管理页面,选择服务部署所在的容器集群(该集群已经与 Prometheus 实例进行了关联)。

3. 在操作列单击数据采集配置,然后单击新建自定义监控,添加 ServiceMonitor 采集配置,具体如下:

十一、步骤5:安装 Dashboard

1. 在集成中心下找到并单击 Spring MVC。

2. 选择 Dashboard,单击 Dashboard 操作下的安装/升级。

十二、步骤6:查看监控

1. 登录 Prometheus 监控服务控制台,选择对应 Prometheus 实例进入管理页面。

2. 打开 Prometheus 实例对应的 Grafana 地址,在 Dashboards/Manage/Application 下查看应用相关的监控大屏。

·Spring MVC 应用:监控 MVC 的状态,例如请求耗时/请求量/成功率/异常分布等。

·Spring MVC 接口:接口级监控,可以对应多个接口,方便定位是哪个接口出问题。

·Tomcat:Tomcat 内部状态的监控大屏,例如线程使用情况等。

·应用 JVM:从应用角度出发,查看该应用下所有实例是否有问题,当发现某个实例有问题时可以下钻到对应的实例监控。

·实例 JVM:单实例 JVM 详细的监控数据。

赞 (0)
上一篇 4天前
下一篇 4天前