写点什么

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

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

    阅读完需:约 13 分钟

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

Promtool 是 Prometheus 提供的一个运维工具,用来对 Prometheus 进行检查,之前只有最简单的检查配置文件和规则文件的功能,现在已经有了更多的新功能,包括查询指标、debug 服务、对数据库进行检查等等。这次我们基于 2.37.0 版本进行一次梳理,如果版本低于这个版本,在使用前请确认要用到的功能是否已经添加,如果是版本比 2.37.0 高,请检查相关功能是否有更新。


查看 Promtool 工具的帮助信息可以看到如下信息:



[root@Erdong-Test ~]# ./promtool --helpusage: promtool [<flags>] <command> [<args> ...]
Tooling for the Prometheus monitoring system.
Flags: -h, --help Show context-sensitive help (also try --help-long and --help-man). --version Show application version. --enable-feature= ... Comma separated feature names to enable (only PromQL related). See https://prometheus.io/docs/prometheus/latest/feature_flags/ for the options and more details.
Commands: help [<command>...] Show help.
check service-discovery [<flags>] <config-file> <job> Perform service discovery for the given job name and report the results, including relabeling.
check config [<flags>] <config-files>... Check if the config files are valid or not.
check web-config <web-config-files>... Check if the web config files are valid or not.
check rules [<flags>] <rule-files>... Check if the rule files are valid or not.
check metrics Pass Prometheus metrics over stdin to lint them for consistency and correctness.
examples:
$ cat metrics.prom | promtool check metrics
$ curl -s http://localhost:9090/metrics | promtool check metrics
query instant [<flags>] <server> <expr> Run instant query.
query range [<flags>] <server> <expr> Run range query.
query series --match=MATCH [<flags>] <server> Run series query.
query labels [<flags>] <server> <name> Run labels query.
debug pprof <server> Fetch profiling debug information.
debug metrics <server> Fetch metrics debug information.
debug all <server> Fetch all debug information.
test rules <test-rule-file>... Unit tests for rules.
tsdb bench write [<flags>] [<file>] Run a write performance benchmark.
tsdb analyze [<flags>] [<db path>] [<block id>] Analyze churn, label pair cardinality and compaction efficiency.
tsdb list [<flags>] [<db path>] List tsdb blocks.
tsdb dump [<flags>] [<db path>] Dump samples from a TSDB.
tsdb create-blocks-from openmetrics <input file> [<output directory>] Import samples from OpenMetrics input and produce TSDB blocks. Please refer to the storage docs for more details.
tsdb create-blocks-from rules --start=START [<flags>] <rule-files>... Create blocks of data for new recording rules.
[root@Erdong-Test ~]#
复制代码

基本信息

这个工具有一些基本信息可以使用,一些参数基本是通用的。


首先 使用 --help 可以看到帮助信息,也可以使用 --help-long 参数看加长版的帮助信息


使用 --version 可以看到工具版本信息、构建的分支和 commit ID、构建时间、Go 的版本、运行平台这些信息。


[root@Erdong-Test ~]# ./promtool --versionpromtool, version 2.37.0 (branch: HEAD, revision: b41e0750abf5cc18d8233161560731de05199330)  build user:       root@0ebb6827e27f  build date:       20220714-15:13:18  go version:       go1.18.4  platform:         linux/amd64
复制代码


使用 Promtool 还可以校验一些新的特性的功能,使用 --enable-feature= 参数来开启,多个参数使用逗号隔开。相关的特性需要参考 https://prometheus.io/docs/prometheus/latest/feature_flags/ 链接。

使用 Promtool 进行检查

检查服务发现

使用 Promtool 可以检查配置文件中的服务发现配置,防止配置错误导致程序无法启动,或者启动后无法正常发现内容。


具体命令参数为


./promtool check service-discovery [<flags>] <config-file> <job>
复制代码


使用过程中需要指定 Prometheus 的配置文件,以及要检查的服务发现的 job 名称。Promtool 在检查过后会返回检查结果,并且会包含 relable 的内容。


实验结果如下,这命令返回了所有能发现的信息,即使 job 里配置了只要发现特定名称的 pod 即可。


./promtool check service-discovery /erdong/prometheus-pushgateway/conf/prometheus.yml pushgateway-k8s [  {
......
"discoveredLabels": { "__address__": "172.31.91.38:9091", "__meta_kubernetes_namespace": "appops", "__meta_kubernetes_pod_annotation_cattle_io_timestamp": "2022-07-22T09:40:36Z", "__meta_kubernetes_pod_annotation_cni_projectcalico_org_podIP": "172.31.91.38/32", "__meta_kubernetes_pod_annotation_field_cattle_io_ports": "[[{\"containerPort\":9091,\"dnsName\":\"pushgateway-nodeport\",\"hostPort\":0,\"kind\":\"NodePort\",\"name\":\"pushgateway\",\"protocol\":\"TCP\",\"sourcePort\":9091}]]", "__meta_kubernetes_pod_annotationpresent_cattle_io_timestamp": "true", "__meta_kubernetes_pod_annotationpresent_cni_projectcalico_org_podIP": "true", "__meta_kubernetes_pod_annotationpresent_field_cattle_io_ports": "true", "__meta_kubernetes_pod_container_init": "false", "__meta_kubernetes_pod_container_name": "pushgateway", "__meta_kubernetes_pod_container_port_name": "pushgateway", "__meta_kubernetes_pod_container_port_number": "9091", "__meta_kubernetes_pod_container_port_protocol": "TCP", "__meta_kubernetes_pod_controller_kind": "ReplicaSet", "__meta_kubernetes_pod_controller_name": "pushgateway-6d695f75cf", "__meta_kubernetes_pod_host_ip": "172.30.7.229", "__meta_kubernetes_pod_ip": "172.31.91.38", "__meta_kubernetes_pod_label_pod_template_hash": "6d695f75cf", "__meta_kubernetes_pod_label_workload_user_cattle_io_workloadselector": "pushgateway", "__meta_kubernetes_pod_labelpresent_pod_template_hash": "true", "__meta_kubernetes_pod_labelpresent_workload_user_cattle_io_workloadselector": "true", "__meta_kubernetes_pod_name": "pushgateway-flink-6d695f75cf-9jgdk", "__meta_kubernetes_pod_node_name": "erdong-test-7-229", "__meta_kubernetes_pod_phase": "Running", "__meta_kubernetes_pod_ready": "true", "__meta_kubernetes_pod_uid": "7b9662d8-1831-4440-9bc5-9523dbda0c12", "__metrics_path__": "/metrics", "__scheme__": "http", "__scrape_interval__": "20s", "__scrape_timeout__": "10s", "job": "pushgateway-k8s" },
...... "labels": {} }]
复制代码

检查配置文件

使用 Promtool 可以检查 Prometheus 的启动配置文件是否正确。参数如下:


./promtool check config [<flags>] <config-files>...
复制代码


我们执行命令来看一下:


./promtool check config /erdong/prometheus-pushgateway/conf/prometheus.ymlChecking /erdong/prometheus-pushgateway/conf/prometheus.yml SUCCESS: /erdong/prometheus-pushgateway/conf/prometheus.yml is valid prometheus config file syntax
复制代码


看到 SUCCESS 就表示这个配置文件是正常可以使用的,如果出现错误会进行提示。

检查 web-config

使用 Promtool 可以检查 web-config 配置文件


./promtool  check web-config <web-config-files>...
复制代码

检查告警规则和记录规则

使用 Promtool 可以检查告警规则和记录规则文件


./promtool  check rules [<flags>] <rule-files>...
复制代码


如果文件正常会输出 SUCCESS 的提示,如果文件不正常会输出对应的提示。

检查指标

使用 Promtool 可以检查指标,命令参数如下


./promtool  check metrics
复制代码


使用方式可以是以下两种中的任意一种。


$ cat metrics.prom | promtool check metrics
$ curl -s http://localhost:9090/metrics | promtool check metrics
复制代码


执行结果如下所示:


curl 127.0.0.1:9101/metrics | ./promtool check metrics  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100 2912k    0 2912k    0     0  7194k      0 --:--:-- --:--:-- --:--:-- 7208kcadvisor_version_info label names should be written in 'snake_case' not 'camelCase'cadvisor_version_info label names should be written in 'snake_case' not 'camelCase'cadvisor_version_info label names should be written in 'snake_case' not 'camelCase'cadvisor_version_info label names should be written in 'snake_case' not 'camelCase'cadvisor_version_info label names should be written in 'snake_case' not 'camelCase'container_fs_inodes_total non-counter metrics should not have "_total" suffixcontainer_memory_failcnt counter metrics should have "_total" suffix
复制代码

总结

上边就是 Promtool 提供的所有的检查功能,明天我们来看 Promtool 的其他功能。

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

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

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

评论

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