龙岗网站建设技术,wordpress左右两栏,建设部科技中心网站,东城网站建设大家好#xff0c;我是蓝胖子#xff0c;提到监控指标#xff0c;不得不说prometheus#xff0c;今天这篇文章我会对prometheus 的架构设计#xff0c;promql表达式原理和监控图表的绘图原理进行详细的解释。来让大家对prometheus的理解更加深刻。
架构设计
先来看看我是蓝胖子提到监控指标不得不说prometheus今天这篇文章我会对prometheus 的架构设计promql表达式原理和监控图表的绘图原理进行详细的解释。来让大家对prometheus的理解更加深刻。
架构设计
先来看看prometheus的架构设计明白指标的采集方式存储方式查询方式。
指标采集方式
指标的采集方式有两种推(push)和拉(pull)。
prometheus提供了各种exporter暴露了指标路由prometheus server可以从指标路由获取该exporter的指标。这边是拉模式。
推送模式是进程主动将指标推送给prometheus服务器但是在架构设计上并不是直接推送的如下是prometheus官网的架构图。推送的指标是推送给了pushgateway然后prometheus server 从推送网关上面拉取指标信息。像短时定时任务我们可以采用推送模式推送定时任务相关的指标。 存储方式
prometheus 对于指标的存储也是分为了两种本地和远程。
prometheus内部提供了TSDB作为对时序数据的存储同时它也提供了远程写接口能够将数据写入远端服务器例如clickhouseinfluxdb等。
如果本地存储已经不能满足你的需求那就用remote write吧选用聚合性能更加的clickhouse或其他列式数据库。
查询方式
prometheus 查询方式除了读取本地的TSDB数据库也可以配置remote read远程读这样能直接从远端读取时序数据。
远程读写的方式相当于prometheus帮助我们对接了远程存储器的存储和查询协议而我们只用和prometheus打交通即可。
promql 表达式原理
接着介绍下使用prometheus 时用到的promql语句我们通过promql语句从prometheus中对指标进行查询和聚合。
在promql表达式中有四种数据类型
Instant vector - 瞬时向量指的是有相同时间戳的时间序列因为在同一时刻会有多个指标的样本值产生所以这里时间序列是多个。Range vector - 范围向量和瞬时向量不同这里的时间序列筛选的范围不再是单个的时间戳而是一个时间范围指代的是在某个时间范围内的时间序列。Scalar - 数值类型浮点型String - 字符串类型
我们来看下prometheus 中对函数的描述来更加形象化的理解这几张表达式的数据类型。
floor()
floor(v instant-vector) rounds the sample values of all elements in v down to the nearest integer.
可以看到floor 的参数要求传递的是瞬时向量接着对于传递的瞬时向量中的每个指标都会执行floor 向下取最接近的整数 这样的逻辑。floor函数返回的结果是瞬时向量也就是相同时间戳每个时间序列会有一个向下取整后的value值。
rate()
rate(v range-vector) calculates the per-second average rate of increase of the time series in the range vector.
再来看下对rate函数的描述rate函数要求传递的参数是范围向量在promql语句中范围向量的写法是在指标后跟上[]例如 http_requests_total{job“api-server”}[5m]代表指标名http_requests_total 中job标签是 api-server 的过去5分钟中内的样本。
rate函数的返回是瞬时向量Instant vector
❗️❗️❗️在使用promql表达式画图时要注意promql表达式只有最后的结果是即时向量才可以画图。
既然讲到了画图我们就顺势将prometheus的画图描点的原理介绍下。
描点原理
我们在绘图的时候通常是选择一段时间范围那么prometheus在收到这个时间范围的时候如何根据请求的promql语句来绘制图表呢
prometheus会将整个时间段按step或者也可以叫做interval得到不同的时间戳这个参数也是用户在绘图的时候传递的。
基于每个时间戳得到每个时间序列的一个描点得到描点的逻辑则是通过时间戳和promql表达式得到相同时间戳的时间序列值也就是瞬时向量。
最后我再介绍下grafna在绘图的时候两个关于时间范围的选项作为科普。
grafana 描点选项配置
当前时间为now假设为11点半点
relative time 选择 1h那么界面展示的数据为10点半到11点半的数据。 选择timeshift则是将面板的结束时间从11点半变为10点半,面板还是按默认的时间间隔显示数据