1 Prometheus 监控 Spring Cloud Gateway
1.1 简述
- API网关作为应用服务与外部交互的入口,通过对API网关的监控,可以清晰的知道应用整体的请求量,以便根据不同的并发情况进行扩容处理。
对API网关的监控也是相当必要的。
- 通过Prometheus监控Gateway与监控普通Springboot项目几乎没有区别。基本步骤都是引入pom依赖,然后修改端点暴露metrics接口即可。
1.2 配置步骤
1.2.1 Maven 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.9.6</version>
</dependency>
- 需要注意的是
micrometer-registry-prometheus
的版本号需要跟spring-boot-dependencies
中定义的保持一致。Springboot
较高版本的定义统一在micrometer-bom
中,低版本的直接在spring-boot-dependencies
中定义。
1.2.2 配置文件 application.yaml [local or nacos]
--- # 暴露监控端点 配置
management:
endpoints:
# web端点配置属性
web:
# 默认端点前缀为/actuator,可修改
base-path: /actuator
exposure:
# 包含端点,全用直接使用'*'即可,多个场景['prometheus','health']
include: [ 'prometheus','health' ]
# 排除端点
exclude: [ 'shutdown' ]
# JMX 端点配置属性
jmx:
exposure:
include: [ 'prometheus' ]
exclude: [ 'shutdown' ]
metrics:
tags:
application: ${spring.application.name}
export:
prometheus:
descriptions: true
enabled: true
按照实际使用情况,开放对应监控端点即可,为了保护应用安全,不使用的不开启
spring-cloud-gateway (embed : netty server)
spring-boot (embed : tomcat server)
1.2.3 Prometheus 相关配置
prometheus.yml
配置
# consul服务发现配置
- job_name: 'api_gatway'
consul_sd_configs:
- server: '10.0.107.55:8500' #consul的服务地址
services: ["api_gateway"]
relabel_configs:
- source_labels: ["__meta_consul_tags"]
regex: .*api_gateway.*
action: keep
- regex: __meta_consul_service_metadata_(.+)
action: labelmap
# 指标标签兼容,spring cloud gateway 3.x版本前缀加了spring_cloud_
metric_relabel_configs:
- source_labels: [__name__]
regex: 'gateway(.*)'
target_label: '__name__'
replacement: 'spring_cloud_gateway$1'
# file_sd服务发现配置
- job_name: 'api_gateway'
file_sd_configs:
- files:
- './api_gateway_config/*.json'
refresh_interval: 15s
# 指标标签兼容,spring cloud gateway 3.x版本前缀加了spring_cloud_
metric_relabel_configs:
- source_labels: [__name__]
regex: 'gateway(.*)'
target_label: '__name__'
replacement: 'spring_cloud_gateway$1'
spring cloud gateway
在不同的版本中指标名称不一致,在3.X版本中指标名称加了前缀spring_cloud_
所以,在
prometheus
配置文件中使用metric_relabel_configs
对指标进行统一处理
1.2.4 调用 Actuator API
- curl -X GET http://127.0.0.1/actuator/prometheus
1.2.5 Grafana面板
官方面板:
Grafana中的面板:
grafana
官方提供的仅支持2.x
的gateway
,对于3.x的gateway存在问题。因此,我们在使用面板的时候同时兼容了2.x和3.x版本,需要根据gateway官方的面板进行自定义。
自定义面板:
1.2.6 指标选取
指标 | PromQL |
---|---|
运行状态 | up |
近5分钟QPS | sum by(instance) (rate(spring_cloud_gateway_requests_seconds_count{uri!~“.actuator.”}[5m])) |
近5分钟请求失败次数 | sum by(instance) (increase(spring_cloud_gateway_requests_seconds_count{outcome!=“SUCCESSFUL”}[5m])) |
X 参考文献
- Prometheus监控Spring Cloud Gateway - CSDN 【推荐】
- gateway + prometheus + grafana - _Meditation - 博客园
- Springcloud gateway结合grafana简单自定义监控_kingpand的博客-CSDN博客_gateway_requests_seconds_count - CSDN
- springboot下配置prometheus - 博客园