Prometheus 运维工具 Promtool (一)Check 功能
Promtool 是 Prometheus 提供的一个运维工具,用来对 Prometheus 进行检查,之前只有最简单的检查配置文件和规则文件的功能,现在已经有了更多的新功能,包括查询指标、debug 服务、对数据库进行检查等等。这次我们基于 2.37.0 版本进行一次梳理,如果版本低于这个版本,在使用前请确认要用到的功能是否已经添加,如果是版本比 2.37.0 高,请检查相关功能是否有更新。
查看 Promtool 工具的帮助信息可以看到如下信息:
[root@Erdong-Test ~]# ./promtool --help
usage: 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 --version
promtool, 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 即可。
[root@Erdong-Test ~]# ./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>...
我们执行命令来看一下:
[root@Erdong-Test ~]# ./promtool check config /erdong/prometheus-pushgateway/conf/prometheus.yml
Checking /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 可以检查告警规则和记录规则文件
[root@Erdong-Test ~]# ./promtool check rules [<flags>] <rule-files>...
如果文件正常会输出 SUCCESS 的提示,如果文件不正常会输出对应的提示。
检查指标
使用 Promtool 可以检查指标,命令参数如下
promtool check metrics
使用方式可以是以下两种中的任意一种。
[root@Erdong-Test ~]# cat metrics.prom | promtool check metrics
[root@Erdong-Test ~]# curl -s http://localhost:9090/metrics | promtool check metrics
执行结果如下所示:
[root@Erdong-Test ~]# curl 127.0.0.1:9101/metrics | ./promtool check metrics
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2912k 0 2912k 0 0 7194k 0 --:--:-- --:--:-- --:--:-- 7208k
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'
cadvisor_version_info label names should be written in 'snake_case' not 'camelCase'
container_fs_inodes_total non-counter metrics should not have "_total" suffix
container_memory_failcnt counter metrics should have "_total" suffix
总结
上边就是 Promtool 提供的所有的检查功能,明天我们来看 Promtool 的其他功能。