zoukankan      html  css  js  c++  java
  • prometheus(7)之数据类型与PromQL语法

    Prometheus的四种数据类型

    • counter (只增不减 计数)
    • Gauge (常规数值 可变化大小)
    • histogram (柱状图 小于上边界的 总数与次数)
    • summary (分位数  小于自定义值的百分比 总数与次数)

    Counter类型(只增不减 重启清空)

    Counter是计数器类型:

    • 1、Counter 用于累计值,例如记录请求次数、任务完成数、错误发生次数。
    • 2、一直增加,不会减少。
    • 3、重启进程后,会被重置。
    例如:http_response_total{method="GET",endpoint="/api/tracks"}  100
          http_response_total{method="GET",endpoint="/api/tracks"}  160

    Counter 类型数据可以让用户方便的了解事件产生的速率的变化,在PromQL内置的相关操作函数可以提供相应的分析,比如以HTTP应用请求量来进行说明:

    1、通过rate()函数获取HTTP请求量的增长率
    rate(http_requests_total[5m])
    2、查询当前系统中,访问量前10的HTTP地址
    topk(10, http_requests_total)

    Gauge类型(可变化)

    Gauge是测量器类型:

    • 1、Gauge是常规数值,例如温度变化、内存使用变化。
    • 2、可变大,可变小。
    • 3、重启进程后,会被重置
    例如:
    memory_usage_bytes{host="master-01"}   100
    memory_usage_bytes{host="master-01"}   30
    memory_usage_bytes{host="master-01"}   50
    memory_usage_bytes{host="master-01"}   80 

    对于 Gauge 类型的监控指标,通过 PromQL 内置函数 delta() 可以获取样本在一段时间内的变化情况,例如,计算 CPU 温度在两小时内的差异:

    dalta(cpu_temp_celsius{host="zeus"}[2h])

    你还可以通过PromQL 内置函数 predict_linear() 基于简单线性回归的方式,对样本数据的变化趋势做出预测。例如,基于 2 小时的样本数据,来预测主机可用磁盘空间在 4 个小时之后的剩余情况:

    predict_linear(node_filesystem_free{job="node"}[2h], 4 * 3600) < 0

    histogram(柱状图)

    histogram是柱状图,在Prometheus系统的查询语言中,有三种作用:

    • 1、在一段时间范围内对数据进行采样(通常是请求持续时间或响应大小等),并将其计入可配置的存储桶(bucket)中. 后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图。
    • 2、对每个采样点值累计和(sum)
    • 3、对采样点的次数累计和(count)

    度量指标名称: [basename]_上面三类的作用度量指标名称

    1、[basename]_bucket{le="上边界"}, 这个值为小于等于上边界的所有采样点数量
    2、[basename]_sum
    3、[basename]_count

    小结:如果定义一个度量类型为Histogram,则Prometheus会自动生成三个对应的指标

    为什需要用histogram柱状图?

    在大多数情况下人们都倾向于使用某些量化指标的平均值,例如 CPU 的平均使用率、页面的平均响应时间。这种方式的问题很明显,以系统 API 调用的平均响应时间为例:如果大多数 API 请求都维持在 100ms 的响应时间范围内,而个别请求的响应时间需要 5s,那么就会导致某些 WEB 页面的响应时间落到中位数的情况,而这种现象被称为长尾问题。
    为了区分是平均的慢还是长尾的慢,最简单的方式就是按照请求延迟的范围进行分组。例如,统计延迟在 0~10ms 之间的请求数有多少,而 10~20ms 之间的请求数又有多少。通过这种方式可以快速分析系统慢的原因。Histogram 和 Summary 都是为了能够解决这样问题的存在,通过 Histogram 和 Summary 类型的监控指标,我们可以快速了解监控样本的分布情况。

    Histogram 类型的样本会提供三种指标(假设指标名称为 <basename>):

    样本的值分布在 bucket 中的数量,命名为 <basename>_bucket{le="<上边界>"}。解释的更通俗易懂一点,这个值表示指标值小于等于上边界的所有样本数量。

    1、在总共2次请求当中。http 请求响应时间 <=0.005 秒 的请求次数为0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.005",} 0.0
    2、在总共2次请求当中。http 请求响应时间 <=0.01 秒 的请求次数为0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.01",} 0.0
     3、在总共2次请求当中。http 请求响应时间 <=0.025 秒 的请求次数为0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.025",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.05",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.075",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.1",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.25",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.5",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.75",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="1.0",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="2.5",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="5.0",} 0.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="7.5",} 2.0
    4、在总共2次请求当中。http 请求响应时间 <=10 秒 的请求次数为 2
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="10.0",} 2.0
    io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="+Inf",} 2.0

    所有样本值的大小总和,命名为 <basename>_sum。

    实际含义: 发生的2次 http 请求总的响应时间为 13.107670803000001 秒

    io_namespace_http_requests_latency_seconds_histogram_sum{path="/",method="GET",code="200",} 13.107670803000001

    样本总数,命名为 <basename>_count。值和 <basename>_bucket{le="+Inf"} 相同。

    实际含义: 当前一共发生了 2 次 http 请求

    io_namespace_http_requests_latency_seconds_histogram_count{path="/",method="GET",code="200",} 2.0
    注意:
    bucket 可以理解为是对数据指标值域的一个划分,划分的依据应该基于数据值的分布。注意后面的采样点是包含前面的采样点的,假设 xxx_bucket{...,le="0.01"} 的值为 10,而 xxx_bucket{...,le="0.05"} 的值为 30,那么意味着这 30 个采样点中,有 10 个是小于 0.01s的,其余 20 个采样点的响应时间是介于0.01s 和 0.05s之间的。
    可以通过 histogram_quantile() 函数来计算 Histogram 类型样本的分位数。分位数可能不太好理解,你可以理解为分割数据的点。我举个例子,假设样本的 9 分位数(quantile=0.9)的值为 x,即表示小于 x 的采样值的数量占总体采样值的 90%。Histogram 还可以用来计算应用性能指标值(Apdex score)。

    summary

    与 Histogram 类型类似,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。它也有三种作用:

    • 1、对于每个采样点进行统计,并形成分位图。(如:正态分布一样,统计低于60分不及格的同学比例,统计低于80分的同学比例,统计低于95分的同学比例)
    • 2、统计班上所有同学的总成绩(sum)
    • 3、统计班上同学的考试总人数(count)

    带有度量指标的[basename]的summary 在抓取时间序列数据有如命名。

    1、观察时间的φ-quantiles (0 ≤ φ ≤ 1), 显示为[basename]{分位数="[φ]"}
    2、[basename]_sum, 是指所有观察值的总和
    3、[basename]_count, 是指已观察到的事件计数值

    样本值的分位数分布情况,命名为 <basename>{quantile="<φ>"}

    1、含义:这 12 次 http 请求中有 50% 的请求响应时间是 3.052404983s
    
      io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.5",} 3.052404983
    2、含义:这 12 次 http 请求中有 90% 的请求响应时间是 8.003261666s
    
      io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.9",} 8.003261666

    所有样本值的大小总和,命名为 <basename>_sum

    1、含义:这12次 http 请求的总响应时间为 51.029495508s
    
      io_namespace_http_requests_latency_seconds_summary_sum{path="/",method="GET",code="200",} 51.029495508

    样本总数,命名为 <basename>_count

    1、含义:当前一共发生了 12 次 http 请求
    
      io_namespace_http_requests_latency_seconds_summary_count{path="/",method="GET",code="200",} 12.0

    现在可以总结一下 Histogram 与 Summary 的异同:

    它们都包含了 <basename>_sum 和 <basename>_count 指标

    Histogram 需要通过 <basename>_bucket 来计算分位数,而 Summary 则直接存储了分位数的值。

    prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.5"} 0.012352463
    
    prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.9"} 0.014458005
    
    prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.99"} 0.017316173
    
    prometheus_tsdb_wal_fsync_duration_seconds_sum 2.888716127000002
    
    prometheus_tsdb_wal_fsync_duration_seconds_count 216

    从上面的样本中可以得知当前Promtheus Server进行wal_fsync操作的总次数为216次,耗时2.888716127000002s。其中中位数(quantile=0.5)的耗时为0.012352463,9分位数(quantile=0.9)的耗时为0.014458005s。

    Prometheus PromQL语法

    PromQL(Prometheus Query Language)是 Prometheus 自己开发的表达式语言,语言表现力很丰富,内置函数也很多。使用它可以对时序数据进行筛选和聚合。

     

    数据类型

    PromQL 表达式计算出来的值有以下几种类型:

    • 瞬时向量 (Instant vector): 一组时序,每个时序只有一个采样值
    • 区间向量 (Range vector): 一组时序,每个时序包含一段时间内的多个采样值
    • 标量数据 (Scalar): 一个浮点数
    • 字符串 (String): 一个字符串,暂时未用

     

    瞬时向量选择器

    瞬时向量选择器用来选择一组时序在某个采样点的采样值。
    最简单的情况就是指定一个度量指标,选择出所有属于该度量指标的时序的当前采样值。比如下面的表达式:

    apiserver_request_total

    可以通过在后面添加用大括号包围起来的一组标签键值对来对时序进行过滤。比如下面的表达式筛选出了 job 为 kubernetes-apiservers,并且 resource为 pod的时序:

    apiserver_request_total{job="kubernetes-apiserver",resource="pods"}

    匹配标签值时可以是等于,也可以使用正则表达式。总共有下面几种匹配操作符:

    • =:完全相等
    • !=: 不相等
    • =~: 正则表达式匹配
    • !~: 正则表达式不匹配

    下面的表达式筛选出了container是kube-scheduler或kube-proxy或kube-apiserver的时序数据

    container_processes{container=~"kube-scheduler|kube-proxy|kube-apiserver"}

    区间向量选择器

    区间向量选择器类似于瞬时向量选择器,不同的是它选择的是过去一段时间的采样值。可以通过在瞬时向量选择器后面添加包含在 [] 里的时长来得到区间向量选择器。比如下面的表达式选出了所有度量指标为apiserver_request_total且resource是pod的时序在过去1 分钟的采样值。

    apiserver_request_total{job="kubernetes-apiserver",resource="pods"}[1m]

    这个不支持Graph,需要选择Console,才会看到采集的数据

    说明:时长的单位可以是下面几种之一:

    • s:seconds
    • m:minutes
    • h:hours
    • d:days
    • w:weeks
    • y:years

    偏移向量选择器

    前面介绍的选择器默认都是以当前时间为基准时间,偏移修饰器用来调整基准时间,使其往前偏移一段时间。偏移修饰器紧跟在选择器后面,使用 offset 来指定要偏移的量。比如下面的表达式选择度量名称为apiserver_request_total的所有时序在 5 分钟前的采样值。

    apiserver_request_total{job="kubernetes-apiserver",resource="pods"} offset 5m

    下面的表达式选择apiserver_request_total 度量指标在 1 周前的这个时间点过去 5 分钟的采样值。

    apiserver_request_total{job="kubernetes-apiserver",resource="pods"} [5m] offset 1w

     

    聚合操作符

    PromQL 的聚合操作符用来将向量里的元素聚合得更少。总共有下面这些聚合操作符:

    • sum:求和
    • min:最小值
    • max:最大值
    • avg:平均值
    • stddev:标准差
    • stdvar:方差
    • count:元素个数
    • count_values:等于某值的元素个数
    • bottomk:最小的 k 个元素
    • topk:最大的 k 个元素
    • quantile:分位数
    • rate: 增长率

    如:

    计算xianchaomaster1节点所有容器总计内存

    sum(container_memory_usage_bytes{instance=~"xianchaomaster1"})/1024/1024/1024

    计算xianchaomaster1节点最近1m所有容器cpu使用率

    sum (rate (container_cpu_usage_seconds_total{instance=~"xianchaomaster1"}[1m])) / sum (machine_cpu_cores{ instance =~"xianchaomaster1"}) * 100

    计算最近1m所有容器cpu使用率

    sum (rate (container_cpu_usage_seconds_total{id!="/"}[1m])) by (id)

    #把id会打印出来

    结果如下:

    内置函数

    • Prometheus 内置了一些函数来辅助计算,下面介绍一些典型的。
    • abs():绝对值
    • sqrt():平方根
    • exp():指数计算
    • ln():自然对数
    • ceil():向上取整
    • floor():向下取整
    • round():四舍五入取整
    • delta():计算区间向量里每一个时序第一个和最后一个的差值
    • sort():排序

      

    函数列表


    一些函数有默认的参数,例如:year(v=vector(time()) instant-vector)。v是参数值,instant-vector是参数类型。vector(time())是默认值。

    abs()

    abs(v instant-vector)返回输入向量的所有样本的绝对值。

    absent()

    absent(v instant-vector),如果赋值给它的向量具有样本数据,则返回空向量;如果传递的瞬时向量参数没有样本数据,则返回不带度量指标名称且带有标签的样本值为1的结果

    当监控度量指标时,如果获取到的样本数据是空的, 使用absent方法对告警是非常有用的

    absent(nonexistent{job="myjob"}) # => key: value = {job="myjob"}: 1

    absent(nonexistent{job="myjob", instance=~".*"}) # => {job="myjob"} 1 so smart !

    absent(sum(nonexistent{job="myjob"})) # => key:value {}: 0

    ceil()

    ceil(v instant-vector) 是一个向上舍入为最接近的整数。

    changes()

    changes(v range-vector) 输入一个范围向量, 返回这个范围向量内每个样本数据值变化的次数。

    clamp_max()

    clamp_max(v instant-vector, max scalar)函数,输入一个瞬时向量和最大值,样本数据值若大于max,则改为max,否则不变

    clamp_min()

    clamp_min(v instant-vector)函数,输入一个瞬时向量和最大值,样本数据值小于min,则改为min。否则不变

    count_saclar()

    count_scalar(v instant-vector) 函数, 输入一个瞬时向量,返回key:value="scalar": 样本个数。而count()函数,输入一个瞬时向量,返回key:value=向量:样本个数,其中结果中的向量允许通过by条件分组。

    day_of_month()

    day_of_month(v=vector(time()) instant-vector)函数,返回被给定UTC时间所在月的第几天。返回值范围:1~31。

    day_of_week()

    day_of_week(v=vector(time()) instant-vector)函数,返回被给定UTC时间所在周的第几天。返回值范围:0~6. 0表示星期天。

    days_in_month()

    days_in_month(v=vector(time()) instant-vector)函数,返回当月一共有多少天。返回值范围:28~31.

    delta()

    delta(v range-vector)函数,计算一个范围向量v的第一个元素和最后一个元素之间的差值。返回值:key:value=度量指标:差值

    下面这个表达式例子,返回过去两小时的CPU温度差:

    delta(cpu_temp_celsius{host="zeus"}[2h])

    delta函数返回值类型只能是gauges。

    deriv()

    deriv(v range-vector)函数,计算一个范围向量v中各个时间序列二阶导数,使用简单线性回归

    deriv二阶导数返回值类型只能是gauges。

    drop_common_labels()

    drop_common_labels(instant-vector)函数,输入一个瞬时向量,返回值是key:value=度量指标:样本值,其中度量指标是去掉了具有相同标签。 例如:http_requests_total{code="200", host="127.0.0.1:9090", method="get"} : 4, http_requests_total{code="200", host="127.0.0.1:9090", method="post"} : 5, 返回值: http_requests_total{method="get"} : 4, http_requests_total{code="200", method="post"} : 5

    exp()

    exp(v instant-vector)函数,输入一个瞬时向量, 返回各个样本值的e指数值,即为e^N次方。特殊情况如下所示:

    Exp(+inf) = +Inf Exp(NaN) = NaN

    floor()

    floor(v instant-vector)函数,与ceil()函数相反。 4.3 为 4 。

    histogram_quantile()

    histogram_quatile(φ float, b instant-vector) 函数计算b向量的φ-直方图 (0 ≤ φ ≤ 1) 。参考中文文献[https://www.howtoing.com/how-to-query-prometheus-on-ubuntu-14-04-part-2/]

    holt_winters()

    holt_winters(v range-vector, sf scalar, tf scalar)函数基于范围向量v,生成事件序列数据平滑值。平滑因子sf越低, 对老数据越重要。趋势因子tf越高,越多的数据趋势应该被重视。0< sf, tf <=1。 holt_winters仅用于gauges

    hour()

    hour(v=vector(time()) instant-vector)函数返回被给定UTC时间的当前第几个小时,时间范围:0~23。

    idelta()

    idelta(v range-vector)函数,输入一个范围向量,返回key: value = 度量指标: 每最后两个样本值差值。

    increase()

    increase(v range-vector)函数, 输入一个范围向量,返回:key:value = 度量指标:last值-first值,自动调整单调性,如:服务实例重启,则计数器重置。与delta()不同之处在于delta是求差值,而increase返回最后一个减第一个值,可为正为负。

    下面的表达式例子,返回过去5分钟,连续两个时间序列数据样本值的http请求增加值。

    increase(http_requests_total{job="api-server"}[5m])

    increase的返回值类型只能是counters,主要作用是增加图表和数据的可读性,使用rate记录规则的使用率,以便持续跟踪数据样本值的变化。

    irate

    irate(v range-vector)函数, 输入:范围向量,输出:key: value = 度量指标: (last值-last前一个值)/时间戳差值。它是基于最后两个数据点,自动调整单调性, 如:服务实例重启,则计数器重置。

    下面表达式针对范围向量中的每个时间序列数据,返回两个最新数据点过去5分钟的HTTP请求速率。

    irate(http_requests_total{job="api-server"}[5m])

    irate只能用于绘制快速移动的计数器。因为速率的简单更改可以重置FOR子句,利用警报和缓慢移动的计数器,完全由罕见的尖峰组成的图形很难阅读。

    label_replace()

    对于v中的每个时间序列,label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string) 将正则表达式与标签值src_label匹配。如果匹配,则返回时间序列,标签值dst_label被替换的扩展替换。$1替换为第一个匹配子组,$2替换为第二个等。如果正则表达式不匹配,则时间序列不会更改。

    另一种更容易的理解是:label_replace函数,输入:瞬时向量,输出:key: value = 度量指标: 值(要替换的内容:首先,针对src_label标签,对该标签值进行regex正则表达式匹配。如果不能匹配的度量指标,则不发生任何改变;否则,如果匹配,则把dst_label标签的标签纸替换为replacement 下面这个例子返回一个向量值a带有foo标签:label_replace(up{job="api-server", serice="a:c"}, "foo", "$1", "service", "(.*):.*")

    ln()

    ln(v instance-vector)计算瞬时向量v中所有样本数据的自然对数。特殊例子:

    ln(+Inf) = +Inf ln(0) = -Inf ln(x<0) = NaN ln(NaN) = NaN

    log2()

    log2(v instant-vector)函数计算瞬时向量v中所有样本数据的二进制对数。

    log10()

    log10(v instant-vector)函数计算瞬时向量v中所有样本数据的10进制对数。相当于ln()

    minute()

    minute(v=vector(time()) instant-vector)函数返回给定UTC时间当前小时的第多少分钟。结果范围:0~59。

    month()

    month(v=vector(time()) instant-vector)函数返回给定UTC时间当前属于第几个月,结果范围:0~12。

    predict_linear()

    predict_linear(v range-vector, t scalar)预测函数,输入:范围向量和从现在起t秒后,输出:不带有度量指标,只有标签列表的结果值。

    例如:predict_linear(http_requests_total{code="200",instance="120.77.65.193:9090",job="prometheus",method="get"}[5m], 5)
    结果:
    {code="200",handler="query_range",instance="120.77.65.193:9090",job="prometheus",method="get"}  1
    {code="200",handler="prometheus",instance="120.77.65.193:9090",job="prometheus",method="get"}   4283.449995397104
    {code="200",handler="static",instance="120.77.65.193:9090",job="prometheus",method="get"}   22.99999999999999
    {code="200",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"}    130.90381188596754
    {code="200",handler="graph",instance="120.77.65.193:9090",job="prometheus",method="get"}    2
    {code="200",handler="label_values",instance="120.77.65.193:9090",job="prometheus",method="get"} 2
    

    rate()

    rate(v range-vector)函数, 输入:范围向量,输出:key: value = 不带有度量指标,且只有标签列表:(last值-first值)/时间差s

    rate(http_requests_total[5m])
    结果:
    {code="200",handler="label_values",instance="120.77.65.193:9090",job="prometheus",method="get"} 0
    {code="200",handler="query_range",instance="120.77.65.193:9090",job="prometheus",method="get"}  0
    {code="200",handler="prometheus",instance="120.77.65.193:9090",job="prometheus",method="get"}   0.2
    {code="200",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"}    0.003389830508474576
    {code="422",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"}    0
    {code="200",handler="static",instance="120.77.65.193:9090",job="prometheus",method="get"}   0
    {code="200",handler="graph",instance="120.77.65.193:9090",job="prometheus",method="get"}    0
    {code="400",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"}    0
    

    rate()函数返回值类型只能用counters, 当用图表显示增长缓慢的样本数据时,这个函数是非常合适的。

    注意:当rate函数和聚合方式联合使用时,一般先使用rate函数,再使用聚合操作, 否则,当服务实例重启后,rate无法检测到counter重置。

    resets()

    resets()函数, 输入:一个范围向量,输出:key-value=没有度量指标,且有标签列表[在这个范围向量中每个度量指标被重置的次数]。在两个连续样本数据值下降,也可以理解为counter被重置。 示例:

    resets(http_requests_total[5m])
    结果:
    {code="200",handler="label_values",instance="120.77.65.193:9090",job="prometheus",method="get"} 0
    {code="200",handler="query_range",instance="120.77.65.193:9090",job="prometheus",method="get"}  0
    {code="200",handler="prometheus",instance="120.77.65.193:9090",job="prometheus",method="get"}   0
    {code="200",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"}    0
    {code="422",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"}    0
    {code="200",handler="static",instance="120.77.65.193:9090",job="prometheus",method="get"}   0
    {code="200",handler="graph",instance="120.77.65.193:9090",job="prometheus",method="get"}    0
    {code="400",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"}    0
    

    resets只能和counters一起使用。

    round()

    round(v instant-vector, to_nearest 1= scalar)函数,与ceilfloor函数类似,输入:瞬时向量,输出:指定整数级的四舍五入值, 如果不指定,则是1以内的四舍五入。

    scalar()

    scalar(v instant-vector)函数, 输入:瞬时向量,输出:key: value = "scalar", 样本值[如果度量指标样本数量大于1或者等于0, 则样本值为NaN, 否则,样本值本身]

    sort()

    sort(v instant-vector)函数,输入:瞬时向量,输出:key: value = 度量指标:样本值[升序排列]

    sort_desc()

    sort(v instant-vector函数,输入:瞬时向量,输出:key: value = 度量指标:样本值[降序排列]

    sqrt()

    sqrt(v instant-vector)函数,输入:瞬时向量,输出:key: value = 度量指标: 样本值的平方根

    time()

    time()函数,返回从1970-01-01到现在的秒数,注意:它不是直接返回当前时间,而是时间戳

    vector()

    vector(s scalar)函数,返回:key: value= {}, 传入参数值

    year()

    year(v=vector(time()) instant-vector), 返回年份。

    _over_time()

    下面的函数列表允许传入一个范围向量,返回一个带有聚合的瞬时向量:

    • avg_over_time(range-vector): 范围向量内每个度量指标的平均值。
    • min_over_time(range-vector): 范围向量内每个度量指标的最小值。
    • max_over_time(range-vector): 范围向量内每个度量指标的最大值。
    • sum_over_time(range-vector): 范围向量内每个度量指标的求和值。
    • count_over_time(range-vector): 范围向量内每个度量指标的样本数据个数。
    • quantile_over_time(scalar, range-vector): 范围向量内每个度量指标的样本数据值分位数,φ-quantile (0 ≤ φ ≤ 1)
    • stddev_over_time(range-vector): 范围向量内每个度量指标的总体标准偏差。
    • `stdvar_over_time(range-vector): 范围向量内每个度量指标的总体标准方差。
  • 相关阅读:
    地方坐标系
    地图常用坐标系
    地图投影【百度百科】
    地图投影
    坐标系、坐标参照系、坐标变换、投影变换
    Scale和Resolution的含义及转换算法
    OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)
    面向对象的一些方法
    对象构造函数的原型图
    bookstarp的初体验
  • 原文地址:https://www.cnblogs.com/dahuige/p/15098925.html
Copyright © 2011-2022 走看看