写点什么

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

作者:耳东@Erdong
  • 2022 年 7 月 25 日
  • 本文字数:1976 字

    阅读完需:约 6 分钟

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

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

实时查询

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


promtool query instant [<flags>] <server> <expr>
复制代码


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


[root@Erdong-test ~]# ./promtool query instant 'http://127.0.0.1:9090' 'up == 1'up{instance="172.16.6.97:9100", job="mysql_Host"} => 1 @[1658760087.156]up{instance="172.16.6.98:9100", job="mysql_Host"} => 1 @[1658760087.156]up{instance="172.16.6.98:9104", job="mysql_DB", nodename="Erdong-DB"} => 1 @[1658760087.156]up{instance="172.16.6.76:7002", job="kong"} => 1 @[1658760087.156]
复制代码


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

范围查询

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


promtool  query range [<flags>] <server> <expr>
复制代码


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


[root@Erdong-test ~]# ./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="172.16.6.97:9100", job="mysql_Host"} =>1 @[1658760631]1 @[1658760691]1 @[1658760751]1 @[1658760811]1 @[1658760871]1 @[1658760931]up{instance="172.16.6.98:9100", job="mysql_Host"} =>1 @[1658760631]1 @[1658760691]1 @[1658760751]1 @[1658760811]1 @[1658760871]1 @[1658760931]up{instance="172.16.8.76:7002", job="kong"} =>1 @[1658760631]1 @[1658760691]1 @[1658760751]1 @[1658760811]1 @[1658760871]1 @[1658760931]up{instance="172.16.6.98:9104", job="mysql_DB", nodename="Erdong-DB"} =>1 @[1658760631]1 @[1658760691]1 @[1658760751]1 @[1658760811]1 @[1658760871]1 @[1658760931]
复制代码


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

序列查询

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


promtool query series --match=MATCH [<flags>] <server>
复制代码


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


[root@Erdong-test ~]# ./promtool query series 'http://127.0.0.1:9090' --match='up' --match='go_info{job="prometheus"}'{__name__="go_info", instance="172.16.6.97:9100", job="mysql_Host", version="go1.16.7"}{__name__="go_info", instance="172.16.6.98:9100", job="mysql_Host", version="go1.16.7"}{__name__="go_info", instance="172.16.6.99:9100", job="mysql_Host", version="go1.17.3"}{__name__="up", instance="172.16.6.97:9100", job="mysql_Host"}{__name__="up", instance="172.16.6.98:9100", job="mysql_Host"}{__name__="up", instance="172.16.6.99:9100", job="mysql_Host"}{__name__="up", instance="172.16.6.97:9104", job="mysql_DB", nodename="Erdong-DB"}{__name__="up", instance="172.16.8.76:7002", job="kong"}
复制代码


Prometheus 实例会按照参数返回数据结果。

label 查询

Promtool 的 query labels 子命令可以用来查询 label 对应的值,可以跨所有可用的指标搜索特定的 label ,并返回对应的所有的值,命令使用方法如下:


promtool query labels [<flags>] <server> <name>
复制代码


接着我们看一下如何执行这个命令。


[root@Erdong-test ~]# ./promtool query labels 'http://127.0.0.1:9090' 'instance'172.16.6.97:9100172.16.6.97:9104172.16.6.98:9100172.16.6.99:9100172.16.8.76:7002
复制代码


命令执行后返回了 instance 这个 label 的所有值。

总结

当前 Promtool 工具的 2.37.0 版本只支持 4 个查询功能。后续版本支持查询更多内容的时候我们再看。


本文收录如下系列,共计 4 篇。

Prometheus 运维工具 Promtool (一)Check 功能

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

发布于: 33 分钟前阅读数: 10
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Prometheus 运维工具 Promtool (二)Query 功能_Prometheus_耳东@Erdong_InfoQ写作社区