一、Prometheus
Prometheus是一个开源的服务监控系统和时序数据库,提供了通用的数据模型和快捷数据采集、存储和查询接口。其核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的目标中拉取数据,当新拉取到的数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。
Prometheus的本质就是一个时序数据库,定时去拉取各个业务系统的指标数据进行存储。
二、Grafana
Grafana是一个开源的监控仪表盘和图形编辑器,广泛用于可视化时间序列数据。它支持与多种数据源(如Elasticsearch、InfluxDB、Prometheus等)集成,使得它能够展示来自这些数据源的数据。
通常情况下Prometheus和搭配Grafana一起使用,在Grafana配置好PromSql,给Prometheus发送查询请求,从而拿到数据进行图标展示。
Prometheus生态中有非常多的Exporter,这些Exporter就是一个为系统、中间件、应用程序监控指标提供给Prometheus拉取的服务。
三、SpringBoot暴露Prometheus应用指标
- pom.xml 引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
actuator 模块是SpringBoot提供的系统监控模块,引入这个模块后运行SpringBoot应用会自动收集应用运行指标。
- application.properties配置文件配置暴露所有端点
management.endpoints.web.exposure.include=*
访问/actuator地址
- 引入Prometheus依赖
actuator 模块提供了项目运行指标信息,但是需要转成Prometheus协议格式的才可以。
pom.xml
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><scope>runtime</scope></dependency>
访问 http://localhost:8080/actuator/prometheus
这里可以看到 Prometheus格式的指标数据为
指标名 {标签名=标签值} 指标值 , 例如
jvm_memory_committed_bytes{area=“heap”,id=“G1 Eden Space”} 3.3554432E7
jvm_memory_committed_bytes{area=“heap”,id=“G1 Old Gen”} 3.3554432E7
jvm_memory_committed_bytes{area=“heap”,id=“G1 Survivor Space”} 4194304.0
jvm_memory_committed_bytes{area=“nonheap”,id=“CodeCache”} 1.0092544E7
jvm_memory_committed_bytes{area=“nonheap”,id=“Compressed Class Space”} 4980736.0
jvm_memory_committed_bytes{area=“nonheap”,id=“Metaspace”} 3.407872E7
将来可以通过PromSql 根据 指标名 标签名等条件进行过滤查询,聚合指标值等。