Java web应用性能分析之【java进程问题分析概叙】-CSDN博客
Java web应用性能分析之【java进程问题分析工具】-CSDN博客
Java web应用性能分析之【jvisualvm远程连接云服务器】-CSDN博客
Java web应用性能分析之【java进程问题分析定位】-CSDN博客
Java web应用性能分析之【系统监控工具prometheus】-CSDN博客
由于篇幅限制,前面只是整理了prometheus的工作原理,而Java服务级监控用于对每个应用占用的CPU、内存、线程池的线程数量、restful调用数量和响应时间、JVM状态、GC信息等进行监控,并可将指标信息同步至Prometheus中集中展示和报警。
springboot,prometheus,Grafana三者关系如下:
1.监控信息:springboot 添加actuator,micrometer-registry-prometheus依赖,提供当前springboot进程的运行数据信息,以micrometer格式展示出来,http://localhost:8080/actuator/prometheus。还可以在在Spring Boot自定义业务指标,并对关键指标进行监控和告警。
2.提取监控信息+简陋的展示:prometheus中metrics_path,static_configs添加http://localhost:8080/actuator/prometheus的监控数据源配置,prometheus就会按照一定的时间间隔scrape_interval,scrape_timeout拉取对应springboot进程的运行数据信息,(热更新prometheus配置 curl -X POST http://localhost:9090/-/reload
),此时就可以在prometheus的简陋界面查看到springboot的监控信息。
3.展示监控信息:在Grafana导入,关联Prometheus数据源,即可在Grafana大屏上看到已收集到相关数据,包括系统启动时间、运行时间、tomcat 连接池信息、JVM相关信息等。
1.下载安装prometheus
下载地址:Download | Prometheus
版本选择LTS版:2.45.5 https://github.com/prometheus/prometheus/releases/download/v2.45.5/prometheus-2.45.5.linux-amd64.tar.gz
业务是go开发的,所以解压即可用
启动命令: ./prometheus --config.file=prometheus.yml
可以配置到操作系统中,自动启动,这里就不做说明。
访问9090端口上的prometheus
2.springboot添加actuator,micrometer-registry-prometheus依赖
注意事项 不同版本的springboot有对应不同版本的micrometer-registry-prometheus
我这里用的是Spring-Boot-2.2-Release,对应的版本是1.3
Spring Boot 2.2 Release Notes · spring-projects/spring-boot Wiki · GitHub
在springboot中导入的依赖如下
<!--prometheus监控 -->
<!-- Spring Boot Actuator for Prometheus -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-actuator</artifactId>-->
<!-- </dependency>-->
<!-- Spring Boot Prometheus Exporter https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus/1.3.20 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_servlet</artifactId>
<version>0.6.0</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>0.6.0</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_common</artifactId>
<version>0.6.0</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_hotspot</artifactId>
<version>0.6.0</version>
</dependency>
监控配置
package com.zxx.study.web.config;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
* 监控配置
* @author zhouxx
* @Description:
* @date 2024/6/5 1:43
*/
@Configuration
public class MicrometerConfig {
// @Value("${spring.application.name}")
// private String applicationName;
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer( @Value("${spring.application.name}") String applicationName) {
return (registry) -> registry.config().commonTags("application", applicationName);
}
}
配置文件
spring:
application:
name: mydemo
server:
port: 6001
address: 0.0.0.0
#默认立即关闭、graceful优雅关闭(待正在执行的用户完成操作后关闭)
shutdown: graceful
upload:
file-path: C:\\upload\\image
#端口暴漏 management.endpoints.web.exposure.include=prometheus
management:
metrics:
export:
prometheus:
enabled: true
#actuator端口 如果不配置做默认使用上面8080端口
server:
port: 10011
# address: 127.0.0.1
endpoints:
enabled-by-default: true
web:
exposure:
#默认值访问health,info端点 用*可以包含全部端点
include: '*'
#修改访问路径 2.0之前默认是/; 2.0默认是/actuator可以通过这个属性值修改
base-path: /actuator
# cors:
# allowed-origins: http://localhost:8080
# allowed-methods: GET,POST
endpoint:
beans:
enabled: true
shutdown:
enabled: true #打开shutdown端点
health:
show-details: always #获得健康检查中所有指标的详细信息
# 日志记录
logfile:
external-file: ./logs/mydemo/mydemomor.log
prometheus:
enabled: true
# 自定义应用信息,http://localhost:8080/actuator/info
info:
app:
name: mydemo
description: study demo
version: 1.0.0
# # 数据信息从maven获取
#info.build.artifact=@project.artifactId@
#info.build.name=@project.name@
#info.build.description=@project.description@
#info.build.version=@project.version@
logging:
config: classpath:logback-spring.xml
pattern:
console: '%clr(%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n)'
file: '%d{yyyy-MM-dd HH:mm:ss.SSS} >>> [%thread] >>> %-5level >>> %logger{50} >>> %msg%n'
## level:
## # trace 打印sql
## com.zxx.study.web.mapper: trace
集成页面http://39.99.211.248:10011/actuator/prometheus
至此springboot中嵌入的prometheus已经完成,接下来只需要在prometheus server中添加这个监控数据拉取配置即可。
添加配置如下:
效果 即可在prometheus server的页面上看到“mydemo”的监控
简陋的监控页面“jvm_memory_used_bytes”
备注:这里看到的时分秒不准确,在后面的grafana中显示正常
3.Grafana导入Prometheus数据源,展示监控信息
下载地址:Grafana | 查询、可视化、警报观测平台
下载和安装
在这里,我下载的是windows版,因为服务器上资源不足,就安装在笔记本上做演示。
查找 dashboards的id,按照提示查找即可,如下
Grafana dashboards | Grafana Labs
JVM (Micrometer) | Grafana Labs
添加Prometheus成功后,效果如下,可以详细查看到“jvm”监控 4701
毕竟是专业的监控工具,比jvm自带的要全很多,但是这个也有个不足,Prometheus中配置的是每5秒拉取一次监控数据,有一定的延后性。