Prometheus之sum_over_time函数
Posted N!CE波
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prometheus之sum_over_time函数相关的知识,希望对你有一定的参考价值。
一、sum_over_time
sum_over_time
是 Prometheus 中用于计算指定时间段内时间序列数据的和的函数。它可以对单个时间序列或多个时间序列进行操作,并返回指定时间范围内时间序列值的总和。
sum_over_time
函数的语法如下:
sum_over_time(range vector-expression)
其中,range
指定了要计算的时间范围,vector-expression
是一个查询表达式,它返回一个或多个时间序列。range
参数可以是一个持续时间字符串,也可以是一个时间戳。
例如,以下查询将返回 node_memory_Active_bytes
指标在过去 5 分钟内的值总和:
sum_over_time(node_memory_Active_bytes[5m])
二、 sum 和 by 关键字结合 sum_over_time 函数
如果您想要按照某个标签值对多个时间序列进行聚合,可以使用 sum
和 by
关键字结合 sum_over_time
函数。例如,以下查询将返回 node_memory_Active_bytes
指标在过去 5 分钟内按 job
标签的值进行聚合的总和:
sum by (job) (sum_over_time(node_memory_Active_bytes[5m]))
除了 sum
函数之外,avg
、min
、max
等聚合函数也可以与 sum_over_time
函数一起使用,以计算指定时间段内的平均值、最小值、最大值等。
三、rate函数结合sum_over_time
sum_over_time
函数还可以用于计算指定时间范围内的时间序列数据的增量或变化量,这可以通过使用 rate
函数来实现。
rate
函数计算时间序列的斜率,即时间序列数据的变化率,单位是每秒。因此,rate
函数的返回值表示指定时间范围内时间序列数据的平均增量。将 sum_over_time
和 rate
函数结合使用,可以计算指定时间范围内时间序列数据的总增量或变化量。
以下是一个计算过去 1 分钟内 http_requests_total
指标的请求数的平均速率的示例:
rate(sum_over_time(http_requests_total[1m]))
rate
函数的参数可以是一个时间序列向量表达式,也可以是一个单个时间序列。在上述示例中,sum_over_time(http_requests_total[1m])
返回一个向量表达式,表示在过去 1 分钟内 http_requests_total
指标的总和。rate
函数计算这个时间序列的增量,即在过去 1 分钟内 http_requests_total
指标值的平均增量。
注意:由于 rate
函数的计算方式是通过近似时间序列的斜率来计算的,因此它对数据中的任何峰值和谷值都很敏感。在计算变化量时,请谨慎使用 rate
函数,并确保您的数据具有稳定的趋势,以便获得准确的结果。
官方文档:https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time
Prometheus监控之简介
一、Prometheus架构
1、Prometheus是什么
Prometheus 起初是 SoundCloud 创建的一个开源系统监控报警工具。现在 Prometheus 是一个独立的开源项目,独立于任何一个公司。
Prometheus是一个TSDB(时序数据库),
时序数据库可以理解为一个经过优化,然后用来出来时间序列数据的软件, 并且数据中的数组是由时间进行索引的
2、特性(优点)
这些特性是作为TSDB的特性
主要特性包括:
通过指标名(metric name)和 KV 结构,使用时序数据(time series data)表达的多维度数据模型
也就是说其数据格式类似与 “时间+key+value”
使用PromQL语句: 一种灵活的查询语言,能够更好的利用维度
对分布式存储没有依赖;单服务器节点即可自治
通过使用基于 HTTP 的拉模式 (pull model) 进行时序数据采集
通过中间网关 ( gateway) 以支持推送时序数据
通过服务发现或静态配置,发现监控目标(targets)
支持多图和仪表盘模, 比如Grafana等
二、四大组件
Prometheus 生态由多组件构成,其中大部分都是可选配置:
1、Prometheus Server
是Prometheus组件中的核心部分, 负责实现随监控数据的获取,存储和查询
Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获
取数据。
其次Prometheus Sever需要对采集到的数据进行存储,
Prometheus Server本身就是一个实时数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。
Prometheus Server 对外提供了自定义的PromQL,实现对数据的查询以及分析。
另外Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据。·
2、Push Gateway
为应对部分push场景提供的插件,这部分监控数据先推送到 Push Gateway 上,然后再由 Prometheus Server端拉取
用于存在时间较短,可能在 Prometheus 来拉取之前就消失了的 jobs;, 可能在Prometheus来pull之前就消失了.
这次jobs可以直接向Prometheus中间网关推送它们的metrics。
这种方式主要用于服务层面的metrics,对于机器层面的metrices,需要使用node exporter。(PushGatway类似zabbix proxy)
3、XXX Exporters
Exporters(探针) 是Prometheus的一类数据采集组件的总称。负责从目标处搜集数据,并将其转化为Prometheus支持的格式。它并不向中央
服务器发送数据,而是等待中央服务器主动前来抓取。
Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,
将其转化为Prometheus支持的格式,
Prometheus Server通过访问该Exporter提供的Endpoint端点,即可以获取到需要采集的监控数据。可以将Exporter分为2类:
直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向
Prometheus暴露监控数据的端点。
间接采集:原有监控目标并不直接支持Prometheus,因此需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。如
:Mysql Exporter,JMX Exporter,Consul Exporter等。
4、Alertmanager
Prometheus server 主要负责根据基于PromQL的告警规则分析数据,如果满足PromQL定义的规则,则会产生一条告警,并发送告警信息到
Alertmanager,Alertmanager则是根据配置处理告警信息并发送。常见的接收方式有:电子邮件,webhook,微信等。
三、Prometheus原理
Prometheus的基本原理是:
通过HTTP协议周期性抓取被监控组件的状态,
任意组件只要提供对应的HTTP接口就可以接入监控。
不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,
比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter。
四、Prometheus工作流程
第一步: Prometheus server定期从配置好的jobs或者exporters,或者从Pushgateway,或者从其他的Prometheus server中拉metrics。
默认使用的拉取方式是pull,也可以使用pushgateway提供的push方式获取各个监控节点的数据。
第二步: Prometheus server在本地存储收集到的 metrics,并运行已定义好的alert.rules,通过一定规则进行清理和整理数据,并把得
到的结果存储到新的时间序列中。记录新的时间序列或者向Alertmanager推送警报。
获取到的数据存入TSDB,一款时序型数据库。
第三步: Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,
例如Grafana、自带的Promdash以及自身提供的模版引擎等等。
Prometheus还提供HTTPAPI的查询方式,自定义所需要的输出。
以上是关于Prometheus之sum_over_time函数的主要内容,如果未能解决你的问题,请参考以下文章
Prometheus学习系列之Prometheus 查询说明