1、创建应用 集成 micrometer
创建一个最简的 springboot 应用,添加 micrometer 依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
application.yml
## prometheus配置
management:
endpoint:
metrics:
enabled: true
prometheus:
prometheus: true
## 配置为开启 Actuator 服务
endpoints:
web:
exposure:
include: '*'
metrics:
export:
export:
enabled: true
spring:
application:
name: springboot-prometheus
server:
port: 8888
在启动类中添加Bean,用于监控JVM性能指标:
@SpringBootApplication
public class SpringbootPrometheusApplication {
@Value("${spring.application.name}")
private String application;
public static void main(String[] args) {
SpringApplication.run(SpringbootPrometheusApplication.class, args);
}
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer() {
return (registry) -> registry.config().commonTags("application", application);
}
启动服务。
查看监控端点信息:
2. 部署 Prometheus
官网:
https://prometheus.io/
可以下载安装包来安装,但下载速度极其慢,几乎下载不了。
可以使用 docker 部署,因为国内有docker镜像,所以速度很快。
docker 方式启动:
docker run --name prometheus -d -p 9090:9090 prom/prometheus
执行完成后就OK了,可以看一下 Prometheus 的界面。
http://localhost:9090/targets 是监控目标列表页:
3. Prometheus + Springboot应用
监控应用,需要在 Prometheus 配置文件中添加应用的相关信息。
配置文件在容器中的路径:/etc/prometheus。
查看一下配置文件的默认内容:
docker exec -it [容器ID] cat /etc/prometheus/prometheus.yml
红框内是我们要关注的部分,按照这个形式添加我们的应用即可。
需要添加的内容为:
- job_name: 'springboot_prometheus'
scrape_interval: 5s
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['ip:应用端口']
}
metrics_path 指定监控端点的路径。
targets 指定应用的IP端口,这里使用了IP,没有使用localhost,因为 Prometheus 是容器运行的,如果使用 localhost 就会访问容器内部。
配置不是直接在容器内部修改,可以把容器内部的配置文件拷贝出来一份,修改后,重启启动容器,挂载本地修改过的配置文件。
拷贝容器中的配置文件:
docker cp [容器ID]:/etc/prometheus/prometheus.yml .
修改配置文件,添加配置,最终的内容:
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'springboot_app'
scrape_interval: 5s
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['ip:应用端口']
}
注意:由于测试的机器公网会一直变,所以每次都要重新配置
停掉之前的容器,重新启动:
docker run --name prometheus -d \
-p 9090:9090 \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
访问监控列表页 http://localhost:9090/targets 就可以看到我们的应用了:
点击端点链接,可以看到监控数据,例如:
进入查询控制台页面 http://localhost:9090/graph,可以查询一个指标,例如 http_server_requests_seconds_sum,效果:
4. 部署 Grafana
docker方式运行:
docker run -d -p 3000:3000 --name=grafana grafana/grafana
启动后,访问:http://localhost:3000,默认用户名密码 admin/admin。
5. 添加 Prometheus 数据源
6. 展示应用的 JVM 信息
Grafana 中已经有现成的 JVM 仪表盘,我们直接导入使用即可。
这个仪表盘的编号为 4701。
至此,Prometheus + Grafana + Springboot 的整体流程已经跑通了。
但是,这些指标都是底层通用指标,在业务层面一定会有个性需求,下面我们自己定义一些监控指标。