Prometheus简介
Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用Prometheus,该项目拥有一个非常活跃的开发人员和用户社区。它现在是一个独立的开源项目。Prometheus于2016年加入谷歌主导的顶级开源社区云原生计算基金会(CNCF),成为第二个顶级托管项目。第一是大名鼎鼎的k8s。prometheus是属于下一代监控。可用来监控操作系统、应用、容器等。
2
特征
普罗米修斯的主要特点是:
3
常用组件
Prometheus生态系统由多个组件组成,其中许多组件是可选的,主要有:
4
架构
此图说明了Prometheus的体系结构及其一些生态系统组件:
Prometheus直接或者间接拉取应用的监控指标,汇总并转化成自有的时间序列数据模型或者生成告警信息。提供api给具有可视化的一些UI展现层。
5
适用场景
Prometheus在记录时间序列的数据方面表现非常好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。它的搭建过程对硬件和服务没有很强的依赖关系。
Prometheus的价值在于可靠性,甚至在很恶劣的环境下,你都可以随时访问它和查看系统服务各种指标的统计信息。如果你对统计数据需要百分之百的精确,那么Prometheus不是一个很好的选择。
6
即时向量选择器
Prometheus存储的是时序数据, 即按照相同时序(相同的名字和标签),以时间维度存储连续的数据的集合。时间序列由metric名称和label组成,因为随着时间而改变,所以时序数据都是向量。
综上所述,可以归纳出即时向量选择器通用pattern为:
[metric name]{[label name]=[label value], ...}
7
匹配运算符
上面提到label是一个kv匹配表达式。并不局限于 `=` 匹配。以下是label的匹配运算符:
如下例子:
http_requests_total{environment=~"prod|testing",method!="GET"}
用来匹配生产或者测试环境,而且不是get请求的总请求数。
8
标题
范围向量选择器与即时向量选择器工作原理相同,只不过返回当前时间以前的一系列采样。时间范围由附加在向量选择器尾部的[]指定,具体的值由数字和单位组成,时间单位包括:
例如,返回5分钟内metric名为http_requests_total、job是prometheus的全部时间序列:
http_requests_total{job="prometheus"}[5m]
也就是如果我们对即时向量要做范围度量,可以在其后用[rangTime] 来定义。
9
偏移修改器
offset修饰符允许在单个即时向量或范围向量查询中设置相对于当前时间的时间偏移。下面的表达式返回http_requests_total5分钟前的值:
http_requests_total offset 5m
请注意语法上offset修饰符应紧跟在selector后面。
10
内置函数
内置函数很多,说几个使用过的,其他函数可参考 官方网站 。
函数 | 功能 |
---|---|
rate | 计算每秒平均值,仅适用于Counter,例如统计QPS |
sum | 求和计算 |
abs | 求绝对值 |
11
时序类型
Prometheus的时序数据分为 Counter, Gauge, Histogram, Summary 四种类型:
1. <basename>_bucket 不同bucket下的观测值的累加数量
2. <basename>_sum 观测值的总和
3. <basename>_count 观测值的数量
12
注意事项