Prometheus基本使用
背景
很多云服务都在使用Prometheus 监控应用指标, 恰当前springboot应用有监控需求
组成部分
被监控目标(K8s Pod/Service/节点/数据库)
↓(Exporter 采集/自身暴露 metrics)
Prometheus Server(Pull 采集指标 → 时序存储 → 规则评估)
↓(告警触发时推送)
AlertManager(处理告警 → 发送通知到钉钉/微信/邮件)
↓(数据查询)
Grafana(可视化监控大盘 → 支持告警展示)
docker 单机安装
- 自定义挂载目录
mkdir -p ./prometheus/{prometheus,node-exporter,grafana,data/prometheus,data/grafana}
- prometheus/prometheus.yml 配置文件
# global 全局配置
global:
scrape_interval: 15s # 全局采集间隔(15秒拉取一次指标)
evaluation_interval: 15s # 告警规则评估间隔
scrape_timeout: 10s # 采集超时时间
# 告警规则文件(本次暂不配置,留空即可)
rule_files:
# - "alert_rules.yml"
# 采集配置(定义需要监控的目标)
scrape_configs:
# 1. 监控 Prometheus 自身
- job_name: "prometheus"
static_configs:
- targets: ["prometheus:9090"] # 容器内服务名+端口(Docker Compose 内网可解析)
# 2. 监控 Node Exporter(服务器系统指标)
- job_name: "node-exporter"
static_configs:
- targets: ["node-exporter:9100"] # Node Exporter 容器地址
# 告警管理器配置(本次暂不部署 AlertManager,留空)
alerting:
alertmanagers:
- static_configs:
- targets:
# - "alertmanager:9093"
docker-compose.yml
docker-compose up -d
自定义网络
- 自定义docker-网络 ,如有docker-网络冲突时,见下 引用其他已有docker-net
version: '3.8' # 兼容大部分 Docker 版本
services:
# 1. Prometheus 核心服务
prometheus:
image: prom/prometheus:v2.52.0 # 固定版本,避免自动更新出问题
container_name: prometheus
restart: always # 开机自启,容器异常自动重启
ports:
- "9090:9090" # 宿主机端口:容器端口(访问 Prometheus UI 用)
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # 挂载配置文件
- ./data/prometheus:/prometheus # 挂载数据目录(持久化指标数据)
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间
command:
- '--config.file=/etc/prometheus/prometheus.yml' # 指定配置文件路径
- '--storage.tsdb.path=/prometheus' # 指定数据存储路径
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle' # 支持通过API热加载配置(无需重启容器)
networks:
- prom-net # 加入自定义网络,服务间内网通信
# 2. Node Exporter 系统指标采集
node-exporter:
image: prom/node-exporter:v1.8.2
container_name: node-exporter
restart: always
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro # 只读挂载,采集系统进程信息
- /sys:/host/sys:ro # 采集系统内核信息
- /:/rootfs:ro # 采集根目录信息
- /etc/localtime:/etc/localtime:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
networks:
- prom-net
privileged: true # 提升权限,确保能采集所有系统指标
# 3. Grafana 可视化工具
grafana:
image: grafana/grafana:10.2.2
container_name: grafana
restart: always
ports:
- "3000:3000" # 访问 Grafana UI 用(默认端口3000)
volumes:
- ./data/grafana:/var/lib/grafana # 持久化 Grafana 配置/仪表盘/用户数据
- /etc/localtime:/etc/localtime:ro
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123 # 配置 Grafana 初始管理员密码(可自定义)
- GF_USERS_ALLOW_SIGN_UP=false # 禁止注册新用户
- GF_SERVER_ROOT_URL=http://localhost:3000 # 访问根地址
depends_on:
- prometheus # 依赖 Prometheus,确保 Prometheus 先启动
networks:
- prom-net
# 自定义桥接网络(所有服务在同一网络,通过服务名互相访问)
networks:
prom-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16 # 自定义网段,避免与宿主机冲突
# 快速查看当前服务器下所有docker-net 对应的网络情信息如 网段
docker network inspect $(docker network ls -q) | grep -E 'Name|Subnet|Gateway|Driver'
引用其他网络
version: '3.8' # 兼容大部分 Docker 版本
services:
# 1. Prometheus 核心服务
prometheus:
image: prom/prometheus:v2.52.0 # 固定版本,避免自动更新出问题
container_name: prometheus
restart: always # 开机自启,容器异常自动重启
ports:
- "9090:9090" # 宿主机端口:容器端口(访问 Prometheus UI 用)
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # 挂载配置文件
- ./data/prometheus:/prometheus # 挂载数据目录(持久化指标数据)
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间
command:
- '--config.file=/etc/prometheus/prometheus.yml' # 指定配置文件路径
- '--storage.tsdb.path=/prometheus' # 指定数据存储路径
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle' # 支持通过API热加载配置(无需重启容器)
networks:
- dev_net # 加入自定义网络,服务间内网通信
# 2. Node Exporter 系统指标采集
node-exporter:
image: prom/node-exporter:v1.8.2
container_name: node-exporter
restart: always
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro # 只读挂载,采集系统进程信息
- /sys:/host/sys:ro # 采集系统内核信息
- /:/rootfs:ro # 采集根目录信息
- /etc/localtime:/etc/localtime:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
networks:
- dev_net
privileged: true # 提升权限,确保能采集所有系统指标
# 3. Grafana 可视化工具
grafana:
image: grafana/grafana:10.2.2
container_name: grafana
restart: always
ports:
- "3000:3000" # 访问 Grafana UI 用(默认端口3000)
volumes:
- ./data/grafana:/var/lib/grafana # 持久化 Grafana 配置/仪表盘/用户数据
- /etc/localtime:/etc/localtime:ro
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123 # 配置 Grafana 初始管理员密码(可自定义)
- GF_USERS_ALLOW_SIGN_UP=false # 禁止注册新用户
- GF_SERVER_ROOT_URL=http://localhost:3000 # 访问根地址
depends_on:
- prometheus # 依赖 Prometheus,确保 Prometheus 先启动
networks:
- dev_net
# 自定义桥接网络(所有服务在同一网络,通过服务名互相访问) ### 引用其他的网络
networks:
dev_net:
external: true
查看Prometheus服务
访问地址:http://<宿主机IP>:9090(如本地访问:http://localhost:9090)
点击顶部 Status → Targets,查看采集目标状态:prometheus 和 node-exporter 的 State 均为 UP(表示采集正常)。
查看Grafana服务
1. 登录 Grafana
访问地址:
http://<宿主机IP>:3000,首次登录使用默认账号:
- 用户名:
admin- 密码:
admin123(已在 docker-compose.yml 中自定义,若修改过则用自己的密码)
2. 添加 Prometheus 数据源(Grafana 关联监控数据)
- 登录后,点击左侧齿轮图标(Configuration) → Data sources → Add data source。
- 搜索并选择 Prometheus。
- 配置 Prometheus 地址:
http://prometheus:9090(Docker Compose 内网服务名,无需填宿主机 IP)。 此处需要访问宿主机时,见上图- 其余配置保持默认,点击底部 Save & test,提示
Data source is working表示配置成功。
3. 导入官方 Node Exporter 仪表盘(一键生成系统监控大盘)
Grafana 有丰富的官方 / 社区仪表盘,本次导入最常用的 Node Exporter 系统监控大盘(ID: 1860) ,包含 CPU、内存、磁盘、网络、负载等全维度监控:
- 点击左侧 + 号(Create) → Import。
- 在 Import via grafana.com 输入仪表盘 ID:
1860,点击 Load。- 选择数据源:下拉框选择刚才添加的 Prometheus,点击 Import。
- 导入成功后,直接进入监控大盘,可实时查看服务器所有系统指标(数据每 15 秒刷新一次,与采集间隔一致)。
常用的二个springboot
12900 SpringBoot 2.x/3.x + Micrometer 最常用、数据最全、界面清晰,包含 JVM/HTTP/GC/ 线程全监控 4701 SpringBoot 2.x 经典版 轻量、简洁,专注 JVM 核心指标
增加服务时
# global 全局配置
global:
scrape_interval: 15s # 全局采集间隔(15秒拉取一次指标)
evaluation_interval: 15s # 告警规则评估间隔
scrape_timeout: 10s # 采集超时时间
# 告警规则文件(本次暂不配置,留空即可)
rule_files:
# - "alert_rules.yml"
# 采集配置(定义需要监控的目标)
scrape_configs:
# 1. 监控 Prometheus 自身
- job_name: "prometheus"
static_configs:
- targets: ["prometheus:9090"] # 容器内服务名+端口(Docker Compose 内网可解析)
# 2. 监控 Node Exporter(服务器系统指标)
- job_name: "node-exporter"
static_configs:
- targets: ["node-exporter:9100"] # Node Exporter 容器地址
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
# - targets: ['192.168.65.2:8080'] # host.docker.internal---> 192.168.65.2
- targets: ['host.docker.internal:8080'] # docker访问宿主机服务时,可以使用的访问方式
# - targets: ['192.168.31.238:8080'] 宿主机Ip 无法连接问题 !!!!!
# - targets: ['mengfh.mynatapp.cc'] #内网穿透形式,或是其他可访问方式
- job_name: 'spring-boot-app2'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ['host.docker.internal:8082']
# 告警管理器配置(本次暂不部署 AlertManager,留空)
alerting:
alertmanagers:
- static_configs:
- targets:
# - "alertmanager:9093"
- job_name: "springboot-app"
metrics_path: "/actuator/prometheus"
static_configs:
- targets: ["192.168.3.100:8080", "192.168.3.100:8081", "192.168.3.100:8082"]
labels:
env: "prod"
# 或分开配置,每个应用独立标签(更清晰)
- targets: ["192.168.3.100:8080"]
labels:
app: "user-service"
env: "prod"
- targets: ["192.168.3.100:8081"]
labels:
app: "order-service"
env: "prod"
增加了新的服务时,需让其立即生效方式:
curl -X POST http://127.0.0.1:9090/-/reload # 不可用 curl -X POST http://192.168.31.238:9090/-/reload # 可用
springboot集成
http://192.168.31.238:8080/actuator/prometheus 有结果输出,即说明集成成功。
pom.xml
<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
# 增加暴露点
management:
endpoints:
web:
exposure:
include: "*" # 生产环境建议按需开启,如: prometheus,health,info
metrics:
tags:
application: ${spring.application.name} # 添加应用名称标签
测试
-- 并发10 共发10000条
ab -c 10 -n 10000 -T application/json http://localhost:8080/api/event/bigReq
-- 并发1 发1条
ab -c 1 -n 1 -T application/json http://localhost:8080/api/event/bigReq
---并发50 持续300s
ab -c 50 -t 300 -T application/json http://localhost:8080/api/event/bigReq