全部产品

开发指南

更新时间:2019-04-19 15:37:41

PromQL参考

PromQL是Prometheus提供的一种功能查询语言,允许用户实时选择和汇总时间序列数据。如要了解更多有关PromQL的内容,请参考Prometheus官方提供的PromQL文档

TSDB for Prometheus内置实现的remote storage adapter接口,极大程度上兼容Prometheus的查询功能。

支持的Label运算符

TSDB for Prometheus支持的label运算符,包括= , != ,=~,!~等4种运算符,查询示例如下:

  1. node__cpu__seconds__total{cpu="1",mode="user"}
  2. node__cpu__seconds__total{cpu!="1",mode="user"}
  3. node__cpu__seconds__total{cpu=~"1",mode="user"}
  4. node__cpu__seconds__total{cpu=~"1|2|3",mode="user"}
  5. node__cpu__seconds__total{cpu!~"1",mode="user"}
  6. node__cpu__seconds__total{cpu!~"1|2|3",mode="user"}

TSDB for Prometheus对于PromQL中的正则表达式匹配,对于=~目前仅支持|*两个符号。对于!~暂时仅支持|,不支持符号*的查询。查询示例如下:

  1. node__cpu__seconds__total{mode=~"user|sys"} #支持
  2. node__cpu__seconds__total{mode=~"use*"} #支持
  3. node__cpu__seconds__total{mode=~"user.+"} #不支持
  4. node__cpu__seconds__total{mode!~"user|sys"} #支持
  5. node__cpu__seconds__total{mode!~"use*"} #不支持
  6. 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等,查询示例如下:

  1. min (node__cpu__seconds__total)
  2. max (node__cpu__seconds__total)
  3. avg (node__cpu__seconds__total)
  4. stddev (node__cpu__seconds__total)
  5. stdvar (node__cpu__seconds__total)
  6. count (node__cpu__seconds__total)
  7. topk (1,node__cpu__seconds__total)
  8. bottomk (1,node__cpu__seconds__total)
  9. quantile(1,node__cpu__seconds__total)
  10. count_values("count", node__cpu__seconds__total)

注意事项

当前,Prometheus支持的字符与TSDB支持的字符不同,其具体差异如下表所示:

Prometheus TSDB
metric [a-zA-Z:][a-zA-Z0-9:]* 只可包含大小写英文字母、中文、数字,以及特殊字符 -_./():,[]=#
tagKey [a-zA-Z][a-zA-Z0-9]* ,且以开头的tagName保留为内部使用>开头的tagName保留为内部使用 只可包含大小写英文字母、中文、数字,以及特殊字符 -_./():,[]=#
tagValue 可以为任意Unicode字符; 只可包含大小写英文字母、中文、数字,以及特殊字符 -_./():,[]=#

需要注意的是,由于上述字符支持的差异。数据若通过Prometheus写入,则建议数据也通过Prometheus查询;不建议使用TSDB的原生查询接口查询这些数据,因为此时获取的tagvalue有可能出现乱码。另外还需注意#字符的使用,TSDB在对tagValue中不支持的字符进行Encode(编码)和Decode(解码)时,使用了#作为标识字符,因此通过Prometheus写入TSDB的tagValue最好不要包含#字符。

如果通过Prometheus写入的数据必须以TSDB的原生查询接口读出,请保证写入的tagvalue不包含TSDB无法识别的字符;如果通过TSDB原生写入接口写入的数据必须以Prometheus读出,请保证写入的metric,tagkey不包含Prometheus无法识别的字符。