微服务监控和报警(四)-自定义metrics指标监控

1、Metrics类型

prometheus中定义了四种metrics类型:

1.1、Counter:只增不减的计数器,其值只能在重新启动时递增或重置为零。例如,可以使用计数器表示已服务的请求数、已完成的任务数或错误数。

1.2、Gauge:是一种度量,它表示一个可以任意上下移动的数值。例如,温度或当前内存使用量。

1.3、Histogram:直方图对观察结果(通常是请求持续时间或响应大小)进行采样,并在可配置的存储桶中对其进行计数。它还提供了所有观测值的总和。

1.4、Summary:与Histogram类似,一个摘要采样观察(通常是请求持续时间和响应大小等)。它还提供观测值的总数和所有观测值的总和,同时计算滑动时间窗口上的可配置分位数。

2、代码示例

2.1、定义指标监控

/**
 * 监控指标设置
 *
 * @author caofanqi
 * @date 2020/2/15 12:16
 */
@Configuration
public class PrometheusMetricsConfig {

    @Resource
    private PrometheusMeterRegistry prometheusMeterRegistry;

    /**
     *  用于统计请求总数
     */
    @Bean
    public Counter requestCounter() {
        return  Counter.build().name("order_requests_total").help("请求总数").labelNames("service","method","code")
                .register(prometheusMeterRegistry.getPrometheusRegistry());
    }

    /**
     *  用于统计TP50,TP90
     */
    @Bean
    public Summary requestLatency(){
        return Summary.build()
                .quantile(0.5, 0.05)
                .quantile(0.9, 0.01)
                .name("order_request_latency").help("请求延迟").labelNames("service","method","code")
                .register(prometheusMeterRegistry.getPrometheusRegistry());
    }

}

2.2、通过拦截器对指标进行处理

/**
 * 监控指标拦截器
 *
 * @author caofanqi
 * @date 2020/2/15 12:22
 */
@Component
public class PrometheusMetricsInterceptor extends HandlerInterceptorAdapter {

    @Resource
    private Counter requestCounter;

    @Resource
    private Summary requestLatency;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        request.setAttribute("start",System.currentTimeMillis());
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                @Nullable Exception ex) throws Exception {
        requestCounter.labels(request.getRequestURI(),request.getMethod(),String.valueOf(response.getStatus())).inc();

        long duration = System.currentTimeMillis() - (Long) request.getAttribute("start");

        requestLatency.labels(request.getRequestURI(),request.getMethod(),String.valueOf(response.getStatus())).observe(duration);
    }
}

2.3、注册拦截器

/**
 * webmvc配置类
 *
 * @author caofanqi
 * @date 2020/2/15 12:27
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Resource
    private PrometheusMetricsInterceptor prometheusMetricsInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(prometheusMetricsInterceptor).addPathPatterns("/**");
    }
}

2.4、对创建订单方法进行随机休眠

2.5、启动项目,使用Test类中的方法,不断发起调用,通过/actuator/prometheus接口,已经为Prometheus提供监控数据了。

3、Grafana配置控制台

对需要的指标进行设置相应的看板即可。

项目源码:https://github.com/caofanqi/study-security/tree/dev-prometheus3

原文地址:https://www.cnblogs.com/caofanqi/p/12312096.html

时间: 2024-09-29 10:13:04

微服务监控和报警(四)-自定义metrics指标监控的相关文章

使用云监控实现GPU云服务器的GPU监控和报警(下)-云监控插件监控

摘要: 目录 使用云监控实现GPU云服务器的GPU监控和报警(上) - 自定义监控 使用云监控实现GPU云服务器的GPU监控和报警(下)-云监控插件监控 1 背景 上一篇文章我们介绍了如何使用阿里云云监控服务提供的自定义监控功能,利用自定义监控提供的API或者SDK,通过自定义脚本可以将GP. 1 背景上一篇文章我们介绍了如何使用阿里云云监控服务提供的自定义监控功能,利用自定义监控提供的API或者SDK,通过自定义脚本可以将GPU云主机内采集的GPU数据上报,在云监控控制台上添加相应的GPU监控

从 0 开始的微服务架构:(四)如何保障微服务架构下的数据一致性

虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去.各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构.就是没有一个做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务架构的系列.所以,我们邀请青柳云的苏槐与 InfoQ 一起共建微服务架构专题"Re:从 0 开始

.Net Core 商城微服务项目系列(四):ELK

毫无疑问,项目里日志是必不可少的,在众多日志框架里ELK可以说是最好的选择之一,对于微服务项目来说也是一样. 之前写过关于ELK搭建的文章,所以这篇也就不再介绍了,本篇将会使用NLog搭配ElasticSearch和Kibana构建日志框架,本来是有Logstash的,但是接入Logstash后日志总是发送不成功,所以本篇将暂时不使用Logstash,等后面找到具体什么问题后再进行修改,最终整体的日志架构会是NLog+ELK+Kafka. 运行ELK有两种方式,一种是分别单独运行ElasticS

微服务迁移记(四):公共层、接口层和实现层搭建

公共层Nodule:zyproject-common,通用返回体.状态码枚举.自定义分页类.本来计划Entity放在common里的,后来想了下,还是放到接口层,反正其他层也都会引用接口层. 接口独立成一个Module:zyproject-api-service,定义访问接口,供实现类.表现层调用,其中Feign接口直接继续接口层,可以避免很多冗余代码 实现层Module:zyproject-api-service-impl,与数据库打交道,实现接口. 一.公共层 通用返回体是从网上抄的,Res

SpingCloud微服务架构学习(二)之Actuator监控

我们那我们之前编写的服务提供者为例,为项目添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 然后启动项目,访问:http://localhost:8080/actuator/health:返回结果: {"stat

微服务框架——SpringCloud(四)

1.Spring Cloud Config 分布式配置 a.Config服务器 ①新建springboot项目,依赖选择Config Server ②pom文件关键依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</ve

Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转

原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过:如果单体架构都搞不好,就别搞微服务架构.乍一看,这句很有道理,后来发现这句话是不太对的,因为微服务架构的目的就是为了降低系统的复杂性,所以 微服务架构应该比单体架构更简单.更好实践才对. 这篇文章,我们就分享一下如何搭建一个 简单模式 的微服务架构. 什么是微服务架构的简单模式? 相对于大型互联网

Spring Cloud微服务安全实战_4-1_微服务网关安全_概述&amp;微服务安全面临的挑战

  第四章  网关安全 这一章从简单的API的场景过渡到复杂的微服务的场景 4.1 概述 微服务安全面临的挑战:介绍中小企业的一个微服务架构,相比第三章的单体应用的简单的API所面临的哪些挑战 OAuth2协议与微服务安全:介绍OAuth2中的各个角色,以及相互之间的关系,介绍具体的代码实现 微服务网关安全:搭建网关,安全中心,两个微服务,怎么将安全从微服务中解耦出来放到网关上,与OAuth协议联系起来解决微服务安全面临的新的挑战. 4.2 微服务安全面临的挑战  更多的入口点,更高的安全风险

Docker学习总结(7)——云端基于Docker的微服务与持续交付实践

本文根据[2016 全球运维大会?深圳站]现场演讲嘉宾分享内容整理而成 讲师简介 易立 毕业于北京大学,获得学士学位和硕士学位:目前负责阿里云容器技术相关的产品的研发工作. 加入阿里之前,曾在IBM中国开发中心工作14年,担任资深技术专员,负责IBM企业平台云产品线PureApplication System的研发工作:还负责和参与了一系列IBM在Web 2.0,SOA中间件的研发和创新,也曾为全球客户提供SOA技术咨询和项目实施. 日程 大家好,我演讲的主题是<云端基于Docker的微服务与持