公开课:云原生监控系统 Prometheus
公开课地址:https://www.shiyanlou.com/live/148
Prometheus 架构
Prometheus Server 组件
Retrieval 数据获取模块
Retrieval 模块是采用Pull的模式拉取度量指标数据
Retrieval 拉取度量数据指标有三种途径
- Job/Exporter: 通过导出器获取对象(节点、服务等)度量指标
- PushGateway: 对于生命周期的数据例如cronjob,脚本等,所以需要让任务接口先推送到网关,然后由Prometheus定期拉取
- Prometheus Server:
Storage TSDB 数据存储模块
Prometheus 内置时序数据库,收集到的数据都会经过内存落地到磁盘
PromQL PromQL数据查询模块
Prometheus 通过PromQL支持强大的查询条件,以供统计计算各种指标
Prometheus 核心概念
数据模型
Prometheus 从根本上存储的所有数据都是时间序列数据(Time Serie Data,简称时序数据)。
时序数据是具有时间戳的数据流,该数据流属于某个度量指标(Metric)和该度量指标下的多个标签(Label)。
除了提供存储功能,Prometheus 还可以利用查询表达式来执行非常灵活和复杂的查询。
- 度量指标(Metric): 监控项名称,例如HTTP请求数,请求耗时等
- 标签(Tag): 通过TAG标识同一个Metric中的数据来自于那些节点或者服务
- 采样值(Sample): 监控项采集到的值,例如请求状态码多少?当前负载多少?等等
- 注解(Annotation):
注解 = 度量指标+标签
,[metric name]{[label name]=[label value], ...}
例如,度量指标为api_http_requests_total
,标签为method="POST"、handler="/messages"
的注解表示如下:api_http_requests_total{method="POST", handler="/messages"}
标签匹配
=
: 完全相等!=
: 不相等=~
: 正则匹配相等!~
: 正则匹配不相等
度量指标
- 计数器(Counter): 只会增加的指标,例如网卡流量,处理请求总数等
- 计量器(Guage): 会上下浮动的指标,例如请求处理耗时,当前负载等
- 直方图(Histogram): !!!还没理解什么意思!!!
- 汇总(Summary): !!!还没理解什么意思!!!
任务和实例
- 任务(Job): 采集任务,一个任务可以包含多个实例,例如采集节点基础性能状态,此时一个任务下面就可以通过定义多个实例采集多台节点性能数据
- 实例(Instance): 节点或者服务
PromQL 查询语法
数据类型
- 瞬时向量(Instant vector):
- 区间向量(Range vector):
- 标量(Scalar):
- 字符串(String):
尚未使用
时序选择器
- 瞬间向量选择器: 只取出一个采样值,例如
http_requests_total{code="200",handler=~"query|static"}
,最终返回的符合条件的时序的最新采样值 - 区间向量选择器: 取出一个范围的采样值,例如
http_requests_total{code="200",handler=~"query|static"}[30s]
,最终返回符合条件时序的30秒内的采样,我这里scrape_interval为5s,所以每隔时序会返回6个采样值,支持的时间单位,s m h d w y
- 偏移修饰器: 默认基准时间都是当前时间,通过offset调整基准时间,例如
http_requests_total{code="200",handler=~"query|static"}[1m] offset 1d
,获取1天前的当前时间,符合标签匹配时序的最近1分钟内采样
操作符
二元操作符
算数类二元操作符
- +
- -
- *
- /
- %
- ^
比较类二元操作符
- ==
- !=
- >
- <
=
- <=
逻辑类二元操作符
- and: 交集
- or: 合集
- unless: 差集
- :
+ - * / ^
- 向量匹配:one-to-one,many-to-one/one-to-many
- 聚合操作符:sum,min,max,avg,count,quantile
- 内置函数:abs(),sqrt(),exp(),In(),ceil(),floor(),round()