Prometheus架构

Prometheus(简称Prom)前身是SoundCloud的告警工具包,现已演化成一个独立的开源监控系统。属于Kurberntes所在的Cloud Native Computing Foundation。

主要特性

多维度数据模型

时间序列数据通过 metric 名和键值对来区分。

所有的 metrics 都可以设置任意的多维标签。

数据模型更随意,不需要刻意设置为以点分隔的字符串。

可以对数据模型进行聚合,切割和切片操作。

支持双精度浮点类型,标签可以设为全 unicode。

灵活的查询语言:在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。

不依赖任何分布式存储

通过拉取方式采集数据,或者通过中间网关推送方式采集数据

通过服务发现或者静态配置来发现监控目标

支持多种图形界面展示方式

架构

下图描述了 Prometheus 的整体架构和其生态内。一些常用组件:

Prometheus Server:用于收集和存储时间序列数据。

Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。

Push Gateway:主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。

Exporters:用于暴露已有的第三方服务的 metrics 给 Prometheus。

Alertmanager:从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。

Prometheus 架构图

Prometheus以其Server为核心,用于收集和存储时间序列数据。Prometheus Server 从监控目标中拉取数据,或通过中间网关间接的把监控目标的监控数据存储到本地HDD/SSD中。

用户接口界面通过各种UI使用PromQL查询语言从Server获取数据。

一旦Server检测到异常,会推送告警到AlertManager,由告警管理负责去通知相关方。

Prometheus 核心概念

数据模型

Prometheus 从根本上存储的所有数据都是时间序列数据(Time Serie Data,简称时序数据)。时序数据是具有时间戳的数据流,该数据流属于某个度量指标(Metric)和该度量指标下的多个标签(Label)。除了提供存储功能,Prometheus 还可以利用查询表达式来执行非常灵活和复杂的查询。

度量指标和标签

每个时间序列(Time Serie,简称时序)由度量指标和一组标签键值对唯一确定。

度量指标名称描述了被监控系统的某个测量特征(比如 http_requests_total 表示 http 请求总数)。度量指标名称由 ASCII 字母、数字、下划线和冒号组成,须匹配正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*。

标签开启了 Prometheus 的多维数据模型。对于同一个度量指标,不同标签值组合会形成特定维度的时序。Prometheus 的查询语言可以通过度量指标和标签对时序数据进行过滤和聚合。改变任何度量指标上的任何标签值,都会形成新的时序。标签名称可以包含 ASCII 字母、数字和下划线,须匹配正则表达式[a-zA-Z_][a-zA-Z0-9_]*,带有_下划线的标签名称保留为内部使用。标签值可以包含任意 Unicode 字符,包括中文

采样值(Sample)

时序数据其实就是一系列采样值。每个采样值包括2部分:

一个 64 位的浮点数值

一个精确到毫秒的时间戳

注解(Notation)

一个注解由一个度量指标和一组标签键值对构成。形式如下:

[metric name]{[label name]=[labelvalue],...}

例如,度量指标为api_http_requests_total,标签为method="POST"、handler="/messages"的注解表示如下:

api_http_requests_total{method="POST", handler="/messages"}

度量指标类型

Prometheus 里的度量指标有以下几种类型。

1. 计数器(Counter)

计数器是一种累计型的度量指标,它是一个只能递增的数值。计数器主要用于统计类似于服务请求数、任务完成数和错误出现次数这样的数据。

2. 计量器(Gauge)

计量器表示一个既可增又可减的度量指标值。计量器主要用于测量类似于温度、内存使用量这样的瞬时数据。

3. 直方图(Histogram)

直方图对观察结果(通常是请求持续时间或者响应大小这样的数据)进行采样,并在可配置的桶中对其进行统计。有以下几种方式来产生直方图(假设度量指标为<basename>):

按桶计数,相当于<basename>_bucket{le="<upper inclusive bound>"}

采样值总和,相当于<basename>_sum

采样值总数,相当于<basename>_count,也等同于把所有采样值放到一个桶里来计数<basename>_bucket{le="+Inf"}

Histogram可以理解为柱状图,典型的应用如:请求持续时间,响应大小。可以对观察结果采样,分组及统计。

例如,查询 http_request_duration_microseconds_sum{job="Prometheus", handler="query"} 时,返回结果如下:

4. 汇总(Summary)

类似于直方图,汇总也对观察结果进行采样。除了可以统计采样值总和和总数,它还能够按分位数统计。有以下几种方式来产生汇总(假设度量指标为<basename>):

按分位数,也就是采样值小于该分位数的个数占总数的比例小于 φ,相当于<basename>{quantile="<φ>"}

采样值总和,相当于<basename>_sum

采样值总数,相当于<basename>_count

5. 任务(Job)和实例(Instance)

在 Prometheus 里,可以从中抓取采样值的端点称为实例,为了性能扩展而复制出来的多个这样的实例形成了一个任务。

例如下面的 api-server 任务有四个相同的实例:

job:api-serverinstance 1:1.2.3.4:5670instance 2:1.2.3.4:5671instance 3:5.6.7.8:5670instance 4:5.6.7.8:5671

Prometheus 抓取完采样值后,会自动给采样值添加下面的标签和值:

job: 抓取所属任务。

instance: 抓取来源实例

另外每次抓取时,Prometheus 还会自动在以下时序里插入采样值:

up{job="[job-name]", instance="instance-id"}:采样值为 1 表示实例健康,否则为不健康

scrape_duration_seconds{job="[job-name]", instance="[instance-id]"}:采样值为本次抓取消耗时间

scrape_samples_post_metric_relabeling{job="<job-name>", instance="<instance-id>"}:采样值为重新打标签后的采样值个数

scrape_samples_scraped{job="<job-name>", instance="<instance-id>"}:采样值为本次抓取到的采样值个数

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容