一、应用侧配置
1.1、引入依赖
在应用的在pom.xml文件中需要引入以下依赖(标准版项目中已默认引入依赖):
<!-- 实现对 Spring MVC 的自动化配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 实现对 Actuator 的自动化配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Micrometer 对 Prometheus 的支持 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<!-- 监控相关 -->
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-monitor</artifactId>
</dependency>
1.2配置文件修改
在引入完依赖之后,需要在配置文件中新增一下配置:
Actuator 监控端点的配置项:
management:
endpoints:
web:
base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
exposure:
include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
metrics:
tags: # 通用标签
application: ${spring.application.name}
export:
prometheus:
enabled: true
jmx:
enabled: true
- 配置项 management.endpoints.web.exposure.include = *,设置 Actuator 暴露所有端点。这样,prometheus端点也能被暴露出来。
- 配置项management.metrics.tags,设置 Metrics 通用标签。这里,我们配置了一个通过用标签键为application,值${spring.application.name}。我们来试着想下,应用 A 和应用 B 都有相同的 Metrics 名,那么如果我们需要去区分它们,则需要通过给 Metrics 打上不同的标签来区分,而一般情况下,我们会选择application作为标签。如果胖友有使用过 Prometheus + Grafana 来做监控报表,会发现也是推荐这么实践的。
1.3 配置校验
在完成 上述两个小节的配置以后,接下里可以启动SpringBoot 应用验证一下配置是否完成。
应用启动完成以后,在浏览器中输入:http://${ip}:${port}/actuator/prometheus ,效果如下图。
- 每个 Metrics 指标的格式,
[指标名][指标标签 JSON 串] [指标值]
。
由此,应用层面的监控指标已经配置完成。
###二、Prometheus 安装配置
####2.1 镜像下载
选择合适的镜像,docker镜像可以自己制作也可以从 镜像仓库下载 (https://hub.docker.com/ ) ,本文选择从仓库中下载 bitnami/prometheus 镜像。也可以是选择二进制文件安装,但过程相对复杂,本文只介绍docker安装过程。
1、先使用 docker pull bitnami/prometheus:latest 下载镜像
2、制作 docker-compose.yaml 配置文件,如下:
version: "2"
services:
Prometheus:
container_name: prometheus-server
image: bitnami/prometheus:latest
volumes:
- ./prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml
ports:
- "9090:9090"
restart: always
4、prometheus.yml 配置文件修改
# my global config
global:
# Set the scrape interval to every 15 seconds. Default is every 1 minute.
scrape_interval: 15s
# Evaluate rules every 15 seconds. The default is every 1 minute.
evaluation_interval: 15s
# 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: "wecom-server"
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ["40.XXXX.XXXX.21:20004"]
targets 为应用服务的 ip跟端口。
5、启动docker,并验证prometheus
在浏览器中输入 http://XXXX.XXXX.XXXX.XXXXX:19090/ ,将出现 点击targets 将会出现 下图
自此prometheus 配置完成。