云原生技术系列-监控系统Prometheus之列一:基本概念与数据模型

简介

Prometheus 是一个 Metrics 监控系统,与 Kubernetes 同属 CNCF(Cloud Native Computing Foundation),它已经成为炙手可热的 Kubernetes 生态圈中的核心监控系统,越来越多的项目(如Kubernetes 和 Etcd 等 )都提供了对 Prometheus 的原生支持,从侧面体现了社区对它的认可。可以说,Prometheus是一个云原生监控系统,是当前微服务和容器盛行时代下的监控利器。

Prometheus(简称 Prom) 是新一代的监控系统,配置简单却灵活,对容器、微服务等支持良好。本文主要介绍一下 Prometheus 的基础概念。

初识

Prometheus是什么?

  1. 性能不错的时间序列数据库(DB-Engine排行第四)
  2. 最热门的指标监控基础组件

Prometheus解决什么问题?

指标监控的指标采集、存储、查询、聚合和告警;

Prometheus有什么优势?

  1. 强大的生态体系,大部分常见软件都提供有Prometheus客户端
  2. 成熟的项目,是第二个从CNCF毕业的开源项目
  3. 标准的数据格式,标准化项目OpenMetrics是以Prometheus数据格式作为蓝本

主要特性

  • 强大的多维度数据模型:
    • 时间序列数据通过 metric 名和键值对来区分。
    • 所有的 metrics 都可以设置任意的多维标签。
    • 数据模型更随意,不需要刻意设置为以点分隔的字符串。
    • 可以对数据模型进行聚合,切割和切片操作。
    • 支持双精度浮点类型,标签可以设为全 unicode。
  • 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。
  • 易于管理: Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
  • 高效:平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。
  • 使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。
  • 可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端。
  • 可以通过服务发现或者静态配置去获取监控的 targets。
  • 有多种可视化图形界面。
  • 易于伸缩。

Prometheus 核心概念

下面将对 Prometheus 中的数据模型,metric 类型以及 instance 和 job 等概念进行介绍,以便读者在 Prometheus 的配置和使用中可以有一个更好的理解。

数据模型

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

Prometheus 中存储的数据为时间序列,是由 metric 的名字和一系列的标签(键值对)唯一标识的,不同的标签则代表不同的时间序列。

  • metric 名字:该名字应该具有语义,一般用于表示 metric 的功能,例如:http_requests_total, 表示 http 请求的总数。其中,metric 名字由 ASCII 字符,数字,下划线,以及冒号组成,且必须满足正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*。
  • 标签:使同一个时间序列有了不同维度的识别。例如 http_requests_total{method="Get"} 表示所有 http 请求中的 Get 请求。当 method="post" 时,则为新的一个 metric。标签中的键由 ASCII 字符,数字,以及下划线组成,且必须满足正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*。
  • 样本:实际的时间序列,每个序列包括一个 float64 的值和一个毫秒级的时间戳。

格式:

<metric name>{<label name>=<label value>, …}

,例如:

http_requests_total{method="POST",endpoint="/api/tracks"}

四种Metric类型

Prometheus 客户端库主要提供四种主要的 metric 类型:

计数器(Counter)

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

例如,查询 http_requests_total{method="get", job="Prometheus", handler="query"}返回 8,10 秒后,再次查询,则返回 14。

计量器(Gauge)

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

例如:go_goroutines{instance="172.17.0.2", job="Prometheus"}返回值 147,10 秒后返回 124。

直方图(Histogram)

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

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

汇总(Summary)

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

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

实例(Instance)和任务(Job)

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

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

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

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

  • job: 抓取所属任务。
  • instance: 抓取来源实例

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

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

#采样值为本次抓取消耗时间
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>"}

参考资料

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

推荐阅读更多精彩内容