写点什么

Prometheus 运维工具 Promtool (三) Debug 功能

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

    阅读完需:约 8 分钟

Prometheus 运维工具 Promtool (三) Debug 功能

Promtool 在 debug 方面一个有 3 个子命令,分别用来获取 profiling debug 信息、获取 metric debug 信息、获取所有 debug 信息、对规则文件进行单元测试,接下来我们依次看一下。

获取 profiling debug 信息

使用 这个命令来获取 Prometheus 的 profiling 性能数据。命令的参数如下:


promtool debug pprof <server>
复制代码


使用这个命令来创建一个文件看一下。


[root@Erdong-Test ~]# ./promtool debug pprof 'http://127.0.0.1:9090'collecting: http://127.0.0.1:9090/debug/pprof/threadcreatecollecting: http://127.0.0.1:9090/debug/pprof/profile?seconds=30collecting: http://127.0.0.1:9090/debug/pprof/blockcollecting: http://127.0.0.1:9090/debug/pprof/goroutinecollecting: http://127.0.0.1:9090/debug/pprof/heapcollecting: http://127.0.0.1:9090/debug/pprof/mutexcollecting: http://127.0.0.1:9090/debug/pprof/trace?seconds=30Compiling debug information complete, all files written in "debug.tar.gz".
[root@Erdong-Test ~]# tar -zxf debug.tar.gz[root@Erdong-Test ~]# ll -h-rw-rw-rw- 1 root root 177 1月 1 1970 block.pb-rw-rw-rw- 1 root root 5.9K 1月 1 1970 cpu.pb-rw-rw-rw- 1 root root 7.4K 1月 1 1970 goroutine.pb-rw-rw-rw- 1 root root 223K 1月 1 1970 heap.pb-rw-rw-rw- 1 root root 177 1月 1 1970 mutex.pb-rw-rw-rw- 1 root root 493 1月 1 1970 threadcreate.pb-rw-rw-rw- 1 root root 73K 1月 1 1970 trace.pb
复制代码


创建好的文件名是 debug.tar.gz ,使用 tar 命令解压以后就会得到 block.pb 、cpu.pb、goroutine.pb、heap.pb、mutex.pb、threadcreate.pb、trace.pb 一共 7 个文件。


这些文件可以使用 pprof 工具来进行分析。

获取 metric debug 信息

Promtool 的 debug metrics 子命令是下载 Prometheus 提供的 Metric 指标并且进行压缩。这个命令平时很少使用,因为从 Prometheus 的端口中就可以直接获取这些 Metric 数据。这个调试命令存在的意义是,当自己无法解决问题的时候,可以把 Metric 导出提供给其他分析人员进行分析调试,这个命令的参数结构如下:


promtool debug metrics <server>
复制代码


我们来使用一下这个命令


[root@Erdong-Test ~]# ./promtool debug metrics 'http://127.0.0.1:9090'collecting: http://127.0.0.1:9090/metricsCompiling debug information complete, all files written in "debug.tar.gz".[root@Erdong-Test ~]# tar -zxf debug.tar.gztar: metrics.txt:不可信的旧时间戳 1970-01-01 08:00:00[root@Erdong-Test ~]# tail metrics.txt# TYPE prometheus_web_federation_warnings_total counterprometheus_web_federation_warnings_total 0# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.# TYPE promhttp_metric_handler_requests_in_flight gaugepromhttp_metric_handler_requests_in_flight 1# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.# TYPE promhttp_metric_handler_requests_total counterpromhttp_metric_handler_requests_total{code="200"} 519347promhttp_metric_handler_requests_total{code="500"} 0promhttp_metric_handler_requests_total{code="503"} 0
复制代码


可以看到这个命令生成了一个 debug.tar.gz 的压缩文件,这个文件解压后是 metrics.txt ,厘米写满了 metric 。将这个文件发给其他人,就可以知道当前 Prometheus 的状态。


这个命令和如下这个命令的效果一致。


curl 127.0.0.1:9090/metrics > metrics.txt
复制代码

获取所有 debug 信息

Promtool 的 debug all 子命令就是将前边的两个子命令的结果合在一起,然后进行打包,这个子命令的使用方法如下:


promtool debug all <server>
复制代码


尝试执行一下:


[root@Erdong-Test ~]# ./promtool debug all 'http://127.0.0.1:9090'collecting: http://127.0.0.1:9090/debug/pprof/profile?seconds=30collecting: http://127.0.0.1:9090/debug/pprof/blockcollecting: http://127.0.0.1:9090/debug/pprof/goroutinecollecting: http://127.0.0.1:9090/debug/pprof/heapcollecting: http://127.0.0.1:9090/debug/pprof/mutexcollecting: http://127.0.0.1:9090/debug/pprof/threadcreatecollecting: http://127.0.0.1:9090/debug/pprof/trace?seconds=30collecting: http://127.0.0.1:9090/metricsCompiling debug information complete, all files written in "debug.tar.gz".
[root@Erdong-Test ~]# tar -zxf debug.tar.gztar: cpu.pb:不可信的旧时间戳 1970-01-01 08:00:00tar: block.pb:不可信的旧时间戳 1970-01-01 08:00:00tar: goroutine.pb:不可信的旧时间戳 1970-01-01 08:00:00tar: heap.pb:不可信的旧时间戳 1970-01-01 08:00:00tar: mutex.pb:不可信的旧时间戳 1970-01-01 08:00:00tar: threadcreate.pb:不可信的旧时间戳 1970-01-01 08:00:00tar: trace.pb:不可信的旧时间戳 1970-01-01 08:00:00tar: metrics.txt:不可信的旧时间戳 1970-01-01 08:00:00[root@Erdong-Test ~]# lsblock.pb debug.tar.gz heap.pb mutex.pb trace.pbcpu.pb goroutine.pb metrics.txt threadcreate.pb
复制代码


可以看到和前边的执行问你家是一样的。

测试规则文件

Promtool 还可以对规则文件进行单元测试,命令用法如下:


promtool test rules <test-rule-file>...
复制代码


我们随便找一个告警规则文件执行看一下。


[root@Erdong-Test ~]# ./promtool test rules promtsdb.rules.yamlUnit Testing:  promtsdb.rules.yaml  FAILED:yaml: unmarshal errors:  line 1: field groups not found in type main.unitTestFile
复制代码


出现了报错。这个时候我们就需要去查找错误的原因了。前边我们遇到过 Promtool 的 check rules 子命令,这两个命令都是对规则文件进行检查的,不同点是,check rules 只校验文件的语法是否存在错误,而 test rules 则是对规则文件进行单元测试。

总结

今天我们查看了 Promtool 的 debug 部分,明天我们来看 TSDB 部分。


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

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

发布于: 刚刚阅读数: 3
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

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

评论

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