Prometheus云原生监控:运维与开发实战
上QQ阅读APP看书,第一时间看更新

4.1.1 PromQL的4种数据类型

结合上述案例,我们看到了文字加粗部分的瞬时向量Instant vector和区间向量Range vector,它们属于Prometheus表达式语言的4种数据类型。

Prometheus的4种数据类型如下。

·瞬时向量(Instant vector):一组时间序列,每个时间序列包含单个样本,它们共享相同的时间戳。也就是说,表达式的返回值中只会包含该时间序列中最新的一个样本值。

·区间向量(Range vector):一组时间序列,每个时间序列包含一段时间范围内的样本数据。

·标量(Scalar):一个浮点型的数据值,没有时序。可以写成[-](digits)[.(digits)]的形式,比如-3.14。需要注意的是,使用表达式count(http_requests_total)返回的数据类型依然是瞬时向量,用户可以通过内置函数scalar()将单个瞬时向量转换为标量。

·字符串(String):一个简单的字符串值。字符串可以用单引号('')、双引号("")或反引号(``)来指定。因为Prometheus是基于Go语言编写的,所以它与Go语言有着类似的转义规则[1],比如在单引号('')或双引号("")中,可以使用反斜杠(\)来表示转义序列,后面可以接a、b、f、n、r、t、v或\(分别代表响铃、退格、换页、换行、回车、水平制表、反斜杠),特殊字符可以使用八进制(\nnn)或者十六进制(\xnn、\unnnn和\Unnnnnnnn)。但是与Go语言不同的是,Prometheus中的反引号(``)并不会对换行符进行转义。

以下是Prometheus官方文档[2]提供的字符串示例。


"this is a string"
'these are unescaped: \n \\ \t'
`these are not unescaped: \n ' " \t`

[1] Go语言转义规则:https://golang.org/ref/spec#String_literals。

[2] Prometheus官方文档之基础查询:https://prometheus.io/docs/prometheus/latest/querying/basics/。