操作场景
在使用 Spring Boot 作为开发框架时,需要监控应用的状态,例如 JVM/Spring MVC 等。 Prometheus 监控服务基于 Spring Actuator 机制采集 JVM 等数据,结合配套提供的 Grafana Dashboard 可以方便地监控 Spring Boot 应用的状态。
本文档以在容器服务上部署 Spring Boot 应用为例,介绍如何通过 Prometheus监控服务监控其状态。
前提条件
创建 腾讯云容器服务—托管版集群:在腾讯云容器服务中创建 Kubernetes 集群。
应用基于 Spring Boot 框架进行开发。
以下主要以 Maven 为例子说明整个集成。
操作步骤
注意
Spring Boot 已提供 actuator 组件来对应用进行监控,简化了开发的使用成本,所以这里直接使用 actuator 为 Spring Boot 应用进行监控埋点,基于 Spring Boot 2.0 及以上的版本,低版本会有配置上的差别需要注意。
若您使用spring boot 1.5 接入,接入时和2.0会有一定区别,需要注意如下几点:
1. 访问
prometheus metrics
的地址和2.0不一样,1.5默认的是/prometheus
,即http://localhost:8080/prometheus
。2. 若报401错误则表示没有权限(Whitelabel Error Page),1.5默认对
management
接口加了安全控制,需要修改 management.security.enabled=false
。3. 若项目中用
bootstrap.yml
来配置参数,在 bootstrap.yml
中修改 management
不起作用,需要在 application.yml
中修改,原因: spring boot 启动加载顺序有关。4.
metric common tag
不能通过 yml
来添加,可以通过代码加一个 bean
的方式实现,如下:@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 镜像环境
步骤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
在集成中心下选择 Spring MVC 进行 Dashboard 一键安装。
步骤6:查看监控
1. 登录 Prometheus 监控服务控制台,选择对应 Prometheus 实例进入管理页面。
2. 选择数据采集 > 集成中心,在集成中心页面找到 Spring MVC 监控,选择 Dashboard 操作 > Dashboard 安装/升级 来安装对应的 Grafana Dashboard。
3. 打开 Prometheus 实例对应的 Grafana 地址,在
Dashboards/Manage/Application
下查看应用相关的监控大屏。Spring MVC 应用:监控 MVC 的状态,例如请求耗时/请求量/成功率/异常分布等。
Spring MVC 接口:接口级监控,可以对应多个接口,方便定位是哪个接口出问题。
Tomcat:Tomcat 内部状态的监控大屏,例如线程使用情况等。
应用 JVM:从应用角度出发,查看该应用下所有实例是否有问题,当发现某个实例有问题时可以下钻到对应的实例监控。
实例 JVM:单实例 JVM 详细的监控数据。