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 的其他功能。

results matching ""

    No results matching ""