Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用Prometheus,该项目拥有一个很是活跃的开发人员和用户社区。它如今是一个独立的开源项目。Prometheus于2016年加入谷歌主导的顶级开源社区云原生计算基金会(CNCF),成为第二个顶级托管项目。第一是大名鼎鼎的k8s。 prometheus是属于下一代监控。可用来监控应用、容器、JVM、nginx 等nginx
普罗米修斯的主要特色是:正则表达式
Prometheus生态系统由多个组件组成,其中许多组件是可选的,主要有:数据库
此图说明了Prometheus的体系结构及其一些生态系统组件: api
Prometheus直接或者间接拉取应用的监控指标,汇总并转化成自有的时间序列数据模型或者生成告警信息。提供api给具备可视化的一些UI展示层。缓存
Prometheus在记录时间序列的数据方面表现很是好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于如今流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是很是的强大。Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可使你快速定位和诊断问题。它的搭建过程对硬件和服务没有很强的依赖关系。
Prometheus的价值在于可靠性,甚至在很恶劣的环境下,你均可以随时访问它和查看系统服务各类指标的统计信息。 若是你对统计数据须要百分之百的精确,那么Prometheus不是一个很好的选择。服务器
Prometheus存储的是时序数据, 即按照相同时序(相同的名字和标签),以时间维度存储连续的数据的集合。时间序列由metric名称和label组成,由于随着时间而改变,因此时序数据都是向量。架构
[a-zA-Z_:][a-zA-Z0-9_:]*
, 其名字应该具备语义化,通常表示一个能够度量的指标。假如咱们来度量http请求的总数,咱们能够用http_requests_total
来表示。http_requests_total
,若是咱们须要监控来自应用名称为myapp
的应用时,咱们就能够这样来过滤出咱们想要的数据:http_requests_total{ appliaction="myapp",}
。若是有多个label用逗号隔开并以逗号结尾。app
综上所述,能够概括出即时向量选择器通用pattern为:[metric name]{[label name]=[label value], ...}
函数
上面提到label是一个kv匹配表达式。并不局限于 =
匹配。 如下是label的匹配运算符:微服务
以下例子:
http_requests_total{environment=~"prod|testing",method!="GET"}
用来匹配生产或者测试环境,并且不是get请求的总请求数。
范围向量选择器与即时向量选择器工做原理相同,只不过返回当前时间之前的一系列采样。时间范围由附加在向量选择器尾部的[]指定,具体的值由数字和单位组成,时间单位包括:
例如,返回5分钟内metric名为http_requests_total、job是prometheus的所有时间序列:
http_requests_total{job="prometheus"}[5m]
也就是若是咱们对即时向量要作范围度量,能够在其后用[rangTime] 来定义。
offset修饰符容许在单个即时向量或范围向量查询中设置相对于当前时间的时间偏移。下面的表达式返回http_requests_total5分钟前的值:
http_requests_total offset 5m
请注意语法上offset修饰符应紧跟在selector后面。
函数
内置函数不少,说几个使用过的,其余函数可参考https://prometheus.io/docs/pr...
函数 | 功能 |
---|---|
rate | 计算每秒平均值,仅适用于Counter,例如统计QPS |
sum | 计算求和 |
histogram_quantile | 计算分位值 |
Prometheus的时序数据分为 Counter, Gauge, Histogram, Summary 四种类型:
Histogram: 采样观测值,可进行分位计算和数据聚合,计算在server端完成。一个名为<basename>的metric,其histogram有3个固定的时间序列
关注公众号:码农小胖哥 获取更多资讯