zoukankan      html  css  js  c++  java
  • Spring Boot Actuator 整合 Prometheus

    简介

    Spring Boot 自带监控功能 Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等。这一节结合 Prometheus 、Grafana 来更加直观的展示这些信息。

    实验

    说明

    服务名 地址 端口
    Prometheus 172.16.2.101 9090
    Grafana 172.16.2.101 3000
    Spring Boot Demo 172.16.2.204 8080

    创建项目

    创建用于测试的 Spring Boot 项目,主要代码如下。

    pom.xml

    <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>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    

    application.yml

    management:
      endpoints:
        web:
          exposure:
            include: '*'
    
      endpoint:
        health:
          show-details: always
    
      metrics:
        tags:
          application: actuator-demo
    
    • management.endpoints.web.exposure.include:大多数actuator的端口都不会通过http公开,* 代表公开所有这些端点。对于生产环境,应该仔细选择要公开的端点。
    • management.metrics.tags.application:为应用设置 tag ,方便区分不同的应用。

    启动类

    @SpringBootApplication
    @RestController
    public class SpringbootActuatorPrometheusDemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootActuatorPrometheusDemoApplication.class, args);
        }
    
        @RequestMapping(value = "/hello")
        public String  sayHello() {
            for (int i = 1 ; i <= 10 ; i++) {
                Thread t = new Thread(() -> {
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } , "HelloThread - " + i);
                t.start();
            }
            return "ok";
        }
    
        /**
        @Bean
        MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
            return registry -> registry.config().commonTags("application", "springboot-actuator-prometheus-demo");
        }
        */
    
    }
    

    配置 Prometheus 和 Grafana

    在 prometheus.yml 中添加针对该 Spring Boot 应用 的监控 job

    - job_name: 'actuator-demo'
        metrics_path: '/prometheus'
        static_configs:
        - targets: ['172.16.2.204:8080']
    

    运行 Prometheus 和 Grafana:

    docker start prometheus grafana
    

    访问 Prometheus UI http://172.16.2.101:9090 ,查看 targets ,可以看到 job 处于 UP 状态,说明配置成功了。

    Grafana UI http://172.16.2.101:3000,通过Grafana的 + 图标导入(Import) JVM (Micrometer) dashboard:

    • grafana id = 4701
    • 注意选中prometheus数据源

    查看JVM (Micormeter) dashboard:

    可以看到应用的 JVM 的 堆栈、 线程、 IO 等等信息。

    源码

    https://github.com/gf-huanchupk/SpringBootLearning/tree/master/springboot-actuator-prometheus

    参考

    https://micrometer.io/docs/registry/prometheus
    https://prometheus.io/docs/prometheus

    往期内容




    欢迎扫码或微信搜索公众号《程序员果果》关注我,关注有惊喜~

  • 相关阅读:
    资料工作手册
    这么点破玩艺,昨天我为了学会它,花了六小时
    压力太大,使人过早衰老
    这是真的么。
    我可怜的好友。。。
    操了,上个网怎么就这么憋屈呢
    编程习惯,代码风格,其实很重要
    其实,我并不喜欢脚本语言
    咱也起一卦,看看北京是否还会继续下雨
    我一点不偏激,只是,我从不抱有侥幸思想
  • 原文地址:https://www.cnblogs.com/huanchupkblog/p/11717351.html
Copyright © 2011-2022 走看看