本文介绍如何使用Prometheus监控MicroMeter的Java应用。
前提条件
已创建Java应用。
步骤一:将MicroMeter加入Java应用
这里以目前最常用的Spring Boot 2.x应用为例介绍。
-
将Spring Boot Actuator加入Java应用 -> 在Project的pom.xml中添加Actuator依赖。
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>x.y.z</version> </dependency>说明最新版本可到aliyun仓库查找。
-
配置Acuator,在application.properties中添加相关配置暴露prometheus监测数据端口和范围。
management.server.port=8080 management.endpoints.web.exposure.include=xxx, prometheus -
在Project的pom.xml中添加MicroMeter依赖。
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>x.y.z</version> </dependency>说明最新版本可到aliyun仓库查找。
-
在Project的pom.xml中添加MicroMeter JVM Extras依赖。
<dependency> <groupId>io.github.mweirauch</groupId> <artifactId>micrometer-jvm-extras</artifactId> <version>0.2.2</version> </dependency>说明最新版本可到aliyun仓库查找。
-
配置MicroMeter JVM Extras,增加以下2个Spring Bean定义,以便暴露内存和线程相关指标。
/* With Spring */ @Bean public MeterBinder processMemoryMetrics() { return new ProcessMemoryMetrics(); } @Bean public MeterBinder processThreadMetrics() { return new ProcessThreadMetrics(); } -
将Java应用部署到容器服务中ECS。
根据业务场景,将Java业务应用部署到容器服务或ECS上。部署成功后,访问应用监听地址
http://localhost:8080/actuator/prometheus(其中8080端口是您在application.properties中配置中指定的,根据实际端口值,修改此URL中的端口即可),验证metrics暴露正确。访问成功后,页面将返回类似如下的 Prometheus 格式指标数据:
# HELP jvm_memory_used_bytes The amount of used memory # TYPE jvm_memory_used_bytes gauge jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 2964360.0 jvm_memory_used_bytes{area="heap",id="G1 Old Gen",} 1.285324E7 jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 3.6128128E7 jvm_memory_used_bytes{area="nonheap",id="CodeCache",} 9673088.0 jvm_memory_used_bytes{area="heap",id="G1 Eden Space",} 6.7108864E7 jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 4999168.0 # HELP jvm_threads_live_threads The current number of live threads including both daemon and non-daemon threads # TYPE jvm_threads_live_threads gauge jvm_threads_live_threads 28.0 # HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use # TYPE jvm_memory_committed_bytes gauge jvm_memory_committed_bytes{area="heap",id="G1 Survivor Space",} 4194304.0 jvm_memory_committed_bytes{area="heap",id="G1 Old Gen",} 5.8720256E7 jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 3.6569088E7 jvm_memory_committed_bytes{area="nonheap",id="CodeCache",} 1.0682368E7 jvm_memory_committed_bytes{area="heap",id="G1 Eden Space",} 9.646899E7 jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 5177344.0 # HELP executor_pool_max_threads The maximum allowed number of threads in the pool # TYPE executor_pool_max_threads gauge executor_pool_max_threads{name="applicationTaskExecutor",} 2.147483647E9 ... # TYPE jvm_buffer_count_buffers gauge jvm_buffer_count_buffers{id="mapped - 'non-volatile memory'",} 0.0 jvm_buffer_count_buffers{id="mapped",} 0.0 jvm_buffer_count_buffers{id="direct",} 7.0 # HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool # TYPE jvm_buffer_total_capacity_bytes gauge jvm_buffer_total_capacity_bytes{id="mapped - 'non-volatile memory'",} 0.0 jvm_buffer_total_capacity_bytes{id="mapped",} 0.0 jvm_buffer_total_capacity_bytes{id="direct",} 57344.0 # HELP jvm_threads_peak_threads The peak live thread count since the Java virtual machine started or peak was reset # TYPE jvm_threads_peak_threads gauge jvm_threads_peak_threads 30.0 # HELP jvm_threads_states_threads The current number of threads # TYPE jvm_threads_states_threads gauge jvm_threads_states_threads{state="runnable",} 11.0 jvm_threads_states_threads{state="blocked",} 0.0
步骤二:接入 MicroMeter
-
在左侧导航,选择接入中心,然后在搜索框中输入并单击MicroMeter。
-
在MicroMeter面板的开始接入页签选择所属环境类型完成接入,然后单击确定。
参数
说明
选择所属环境类型
可以接入以下两种服务环境:
-
容器服务环境
-
ECS(VPC)
选择集群
选择目标集群。
Pod 标签
部署 MicroMeter 服务 Pod 的标签(建议使用有特定标识的标签)
服务端口
Java应用服务的端口,默认端口号会自动填充。
Metrics 采集路径
MicroMeter 指标透出路径,默认路径会自动填充。
使用 HTTPS 采集
默认使用 HTTP 协议采集,如果服务支持 HTTPS 协议,且希望通过 HTTPS 协议来采集,则可以打开此开关。
Metric 采集间隔(单位/秒)
可观测监控 Prometheus 版采集指标数据的时间间隔,默认30秒。
-
步骤三:查看 MicroMeter 大盘数据
-
在左侧导航栏,单击接入管理。在接入管理页面的已接入环境页签中,选择目标环境,在目标环境列表中,单击目标环境名称进入容器环境详情页面。
-
在组件管理页签下的组件类型区域,单击MicroMeter,然后单击大盘,即可查看所有的大盘名称。
大盘列表中显示 JVM MicroMeter 大盘,标签为 java、jvm、micrometer。
-
单击目标大盘名称,查看对应的Grafana大盘。
Grafana 大盘页面显示 JVM MicroMeter 监控面板。页面顶部提供 job、Instance 下拉筛选框及 Restart Detection 开关。Quick Facts 区域包含 Uptime 和 Start time 指标,I/O Overview 区域包含 Rate 和 Errors 图表。选择目标实例后即可查看对应的 JVM 监控数据。
步骤四:配置 MicroMeter 监控告警
-
在组件管理页签下的组件类型区域,单击MicroMeter,然后单击告警规则,即可查看默认创建的告警规则。
默认创建的告警规则包括 JVM CPU使用率告警、JVM内存使用率告警、JVM重启次数告警、logback日志错误数告警、MajorGC耗时比例告警,均为 P2 级别,状态为运行中。
-
您还可以根据业务需求新增告警规则,创建Prometheus告警规则的具体操作,请参见创建Prometheus告警规则。