首页 > 其他分享 >[系统性能优化实践]JVM进阶实战之监控工具(Prometheus)

[系统性能优化实践]JVM进阶实战之监控工具(Prometheus)

时间:2023-05-10 16:48:03浏览次数:38  
标签:__ 进阶 spring prometheus Prometheus JVM 端点 gateway cloud

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

1.2.5 Grafana面板

官方面板:

Grafana中的面板:

grafana官方提供的仅支持2.xgateway,对于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 参考文献

标签:__,进阶,spring,prometheus,Prometheus,JVM,端点,gateway,cloud
From: https://www.cnblogs.com/johnnyzen/p/17388354.html

相关文章

  • Prometheus&Grafana监控
    一、Prometheus入门Prometheus受启发于Google的Brogmon监控系统(相似的Kubernetes是从Google的Brog系统演变而来),从2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发,并且于2015年早期对外发布早期版本。2016年5月继Kubernetes之后成为第二......
  • Linux部署Prometheus+Alertmanager并配置企业微信告警
    一、Prometheus告警简介告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。在Prometheus中一条告警规则主要由以下几部分组......
  • Linux部署Prometheus+Alertmanager并配置邮件告警
    一、Prometheus告警简介告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。在Prometheus中一条告警规则主要由以下几部分组......
  • docker 部署 Prometheus
    1、部署node_exporter数据采集dockerrun-d--name=node-exporter\--restart=always\-p9100:9100\-v"/proc:/host/proc:ro"\-v"/sys:/host/sys:ro"\-v"/:/rootfs:ro"\prom/node-exporter访问:http:/......
  • Linux部署Prometheus+Alertmanager并配置钉钉告警
    一、Prometheus告警简介告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。在Prometheus中一条告警规则主要由以下几部分组......
  • JVM排查
        ......
  • JVM快速入门
    内存结构1.程序计数器1.1.定义ProgramCounterRegister程序计数器(寄存器)1.2.作用记住下一条jvm指令的执行地址1.3.特点是线程私有的不会存在内存溢出2.虚拟机栈2.1.定义JavaVirtualMachineStacks(Java虚拟机栈)每个线程运行时所需要的内存,称为虚拟机栈每个栈......
  • 线程的五种状态 jvm 看100%cpu, 是堆内存还是元空间还是gc的效率过低,
        ......
  • JVM面试和学习中需要注意的部分
    内存结构1.方法区用来存储类加载的数据,例如类的名称,方法入口2.JVM虚拟机栈用于存储线程,包括局部变量和方法参数3.堆内存用来存储对象4.方法区的规范实现:永久代和元空间5.方法区JVM栈堆都会发生内存溢出的问题程序计数器不会6.程序计数器用来存储程序运行到哪里因为线......
  • JVM 启动参数
    JVM启动参数通过jmap查看JVM内存分配jmap-heap[pid]一个Java进程最大占用的物理内存为:MaxMemory=eden+survivor+old+StringConstantPool+Codecache+compressedclassspace+Metaspace+Threadstack(*threadnum)+Direct+Mapped+JVM+Nativ......