springboot+prometheus 实现监控

1.引入相关依赖及配置

springboot为1.x 谨慎升级prometheus版本,可能会不兼容

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>1.5.12.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
            <version>1.1.3</version>
        </dependency>

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-spring-legacy</artifactId>
            <version>1.0.3</version>
            <exclusions>
                <exclusion>
                    <artifactId>micrometer-core</artifactId>
                    <groupId>io.micrometer</groupId>
                </exclusion>
            </exclusions>
        </dependency>

springboot为2.x,可使用该版本或更高版本

springboot1.x application.properties 配置

# actuator暴露接口使用的端口
management.port = 19080

# actuator暴露接口的前缀
management.context-path = /actuator

# 是否暴露metric指标
management.metrics.export.prometheus.enabled=true

# actuator是否需要安全保证
management.security.enabled = false

# actuator的metrics接口是否需要安全保证
endpoints.metrics.sensitive = false

# actuator的metrics接口是否开启
endpoints.metrics.enabled=true

# actuator的health接口是否需要安全保证
endpoints.health.sensitive=false

# actuator的health接口是否开启
endpoints.health.enabled=true

springboot为2.x,推荐改用以下依赖

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

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>

springboot2.x application.properties 配置

management.server.port=19080
management.endpoints.enabled-by-default=true
management.endpoint.metrics.enabled=true
management.endpoints.web.exposure.include=*
management.endpoints.web.base-path=/actuator
management.endpoint.health.show-details=always
management.endpoint.prometheus.enabled=true
management.metrics.tags.application=${spring.application.name}
management.metrics.export.prometheus.enabled=true

封装工具类

// package

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.search.Search;

import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;

/**
 * @author wangzhen
 * @date 2020-07-07
 */
public class MetricCollector {
    private static ConcurrentHashMap<String, AtomicLong> ref = new ConcurrentHashMap<>();

    private static Search find(String name) {
        return Metrics.globalRegistry.find(name);
    }

    public static Counter incrCounter(String name, String description, String... tags) {
        Counter counter = find(name).counter();
        if (!Optional.ofNullable(counter).isPresent()) {
            counter = Counter.builder(name)
                    .tags(tags)
                    .description(description)
                    .register(Metrics.globalRegistry);
        }
        counter.increment();
        return counter;
    }

    public static Gauge incrGauge(String name, String description, String... tags) {
        Gauge gauge = find(name).gauge();
        if (Optional.ofNullable(gauge).isPresent()) {
            double value = gauge.value();
            Double var = value + 1D;
            MetricCollector.ref.compute(name, (k, v) -> {
                if (v == null) {
                    MetricCollector.ref.put(k, new AtomicLong(1));
                } else {
                    v.set(var.longValue());
                }
                return v;
            });
        } else {
            AtomicLong ref = new AtomicLong(1);
            gauge = Gauge.builder(name, ref, AtomicLong::doubleValue)
                    .tags(tags)
                    .description(description)
                    .register(Metrics.globalRegistry);
            MetricCollector.ref.put(name, ref);
        }
        return gauge;
    }
}

demo:

import io.micrometer.core.annotation.Timed;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Gauge;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author wangzhen
 * @date 2020-07-07
 */
@RestController
@RequestMapping("/app/v1/prime/tester")
public class AppTester {
    @PostMapping("/test")
    public Object test() {
    // name 建议以total结尾
        Counter counter = MetricCollector.incrCounter("counter_total", "counter_description", "key", "vv");
        return counter.count();
    }

    @RequestMapping("/test1")
    @Timed(value = "method_timer", extraTags = {"timer_key", "timer_value"}, description = "timed_description")
    public Object test1() throws InterruptedException {
        Thread.sleep(5000);
        return "ok";
    }

    @RequestMapping("/test2")
    public Object test2() {
        Gauge gauge = MetricCollector.incrGauge("gauge_name", "gauge_description", "key2", "vv2");
        return gauge.value();
    }
}

通过调用相应接口后,访问 http://localhost:19080/actuator/prometheus/
即可看到注册的指标详情。
测试截图:
counter_total
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot + Vue项目中配置应用监控,可以使用Spring Boot Actuator来提供监控功能,同时结合Prometheus和Grafana等工具来实现监控数据的可视化。具体步骤如下: 1. 在Spring Boot项目中引入Actuator依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` 2. 配置Actuator的端点暴露: 在application.properties或application.yml文件中增加如下配置,以开放所有Actuator端点: ```yaml management: endpoints: web: exposure: include: "*" ``` 3. 启动Spring Boot应用,并访问Actuator的端点: 启动Spring Boot应用后,可以通过访问http://localhost:8080/actuator来查看所有Actuator的端点列表。例如,可以访问http://localhost:8080/actuator/health来查看应用的健康状况。 4. 配置Prometheus的数据采集: 在Spring Boot应用中集成Prometheus,可以使用Spring Boot Actuator提供的spring-boot-starter-actuator和micrometer-registry-prometheus依赖。具体步骤如下: 在pom.xml文件中增加如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.1.1</version> </dependency> ``` 在application.properties或application.yml文件中增加如下配置: ```yaml management: metrics: export: prometheus: enabled: true ``` 5. 配置Grafana的数据展示: 在Spring Boot应用中集成Grafana,可以使用docker-compose等工具来进行配置。具体步骤如下: 在docker-compose.yml文件中增加如下配置: ```yaml version: '3' services: prometheus: image: prom/prometheus:v2.26.0 ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' grafana: image: grafana/grafana:8.1.5 ports: - 3000:3000 volumes: - ./grafana.ini:/etc/grafana/grafana.ini - ./provisioning:/etc/grafana/provisioning - grafana-data:/var/lib/grafana volumes: grafana-data: ``` 其中,prometheus.yml文件中需要配置对应的监控数据采集地址。grafana.ini文件中需要配置对应的数据源和仪表盘等信息。provisioning目录下可以放置对应的数据源和仪表盘等信息。 6. 启动Prometheus和Grafana容器: 在命令行中执行如下命令,启动Prometheus和Grafana容器: ```bash docker-compose up -d ``` 7. 在Grafana中导入仪表盘: 在Grafana中可以通过导入仪表盘的方式来展示监控数据。可以在Grafana仪表盘库中搜索Prometheus相关的仪表盘,并进行导入和配置。具体步骤可以参考Grafana的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值