3.2 springboot中集成prometheus

 

編寫。

  1. 本文僅僅是一個示例項目,後續加入springcloud等環境,將對其進行二次開發。
  • 項目具體實施:
  1. 新建一個springboot項目,名稱爲prometheus-service
  1. 添加依賴

           <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-web</artifactId>

           </dependency>

           <dependency>

<!--自動重啓 -->

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-devtools</artifactId>

                <scope>runtime</scope>

                <optional>true</optional>

           </dependency>

           <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. 配置application.yml

server:

  port: 9090

spring:

  application:

    name: prometheus-service

management:

  endpoint:

    metrics:

      enabled: true

    prometheus:

      enabled: true

  endpoints:

    web:

      exposure:

        include: '*'

  metrics:

    export:

      prometheus:

        enabled: true

    tags:

      application: ${spring.application.name}

  1. 新建一個包com.yuji.job,新建JobMetrics類,完整代碼如下:

package com.yuji.job;

import java.util.HashMap;

import java.util.Map;

import org.springframework.stereotype.Component;

import io.micrometer.core.instrument.Counter;

import io.micrometer.core.instrument.Gauge;

import io.micrometer.core.instrument.MeterRegistry;

import io.micrometer.core.instrument.binder.MeterBinder;

@Component

public class JobMetrics implements MeterBinder {

    public Counter job1Counter;

    public Counter job2Counter;

    public Map<String, Double> map;

    JobMetrics() {

        map = new HashMap<>();

    }

    @Override

    public void bindTo(MeterRegistry meterRegistry) {

         this.job1Counter = Counter.builder("counter_builder_job_counter1")

                .tags(new String[]{"name", "tag_job_counter1"})

                .description("description-Job counter1 execute count").register(meterRegistry);

        this.job2Counter = Counter.builder("counter_builder_job_counter2")

                .tags(new String[]{"name", "tag_job_counter2"})

                .description("description-Job counter2 execute count ").register(meterRegistry);

        Gauge.builder("gauge_builder_job_gauge", map, x -> x.get("x"))

                .tags("name", "tag_job_gauge")

                .description("description-Job gauge")

                .register(meterRegistry);

    }

}

  1. 在該包裏模擬job任務,新建MyJob類,完整內容如下:

package com.yuji.job;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.scheduling.annotation.Async;

import org.springframework.scheduling.annotation.EnableScheduling;

import org.springframework.scheduling.annotation.Scheduled;

import org.springframework.stereotype.Component;

@Component

@EnableScheduling

public class MyJob {

    private Integer count1 = 0;

    private Integer count2 = 0;

    @Autowired

    private JobMetrics jobMetrics;

    @Async("main")

    @Scheduled(fixedDelay = 1000)

    public void doSomething() {

        count1++;

        jobMetrics.job1Counter.increment();

        jobMetrics.map.put("x", Double.valueOf(count1));

        System.out.println("task1 count:" + count1);

        if(count1%2==0){

            System.out.println("%5==0");

            jobMetrics.map.put("x", Double.valueOf(1));

        }

    }

    @Async

    @Scheduled(fixedDelay = 10000)

    public void doSomethingOther() {

        count2++;

        jobMetrics.job2Counter.increment();

        System.out.println("task2 count:" + count2);

    }

}

  1. 新建一個controller包,新建CounterController類,代碼如下:

package com.yuji.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import com.yuji.job.JobMetrics;

 

@RestController

public class CounterController {

       @Autowired

       private JobMetrics jobMetrics;

       @RequestMapping(value = "/counter1", method = RequestMethod.GET)

       public void counter1() {

              jobMetrics.job2Counter.increment();

       }

       @RequestMapping(value = "/counter2", method = RequestMethod.GET)

       public void counter2() {

              jobMetrics.job2Counter.increment();

       }

 

       @RequestMapping(value = "/gauge", method = RequestMethod.GET)

       public void gauge(@RequestParam(value = "x") String x) {

              System.out.println("gauge controller x" + x);

              jobMetrics.map.put("x", Double.valueOf(x));

       }

}

  1. 啓動項目,在瀏覽器輸入:http://localhost:9090/actuator/prometheus,如果執行成功,則springboot與prometheus集成成功。
  1. 將其放置於prometheus監控環境下實現grafana圖表顯示。
  1. prometheus環境搭建參考:

https://blog.csdn.net/qq_25337221/article/details/106206042

  1. 在prometheus配置該應用

# vim /etc/prometheus/prometheus.yml

添加如下代碼:

- job_name: 'springboot'

scrape_interval: 5s

metrics_path: '/actuator/prometheus'

static_configs:

- targets: ['ip:9090']

執行:

# ps -aux | grep prome

#kill -HUP 進程號

然後登陸前端prometheus查看prometheus界面,springboot是否添加成功。

  1. 使用grafana模板顯示springboot
  1. 下載https://grafana.com/grafana/dashboards/6756模板,
  2. 在grafana中添加數據源(之前的文檔已經添加,未添加可以參考下面的參考文檔或者本文摘要中提到的上一個文檔)。
  3. 導入模板
  4. 根據自己需要修改變量名,參照模板裏的教程。

至此,springboot與prometheus入門示例完畢。

本文文本材料:https://download.csdn.net/download/qq_25337221/12445404

  • 參考鏈接:
  1. Prometheus+Grafana可視化監控SpringBoot項目 https://www.jianshu.com/p/762fa72ffe79

2. 爲springboot中自定義prometheus:https://www.cnblogs.com/xidianzxm/p/11542135.html

3. prometheus在java裏的基礎知識:https://www.cnblogs.com/xiezhengcai/p/prometheus.html

本內容由安康學院“雨季”原創。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章