prometheus HISTOGRAMS AND SUMMARIES

作者: admin 分类: prometheus 发布时间: 2017-12-19 15:51 ė 6 没有评论

代码理解HISTOGRAMS 概念

# coding: utf-8
from prometheus_client import start_http_server
from prometheus_client import Counter,Summary,Histogram
from threading import Thread
import random
from SocketServer import ThreadingMixIn
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

#
c = Counter('api_count', 'Description of counter')
h1 = Histogram('Histogram_request_api1_seconds', 'Description of histogram',buckets=(1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 90))
h2 = Histogram('Histogram_request_api2_seconds', 'Description of histogram',buckets=(1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 90))
#正常的业务逻辑
class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        #统计累加计数
        c.inc()
        r1 = random.randint(3)
        r2 = random.randint(11)
        #返回h1接口请求时间
        h1.observe(r1)
        #返回h2接口请求时间
        h2.observe(r2)
        self.send_response(200)
        self.send_header("Content-type", "text/plain")
        self.end_headers()
        self.wfile.write("hello")




class ThreadingHTTPServer(ThreadingMixIn, HTTPServer):
    pass

def serve_on_port(port):
    server = ThreadingHTTPServer(("127.0.0.1",port), Handler)
    server.serve_forever()

#启动一个现场用来做业务端口
Thread(target=serve_on_port, args=[8019]).start()

#启动监控端口
start_http_server(10095)

代码中buckets=(.005, .01, .025, .05, .075, .1, .25, .5, .75, 1.0, 2.5, 5.0, 7.5, 10.0) 是产生的存储桶,桶中是基准值。0.05到.01是步长。当代码中h.observe(3) 存储桶,由于3的数字小于5.0,7.5,10 因此会存入到2.5以上的桶中。如果传入的值都大于所有桶的基准值,将存入{le=”+Inf”}

关于他的报警策略,官方文档都解释过了。大家只要理解什么是百分位的概念就很容易的设置报警,关于画图,我用得是grafana 的heatmap

下面是转载

 

Samples(样本)
样本形成了实际的时间序列数据。每一个样本包括:
– 一个 64 位的浮点值
– 一个精确到毫秒级的时间戳
一个样本数据集是针对一个指定的时间序列在一定时间范围的数据收集。这个时间序列是由 {=, …}

Notation(符号)
表示一个度量指标和一组键值对标签,需要使用以下符号:

[metric name]{[label name]=[label value], …}

例如,度量指标名称是api_http_requests_total, 标签为method=”POST”, handler=”/messages” 的示例如下所示:

api_http_requests_total{method=“POST”, handler=“/messages”}

这些命名和 OpenTSDB 使用方法是一样的

Histogram
Histogram 可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供 count 和 sum 全部值的功能。

例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值

440956-20161223000335589-768718437

Histogram对观察结果(通常是请求持续时间或者响应大小)进行采样,并在可配置的桶中对其进行统计。它还提供所有观察值的总和

在一次数据采样过程中,直方图会提供以下数据(这些数据以开头)

观察桶累计计数器,命名为_bucket={le=””}
观察值的总和,命名为<basename
_sum

观察的总次数_count(等于_bucket{le=”+Inf”})
对Histogram的理解:Prometheus会针对度量指标进行histogram统计,生成三个度量指标数据,即_bucket, _sum, 和_count。对于_bucket: 会有三个数据输入,一个是基准值,一个是每次增长的步长,一个是横坐标的长度。

举一个具体的例子,统计Http请求的处理延迟时间,延迟的基准值为300ms,步长为100ms,横坐标的值为5,则会生成5个桶。这5个桶分别代表延迟低于300ms、400ms、500ms、600ms、700ms的请求次数。此外还会生成http延迟的总和

20.pic

此外还有一个桶应该为_bucket{le=”+Inf”},即Http延迟数低于无穷大的请求次数,等于_count

histogram_quantile这个函数经常用于计算histogram的百分比数目,比如我们想知道90%的http请求低于某个延迟数,可以使用histogram_quantile(0.9, histogram)

Summary(总结)

类似histogram,summary观察样本值(使用场景类似:请求持续时间和响应大小)。它也提供观察的总计数和所有观察值的总和。同时它可以在滑动时间窗口上计算可配置的分位数。

在一次数据采样过程中,Summary会提供以下数据(这些数据以开头)

观察时间的φ-quantiles (0 ≤ φ ≤ 1), 显示为[basename]{分位数=”[φ]”}
[basename]_sum, 是指所有观察值的总和
[basename]_count, 是指已观察到的事件计数值
summary默认的分位数为0.5、0.9、0.99,用户可以手动指定分位数的值
4.pic

即表示一共采集了1000个样本,这些样本总和为29969.50000000001,其中50%的样本值低于31.1,90%的样本值低于41.3,99%的样本值低于41.9

本文出自 小Q,转载时请注明出处及相应链接。

本文永久链接: http://www.linuxqq.com/archives/1723.html

0
更多
Ɣ回顶部