栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

prometheus收集springboot指标相关信息

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

prometheus收集springboot指标相关信息

pom.xml
     
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            io.micrometer
            micrometer-core
        
        
            io.micrometer
            micrometer-registry-prometheus
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
     
     
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                2020.0.4
                pom
                import
            
            
                org.springframework.boot
                spring-boot-dependencies
                2.5.6
                pom
                import
            
        
    
application.yml
spring:
  application:
    name: springboot-demo
management:
  endpoints:
    web:
      exposure:
        include: ["metrics","prometheus"]
      base-path: /actuator
  endpoint:
    metrics:
      enabled: true
    prometheus:
      enabled: true
  metrics:
    export:
      prometheus:
        enabled: true
    tags:
      #springboot2.1.0版本后添加tags标签,2.0版本需要使用java bean方式配置
      application: ${spring.application.name} 

如果是使用springboot 2.0.x版本,需要如下配置tags

@Bean
	MeterRegistryCustomizer configurer(
			@Value("${spring.application.name}") String applicationName) {
		return (registry) -> registry.config().commonTags("application", applicationName);
	}
开启P99等监控指标
Configuration
public class PrometheusConfiguration {

    @Bean
    MeterRegistryCustomizer metricsCommonTags() {
        return registry -> {
            registry.config().meterFilter(
                    new MeterFilter() {
                        @Override
                        public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
                            if (id.getType() == Meter.Type.TIMER && id.getName().matches("^(http|dubbo){1}.*")) {
                                return DistributionStatisticConfig.builder()
                                        .percentilesHistogram(true)
                                        .percentiles(0.5, 0.90, 0.95, 0.99)
                                        .sla(Duration.ofMillis(50).tonanos(),
                                                Duration.ofMillis(100).tonanos(),
                                                Duration.ofMillis(200).tonanos(),
                                                Duration.ofSeconds(1).tonanos(),
                                                Duration.ofSeconds(5).tonanos())
                                        .minimumExpectedValue(Duration.ofMillis(1).tonanos())
                                        .maximumExpectedValue(Duration.ofSeconds(5).tonanos())
                                        .build()
                                        .merge(config);
                            } return config;
                        }
                    });
        };
    }

如果使用的是dubbo,需要自定义dubbo拦截器实现rpc接口的请求耗时统计

@Slf4j
@Configuration
@Activate(group = {Constants.PROVIDER, Constants.CONSUMER}, order = 1)
public class DubboRequestTimeFilter implements Filter {
    
    @Override
    public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {

        try {
            String serviceName = invoker.getInterface().getName();
            String methodName = RpcUtils.getMethodName(invocation);
            MeterRegistry meterRegistry = ServiceBean.getSpringContext().
                    getBean(MeterRegistry.class);
            Timer timer = Timer.builder("dubbo.server.requests")
                    .description("dubbo请求耗时")
                    .tags("serviceName", serviceName, "methodName", methodName)
                    .register(meterRegistry);
            AtomicReference result = new AtomicReference<>();
            timer.record(() -> {
                try {
                    result.set(invoker.invoke(invocation));
                } catch (Exception e) {
                    log.error(e.getMessage(), e);
                }
            });
            return result.get();
        } catch (Exception e) {
            throw e;
        }
    }
}

然后在在 resource的meta-INF/dubbo 文件夹下创建com.alibaba.dubbo.rpc.Filter,在此文件里配置拦截器,比如

dubboRequestTimeFilter=com.demo.DubboRequestTimeFilter

最后启动项目访问http://IP:PORT/actuator/prometheus就可以看到配置的指标信息了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/582781.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号