1.Spring Boot 工程集成 Micrometer
1.1引入依赖
  
   - 
    
     
    
    
     
      <dependency>
     
    
 
   - 
    
     
    
    
     
        
      <groupId>org.springframework.boot
      </groupId>
     
    
 
   - 
    
     
    
    
     
        
      <artifactId>spring-boot-starter-actuator
      </artifactId>
     
    
 
   - 
    
     
    
    
     
      </dependency>
     
    
 
   - 
    
     
    
    
     
      <dependency>
     
    
 
   - 
    
     
    
    
     
        
      <groupId>io.micrometer
      </groupId>
     
    
 
   - 
    
     
    
    
     
        
      <artifactId>micrometer-registry-prometheus
      </artifactId>
     
    
 
   - 
    
     
    
    
     
      </dependency>
     
    
 
  
 
1.2配置
  
   - 
    
     
    
    
     
      management.server.port=
      9003
     
    
 
   - 
    
     
    
    
     
      management.endpoints.web.exposure.include=*
     
    
 
   - 
    
     
    
    
     
      management.endpoint.metrics.enabled=
      true
     
    
 
   - 
    
     
    
    
     
      management.endpoint.health.
      show-details=always
     
    
 
   - 
    
     
    
    
     
      management.endpoint.health.probes.enabled=
      true
     
    
 
   - 
    
     
    
    
     
      management.endpoint.prometheus.enabled=
      true
     
    
 
   - 
    
     
    
    
     
      management.metrics.
      export.prometheus.enabled=
      true
     
    
 
   - 
    
     
    
    
     
      management.metrics.tags.application=voice-qc-backend
     
    
 
  
 
这里management.endpoints.web.exposure.include=*配置为开启 Actuator 服务,因为Spring Boot Actuator 会自动配置一个 URL 为/actuator/Prometheus的 HTTP 服务来供 Prometheus 抓取数据,不过默认该服务是关闭的,该配置将打开所有的 Actuator 服务。
management.metrics.tags.application配置会将该工程应用名称添加到计量器注册表的 tag 中去,方便后边 Prometheus 根据应用名称来区分不同的服务。
1.3监控jvm信息
然后在工程启动主类中添加 Bean 如下来监控 JVM 性能指标信息:
  
   - 
    
     
    
    
     
      @SpringBootApplication
     
    
 
   - 
    
     
    
    
     
      public 
      class 
      GatewayDatumApplication {
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
          
      public 
      static 
      void 
      main(
      String[] args) {
     
    
 
   - 
    
     
    
    
     
              
      SpringApplication.
      run(
      GatewayDatumApplication.
      class, args);
     
    
 
   - 
    
     
    
    
     
          }
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
          
      @Bean
     
    
 
   - 
    
     
    
    
     
          
      MeterRegistryCustomizer<
      MeterRegistry> 
      configurer(
      
     
    
 
   - 
    
     
    
    
     
                  
      @Value(
      "${spring.application.name}") 
      String applicationName) {
     
    
 
   - 
    
     
    
    
     
              
      return (registry) -> registry.
      config().
      commonTags(
      "application", applicationName);
     
    
 
   - 
    
     
    
    
     
          }
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      }
     
    
 
  
 
1.4创建自定义监控
监控请求次数与响应时间
  
   - 
    
     
    
    
     
      package com.lianxin.gobot.api.monitor;
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      import io.micrometer.core.instrument.Counter;
     
    
 
   - 
    
     
    
    
     
      import io.micrometer.core.instrument.MeterRegistry;
     
    
 
   - 
    
     
    
    
     
      import io.micrometer.core.instrument.Timer;
     
    
 
   - 
    
     
    
    
     
      import lombok.Getter;
     
    
 
   - 
    
     
    
    
     
      import org.springframework.beans.factory.
      annotation.Autowired;
     
    
 
   - 
    
     
    
    
     
      import org.springframework.beans.factory.
      annotation.Value;
     
    
 
   - 
    
     
    
    
     
      import org.springframework.stereotype.Component;
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      import javax.
      annotation.PostConstruct;
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      /**
     
    
 
   - 
    
     
    
    
     
       * @Author: GZ
     
    
 
   - 
    
     
    
    
     
       * @CreateTime: 2022-08-30  10:50
     
    
 
   - 
    
     
    
    
     
       * @Description: 自定义监控服务
     
    
 
   - 
    
     
    
    
     
       * @Version: 1.0
     
    
 
   - 
    
     
    
    
     
       */
     
    
 
   - 
    
     
    
    
     
      @Component
     
    
 
   - 
    
     
    
    
     
      public 
      class 
      PrometheusCustomMonitor {
     
    
 
   - 
    
     
    
    
     
          
      /**
     
    
 
   - 
    
     
    
    
     
           * 上报拨打请求次数
     
    
 
   - 
    
     
    
    
     
           */
     
    
 
   - 
    
     
    
    
     
          
      @Getter
     
    
 
   - 
    
     
    
    
     
          
      private Counter reportDialRequestCount;
     
    
 
   - 
    
     
    
    
     
          
      /**
     
    
 
   - 
    
     
    
    
     
           * 上报拨打URL
     
    
 
   - 
    
     
    
    
     
           */
     
    
 
   - 
    
     
    
    
     
          
      @Value("${lx.call-result-report.url}")
     
    
 
   - 
    
     
    
    
     
          
      private String callReportUrl;
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
          
      /**
     
    
 
   - 
    
     
    
    
     
           * 上报拨打响应时间
     
    
 
   - 
    
     
    
    
     
           */
     
    
 
   - 
    
     
    
    
     
          
      @Getter
     
    
 
   - 
    
     
    
    
     
          
      private Timer reportDialResponseTime;
     
    
 
   - 
    
     
    
    
     
          
      @Getter
     
    
 
   - 
    
     
    
    
     
          
      private 
      final MeterRegistry registry;
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
          
      @Autowired
     
    
 
   - 
    
     
    
    
     
          
      public PrometheusCustomMonitor(MeterRegistry registry) {
     
    
 
   - 
    
     
    
    
     
              
      this.registry = registry;
     
    
 
   - 
    
     
    
    
     
          }
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
          
      @PostConstruct
     
    
 
   - 
    
     
    
    
     
          
      private void 
      init() {
     
    
 
   - 
    
     
    
    
     
              reportDialRequestCount = registry.counter(
      "go_api_report_dial_request_count", 
      "url",callReportUrl);
     
    
 
   - 
    
     
    
    
     
              reportDialResponseTime=  registry.timer(
      "go_api_report_dial_response_time", 
      "url",callReportUrl);
     
    
 
   - 
    
     
    
    
     
          }
     
    
 
   - 
    
     
    
    
     
      }
     
    
 
  
  
1.5添加具体业务代码监控
  
   - 
    
     
    
    
     
      //统计请求次数
     
    
 
   - 
    
     
    
    
     
      prometheusCustomMonitor.getReportDialRequestCount().increment();
     
    
 
   - 
    
     
    
    
     
      long startTime = System.currentTimeMillis();
     
    
 
   - 
    
     
    
    
     
      String company = HttpUtils.post(companyUrl,
      "");
     
    
 
   - 
    
     
    
    
     
      //统计响应时间
     
    
 
   - 
    
     
    
    
     
      long endTime = System.currentTimeMillis();
     
    
 
   - 
    
     
    
    
     
      prometheusCustomMonitor.getReportDialResponseTime().
      record(endTime-startTime, TimeUnit.MILLISECONDS);
     
    
 
  
 
在浏览器访问http://127.0.0.1:9001/actuator/prometheus,就可以看到服务的一系列不同类型 metrics 信息,例如jvm_memory_used_bytes gauge、jvm_gc_memory_promoted_bytes_total counter,go_api_report_dial_request_count等

到此,Spring Boot 工程集成 Micrometer 就已经完成,接下里就要与 Prometheus 进行集成了。
2.集成 Prometheus
2.1安装
docker pull prom/prometheus
 
mdkir /usr/local/prometheus
 
vi 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: [
      '192.168.136.129:9090']
     
    
 
  
  
docker run -d --name prometheus -p 9090:9090 -v/usr/local/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
 

2.2集成配置
  
   - 
    
     
    
    
     
      global:
     
    
 
   - 
    
     
    
    
     
        scrape_interval: 
      15s
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      scrape_configs:
     
    
 
   - 
    
     
    
    
     
        - job_name: 
      "prometheus"
     
    
 
   - 
    
     
    
    
     
          static_configs:
     
    
 
   - 
    
     
    
    
     
          - targets: [
      "localhost:9090"]
     
    
 
   - 
    
     
    
    
     
        - job_name: 
      "metricsLocalTest"
     
    
 
   - 
    
     
    
    
     
          metrics_path: 
      "/actuator/prometheus"
     
    
 
   - 
    
     
    
    
     
          static_configs:
     
    
 
   - 
    
     
    
    
     
          - targets: [
      "localhost:9003"]
     
    
 
  
 
这里localhost:9001就是上边本地启动的服务地址,也就是 Prometheus 要监控的服务地址。同时可以添加一些与应用相关的标签,方便后期执行 PromSQL 查询语句区分。最后重启 Prometheus 服务


3.使用 Grafana Dashboard 展示监控项
3.1安装grafana
 docker pull grafana/grafana
 
docker run -d --name grafana -p 3000:3000 -v /usr/local/grafana:/var/lib/grafana grafana/grafana
 
默认用户名/密码 admin/admin

3.2配置prometheus数据源

3.3增加jvm面板
模板编号为4701


3.4配置业务接口监控面板

转载:https://blog.csdn.net/m0_71777195/article/details/128351051
					