Prometheus 四种数据类型

Prometheus的Client Library提供度量的四种基本类型包括:Counter,Gauge,Histogram,Summary。

当访问Exporter的/metrics API地址时我们可以看到类似于一下返回值,其中HELP用于说明度量类型,TYPE用于数据类型说明。

# HELP obs_internetrecv 公网流出流量
# TYPE obs_internetrecv gauge
obs_internetrecv{reskey="duoyun-buck-lzc-0830-1",restype="obs",platform="apsara",instanceUuid="duoyun-buck-lzc-0830-1",cloudTypeId="666677",platformAuthId="740026",orgId="767",} 0.0

四种数据类型

1.Counter计数器

Counter类型,Counter类型好比计数器,只增不减(除非系统发生了重置),用于统计类似于:CPU运行时间,API访问总次数,异常发生次数等等场景。这些指标的特点就是增加不减少。

public class PrometheusMetricsInterceptor extends HandlerInterceptorAdapter {
        
        static final Counter requestCounter = Counter.build()
                .name("io_namespace_http_requests_total")
                .labelNames("path", "method", "code") 
                .help("Total requests.").register();


        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            String requestURI = request.getRequestURI();
            String method = request.getMethod();
            int status = response.getStatus();

            requestCounter.labels(requestURI, method, String.valueOf(status)).inc();
            //调用inc()函数,每次请求发生时计数+1

            super.afterCompletion(request, response, handler, ex);

        }

    }
2.Gauge(仪表盘类型)(天穹目前主要用这个)

Gauge是可增可减的指标类,可以用于反应当前应用的状态。比如在监控实例时,主机当前的内存大小,可用内存大小。

public class PrometheusMetricsInterceptor extends HandlerInterceptorAdapter {

        static final Gauge inprogressRequests = Gauge.build()
                .name("io_namespace_http_inprogress_requests").labelNames("path", "method", "code")
                .help("Inprogress requests.").register();


        // 计数器+1
        public boolean inc(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            String requestURI = request.getRequestURI();
            String method = request.getMethod();
            int status = response.getStatus();
            inprogressRequests.labels(requestURI, method, String.valueOf(status)).inc();
            return super.preHandle(request, response, handler);

        }

        // 计数器-1
        public void dec(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            String requestURI = request.getRequestURI();
            String method = request.getMethod();
            int status = response.getStatus();
            inprogressRequests.labels(requestURI, method, String.valueOf(status)).dec();

            super.afterCompletion(request, response, handler, ex);

        }

        // 设置为零
        public void setZero(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            String requestURI = request.getRequestURI();
            String method = request.getMethod();
            int status = response.getStatus();
            inprogressRequests.labels(requestURI, method, String.valueOf(status)).set(0);
            super.afterCompletion(request, response, handler, ex);

        }

    }
3.Histogram(直方图类型)(还需要再理解)

Histogram 由以下组成

_bucket{le=""},

_bucket{le="+Inf"},

_sum,

_count

主要用于表示一段时间范围内对数据进行采样(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,通常它采集的数据展示为直方图。

4.Summary(摘要类型)(还需要再理解)

与Histogram类型类似,摘要用于表示一段时间内的数据采样的结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而非通过区间来计算(Histogram的分位数需要通过histogram_quantile(φfloat,b instant-vector)函数计算得到)。因此,对于分位数的计算,Summary在通过PromQL进行查询时有更好的性能表现,而Histogram则会消耗更多的资源。反之,对于客户端而言,Histogram消耗的资源更少。在选择这两种方式时,用户应该根据自己的实际场景选择。

Histogram是在服务端计算的,Summary是在客户端计算的。


Histogram和Summary主用用于统计和分析样本的分布情况。

Histogram,Summary代码使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值