小言_互联网的博客

SpringBoot+Prometheus+Grafana 实现自定义监控

408人阅读  评论(0)

1.Spring Boot 工程集成 Micrometer

1.1引入依赖


  
  1. <dependency>
  2.    <groupId>org.springframework.boot </groupId>
  3.    <artifactId>spring-boot-starter-actuator </artifactId>
  4. </dependency>
  5. <dependency>
  6.    <groupId>io.micrometer </groupId>
  7.    <artifactId>micrometer-registry-prometheus </artifactId>
  8. </dependency>

1.2配置


  
  1. management.server.port= 9003
  2. management.endpoints.web.exposure.include=*
  3. management.endpoint.metrics.enabled= true
  4. management.endpoint.health. show-details=always
  5. management.endpoint.health.probes.enabled= true
  6. management.endpoint.prometheus.enabled= true
  7. management.metrics. export.prometheus.enabled= true
  8. 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 性能指标信息:


  
  1. @SpringBootApplication
  2. public  class  GatewayDatumApplication {
  3.      public  static  void  main( String[] args) {
  4.          SpringApplication. run( GatewayDatumApplication. class, args);
  5.     }
  6.      @Bean
  7.      MeterRegistryCustomizer< MeterRegistryconfigurer(
  8.              @Value( "${spring.application.name}"String applicationName) {
  9.          return (registry) -> registry. config(). commonTags( "application", applicationName);
  10.     }
  11. }

1.4创建自定义监控

监控请求次数与响应时间


  
  1. package com.lianxin.gobot.api.monitor;
  2. import io.micrometer.core.instrument.Counter;
  3. import io.micrometer.core.instrument.MeterRegistry;
  4. import io.micrometer.core.instrument.Timer;
  5. import lombok.Getter;
  6. import org.springframework.beans.factory. annotation.Autowired;
  7. import org.springframework.beans.factory. annotation.Value;
  8. import org.springframework.stereotype.Component;
  9. import javax. annotation.PostConstruct;
  10. /**
  11.  * @Author: GZ
  12.  * @CreateTime: 2022-08-30  10:50
  13.  * @Description: 自定义监控服务
  14.  * @Version: 1.0
  15.  */
  16. @Component
  17. public  class  PrometheusCustomMonitor {
  18.      /**
  19.      * 上报拨打请求次数
  20.      */
  21.      @Getter
  22.      private Counter reportDialRequestCount;
  23.      /**
  24.      * 上报拨打URL
  25.      */
  26.      @Value("${lx.call-result-report.url}")
  27.      private String callReportUrl;
  28.      /**
  29.      * 上报拨打响应时间
  30.      */
  31.      @Getter
  32.      private Timer reportDialResponseTime;
  33.      @Getter
  34.      private  final MeterRegistry registry;
  35.      @Autowired
  36.      public PrometheusCustomMonitor(MeterRegistry registry) {
  37.          this.registry = registry;
  38.     }
  39.      @PostConstruct
  40.      private void  init() {
  41.         reportDialRequestCount = registry.counter( "go_api_report_dial_request_count""url",callReportUrl);
  42.         reportDialResponseTime=  registry.timer( "go_api_report_dial_response_time""url",callReportUrl);
  43.     }
  44. }

1.5添加具体业务代码监控


  
  1. //统计请求次数
  2. prometheusCustomMonitor.getReportDialRequestCount().increment();
  3. long startTime = System.currentTimeMillis();
  4. String company = HttpUtils.post(companyUrl, "");
  5. //统计响应时间
  6. long endTime = System.currentTimeMillis();
  7. prometheusCustomMonitor.getReportDialResponseTime(). record(endTime-startTime, TimeUnit.MILLISECONDS);

在浏览器访问http://127.0.0.1:9001/actuator/prometheus,就可以看到服务的一系列不同类型 metrics 信息,例如jvm_memory_used_bytes gaugejvm_gc_memory_promoted_bytes_total countergo_api_report_dial_request_count

到此,Spring Boot 工程集成 Micrometer 就已经完成,接下里就要与 Prometheus 进行集成了。

2.集成 Prometheus

2.1安装

docker pull prom/prometheus
mdkir /usr/local/prometheus
vi prometheus.yml

  
  1. # my  global config
  2. global:
  3.   scrape_interval:  15s #  Set the scrape interval  to every  15 seconds.  Default  is every  1 minute.
  4.   evaluation_interval:  15s # Evaluate rules every  15 seconds. The  default  is every  1 minute.
  5.   # scrape_timeout  is  set  to the  global  default ( 10s).
  6. # Alertmanager configuration
  7. alerting:
  8.   alertmanagers:
  9.   - static_configs:
  10.     - targets:
  11.       # - alertmanager: 9093
  12. # Load rules once  and periodically evaluate them according  to the  global  'evaluation_interval'.
  13. rule_files:
  14.   # -  "first_rules.yml"
  15.   # -  "second_rules.yml"
  16. # A scrape configuration containing exactly one endpoint  to scrape:
  17. # Here it 's Prometheus itself.
  18. scrape_configs:
  19.   # The job name  is added  as a label `job=<job_name>`  to any timeseries scraped  from this config.
  20.   - job_name:  'prometheus'
  21.     # metrics_path defaults  to  '/metrics'
  22.     # scheme defaults  to  'http'.
  23.     static_configs:
  24.     - 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集成配置


  
  1. global:
  2.   scrape_interval:  15s
  3. scrape_configs:
  4.   - job_name:  "prometheus"
  5.     static_configs:
  6.     - targets: [ "localhost:9090"]
  7.   - job_name:  "metricsLocalTest"
  8.     metrics_path:  "/actuator/prometheus"
  9.     static_configs:
  10.     - 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场