开发指南
本文介绍TSDB for Prometheus支持的label运算符和聚合运算。
PromQL参考
PromQL是Prometheus提供的一种功能查询语言,允许用户实时选择和汇总时间序列数据。如要了解更多有关PromQL的内容,请参考Prometheus官方提供的PromQL文档。
TSDB for Prometheus内置实现的remote storage adapter接口,极大程度上兼容Prometheus的查询功能。
支持的Label运算符
TSDB for Prometheus支持4种label运算符,包括=
, !=
,=~
,!~
等4种运算符,查询示例如下:
node__cpu__seconds__total{cpu="1",mode="user"}
node__cpu__seconds__total{cpu!="1",mode="user"}
node__cpu__seconds__total{cpu=~"1",mode="user"}
node__cpu__seconds__total{cpu=~"1|2|3",mode="user"}
node__cpu__seconds__total{cpu!~"1",mode="user"}
node__cpu__seconds__total{cpu!~"1|2|3",mode="user"}
TSDB for Prometheus对于PromQL中的正则表达式匹配,对于=~
目前仅支持|
和*
两个符号。对于!~
暂时仅支持|
,不支持符号*
的查询。查询示例如下:
node__cpu__seconds__total{mode=~"user|sys"} #支持
node__cpu__seconds__total{mode=~"use*"} #支持
node__cpu__seconds__total{mode=~"user.+"} #不支持
node__cpu__seconds__total{mode!~"user|sys"} #支持
node__cpu__seconds__total{mode!~"use*"} #不支持
node__cpu__seconds__total{mode!~"user.+"} #不支持
对PromQL的正则表达式查询的更多支持,TSDB for Prometheus目前正在紧锣密鼓开发中,敬请期待。
支持的聚合运算
TSDB for Prometheus支持的Prometheus的聚合运算包括:min,max,avg,stddev,stdvar,count,topk,bottomk,quantile,count_values等,查询示例如下:
min (node__cpu__seconds__total)
max (node__cpu__seconds__total)
avg (node__cpu__seconds__total)
stddev (node__cpu__seconds__total)
stdvar (node__cpu__seconds__total)
count (node__cpu__seconds__total)
topk (1,node__cpu__seconds__total)
bottomk (1,node__cpu__seconds__total)
quantile(1,node__cpu__seconds__total)
count_values("count", node__cpu__seconds__total)
注意事项
Prometheus支持的字符与TSDB支持的字符不同,其具体差异如下表所示:
Prometheus | TSDB | |
---|---|---|
metric |
| 只可包含大小写英文字母、中文、数字,以及特殊字符 |
tagKey |
| 只可包含大小写英文字母、中文、数字,以及特殊字符 |
tagValue | 可以为任意Unicode字符。 | 只可包含大小写英文字母、中文、数字,以及特殊字符 |
由于上述字符支持的差异,数据若通过Prometheus写入,则建议数据也通过Prometheus查询。若使用TSDB的原生查询接口查询这些数据,获取的tagvalue有可能出现乱码。
TSDB在对tagValue中不支持的字符进行Encode(编码)和Decode(解码)时,使用了
#
作为标识字符,因此通过Prometheus写入TSDB的tagValue最好不要包含#
字符。通过Prometheus写入的数据,如果以TSDB的原生查询接口读出,请保证写入的tagvalue不包含TSDB无法识别的字符。通过TSDB原生写入接口写入的数据,如果以Prometheus读出,请保证写入的metric,tagkey不包含Prometheus无法识别的字符。