zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【不错的文章收藏了】我的Delphi开发经验谈
    【转载】Delphi异常处理try except语句和try finally语句用法以及区别
    Asp防止网页频繁刷新和强制不缓存的方法
    JavaScript的document和window对象详解
    Delphi下获取系统默认的UserAgent的方法
    【转载】ACCESS技巧集(DELPHI AND SQL)
    c#中const与readonly区别
    C#中virtual 方法和abstract方法的区别
    static(C# 参考)
    按键精灵
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14019820.html
Copyright © 2011-2022 走看看