当前位置:网站首页>Prometheus 运维工具 Promtool (二) Query 功能

Prometheus 运维工具 Promtool (二) Query 功能

2022-07-25 23:55:00 InfoQ


Promtool 在查询方面一个有 4 个子命令,分别用来进行实时查询、范围查询、序列查询和 label 查询,接下来我们依次看一下。

实时查询

Promtool 的 query instant 子命令允许根据当前时间戳通过命令行直接查询 Prometheus 服务器的相关指标,命令用法如下:

promtool query instant [<flags>] <server> <expr>

按照子命令的使用说明必须提供一个 Prometheus 服务器 URL 作为参数,以及要执行的查询语句,比如像下边这样。

[[email protected] ~]# ./promtool query instant 'http://127.0.0.1:9090' 'up == 1'
up{instance=&quot;172.16.6.97:9100&quot;, job=&quot;mysql_Host&quot;} => 1 @[1658760087.156]
up{instance=&quot;172.16.6.98:9100&quot;, job=&quot;mysql_Host&quot;} => 1 @[1658760087.156]
up{instance=&quot;172.16.6.98:9104&quot;, job=&quot;mysql_DB&quot;, nodename=&quot;Erdong-DB&quot;} => 1 @[1658760087.156]
up{instance=&quot;172.16.6.76:7002&quot;, job=&quot;kong&quot;} => 1 @[1658760087.156]

这个语句查询了该 Prometheus 实例中 
up == 1
 这个语句的结果,Prometheus 返回了对应的结果数据。

范围查询

Promtool 的 query range 子命令允许在指定的时间范围内显示对应的查询结果。因此,再查询语句中需要提供 Prometheus服务器 URL,并且在查询语句中我们必须提供开始和结束的时间戳,这个时间戳需要是 unix 格式 。命令格式如下 :

promtool query range [<flags>] <server> <expr>

接下来使用 Linux 的 date 命令来定义开始和结束时间戳,生成五分钟前的 unix 格式时间戳和现在的另一个时间戳。我们还可以使用 --step 参数指定查询的步长,或者叫查询的时间间隔,用来表示间隔多久输出一个数据点,在下边的查询语句中,它是一分钟。最后得到一个类似下面的查询语句:

[[email protected] ~]# ./promtool query range --start=$(date -d '5minutes ago' +'%s') --end=$(date -d 'now' +'%s') --step=1m 'http://127.0.0.1:9090' 'up == 1'
up{instance=&quot;172.16.6.97:9100&quot;, job=&quot;mysql_Host&quot;} =>
1 @[1658760631]
1 @[1658760691]
1 @[1658760751]
1 @[1658760811]
1 @[1658760871]
1 @[1658760931]
up{instance=&quot;172.16.6.98:9100&quot;, job=&quot;mysql_Host&quot;} =>
1 @[1658760631]
1 @[1658760691]
1 @[1658760751]
1 @[1658760811]
1 @[1658760871]
1 @[1658760931]
up{instance=&quot;172.16.8.76:7002&quot;, job=&quot;kong&quot;} =>
1 @[1658760631]
1 @[1658760691]
1 @[1658760751]
1 @[1658760811]
1 @[1658760871]
1 @[1658760931]
up{instance=&quot;172.16.6.98:9104&quot;, job=&quot;mysql_DB&quot;, nodename=&quot;Erdong-DB&quot;} =>
1 @[1658760631]
1 @[1658760691]
1 @[1658760751]
1 @[1658760811]
1 @[1658760871]
1 @[1658760931]

这就是我们得到的查询结果。显示所有 
up == 1
 的指标,并且按照每分钟一个点的频率来显示最近 5 分钟的数据。

序列查询

使用query series可以搜索与一组度量名称和标签匹配的所有时间序列。以下是使用方法:

promtool query series --match=MATCH [<flags>] <server>

[[email protected] ~]# ./promtool query series 'http://127.0.0.1:9090' --match='up' --match='go_info{job=&quot;prometheus&quot;}'
{__name__=&quot;go_info&quot;, instance=&quot;172.16.6.97:9100&quot;, job=&quot;mysql_Host&quot;, version=&quot;go1.16.7&quot;}
{__name__=&quot;go_info&quot;, instance=&quot;172.16.6.98:9100&quot;, job=&quot;mysql_Host&quot;, version=&quot;go1.16.7&quot;}
{__name__=&quot;go_info&quot;, instance=&quot;172.16.6.99:9100&quot;, job=&quot;mysql_Host&quot;, version=&quot;go1.17.3&quot;}
{__name__=&quot;up&quot;, instance=&quot;172.16.6.97:9100&quot;, job=&quot;mysql_Host&quot;}
{__name__=&quot;up&quot;, instance=&quot;172.16.6.98:9100&quot;, job=&quot;mysql_Host&quot;}
{__name__=&quot;up&quot;, instance=&quot;172.16.6.99:9100&quot;, job=&quot;mysql_Host&quot;}
{__name__=&quot;up&quot;, instance=&quot;172.16.6.97:9104&quot;, job=&quot;mysql_DB&quot;, nodename=&quot;Erdong-DB&quot;}
{__name__=&quot;up&quot;, instance=&quot;172.16.8.76:7002&quot;, job=&quot;kong&quot;}

label 查询

使用查询标签,您可以跨所有可用的指标搜索特定的标签,并返回附加到它的所有可能的值;例如:

promtool query labels [<flags>] <server> <name>

[[email protected] ~]# ./promtool query labels 'http://127.0.0.1:9090' 'instance'
172.16.6.97:9100
172.16.6.97:9104
172.16.6.98:9100
172.16.6.99:9100
172.16.8.76:7002

原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/c76752a6d57ac139254c2c433