Prometheus+grafana监控SpringBoot2应用

micrometer

我们对springboot2监控,主要用的是SpringBoot Actuator这个项目。而他的底层就是micrometer

image-20201122153751510

micrometer号称监控界的SLF4J,主要用来以极低极低的消耗来给Java程序提供对指标的监控。

micrometer支持接入多种数据库,这里我使用的是prometheus。

集成prometheus

我这里boot版本是2.1.8,部分maven依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--micrometer桥接prometheus-->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
            <version>1.2.0</version>
        </dependency>

        <!--micrometer获取jvm相关信息-->
        <dependency>
            <groupId>io.github.mweirauch</groupId>
            <artifactId>micrometer-jvm-extras</artifactId>
            <version>0.1.4</version>
        </dependency>

properties配置:

spring.application.name=boot-micrometer
management.metrics.tags.application=${spring.application.name}
management.endpoints.web.exposure.include=*

#可以远程关闭springboot服务
#curl -X POST http://localhost:8080/actuator/shutdown
management.endpoint.shutdown.enabled=true
management.metrics.export.simple.enabled=false

info.author=wen.jie

主启动类:

@EnableScheduling
@SpringBootApplication
public class BootMicrometerApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootMicrometerApplication.class, args);
    }

}

配置类:

@Component
public class MeterConfig implements MeterBinder {

    public Counter counter;

    public Map<String,Double> map;

    public MeterConfig() {
        map = new HashMap<>();
    }

    @Override
    public void bindTo(MeterRegistry registry) {
        this.counter = Counter.builder("demo.counter").tags("name","counter").description("this is counter").register(registry);

        Gauge.builder("demo.gauge",map,x->x.get("x")).tag("name","guage").description("this is gauge").register(registry);
    }
}

定时任务:

@Component
public class ScheduledConfig {

    @Autowired
    MeterConfig meterConfig;

    int count1 = 0;

    @Async("one")
    @Scheduled(fixedDelay = 1000)
    public void increment(){
        count1++;
        meterConfig.counter.increment();
        meterConfig.map.put("x", (double) count1);
        System.out.println(count1);
    }
}

访问:http://localhost:8080/actuator/metrics

image-20201122160710722

访问我刚在在配置类中设置的指标:http://localhost:8080/actuator/metrics/demo.counter,http://localhost:8080/actuator/metrics/demo.gauge

image-20201122160905784

image-20201122160920301

配置prometheus.yml:(添加springboot配置)

  - job_name: 'springboot'
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['localhost:8080']

配置完成后,重启prometheus,然后在target中就能看到springboot应用了

image-20201122162135874

接入Grafana

在Grafana页面中点击import

image-20201122162535962

输入4701,点击load

image-20201122162604327

稍等片刻,就会出来JVM (Micrometer)页面

image-20201122162658161

选择之前生成的Prometheus的数据源

就能看到jvm的dashboard了

image-20201122163607591

原文地址:https://www.cnblogs.com/wwjj4811/p/14019820.html