prometheus 动态metrics_path

dan*_*996 2 service-discovery kubernetes prometheus

Prometheus 允许我从这样的 .json 文件中使用 file_sd_config 动态加载目标

#prometheus.yaml
- job_name: 'kube-metrics'
  file_sd_configs:
  - files:
    - 'targets.json'
Run Code Online (Sandbox Code Playgroud)
[
  {
    "labels": {
      "job": "kube-metrics"
    },
    "targets": [
      "http://node1:8080",
      "http://node2:8080"
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

但是,我的目标在metrics_path主机而不是主机上有所不同(我想为 上的每个 kubernetes 节点抓取指标<kube-api-server>/api/v1/nodes/<node-name>/proxy/metrics/cadvisor),但我只能metrics_path在作业级别而不是每个目标设置。这是否可以通过普罗米修斯实现,或者我是否必须编写自己的代码来抓取所有这些指标并将它们导出到单个目标。此外,我找不到所有支持的自动发现机制的列表,我是否遗漏了文档中的某些内容?

Mic*_*bez 7

您可以在 Prometheus 配置中使用relabel_config来更改__metrics_path__标签配置。

原则是在表单下的目标中提供度量路径host:port/path/of/metrics(注意:删除http://,它在 的scheme参数中scrape_config

[
  {
    "targets": [
      "node1:8080/first-metrics",
      "node2:8080/second-metrics"
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

然后用零件替换相关的元标签

- job_name: 'kube-metrics'
  file_sd_configs:
  - files:
    - 'targets.json'
  relabel_configs:
    - source_labels: [__address__]
      regex:  '[^/]+(/.*)'            # capture '/...' part
      target_label: __metrics_path__  # change metrics path
    - source_labels: [__address__]
      regex:  '([^/]+)/.*'            # capture host:port
      target_label: __address__       # change target
Run Code Online (Sandbox Code Playgroud)

您可以在配置时已知的任何标签上重用此方法来修改刮取的配置。

在 Prometheus 上,使用服务发现页面检查您的配置是否已正确修改。

服务发现的官方列表在配置文档中*_sd_config在索引中查找。


tom*_*omo 6

有一种稍微优雅的方法可以做到这一点,该方法不涉及操作地址。您可以为您的目标添加一个标签,该标签可以作为“重新标记”操作的来源,如下所示:

- labels:
    __meta_discovery_path: '/first-metrics'
  targets:
  - 'node1:8080'
- labels:
    __meta_discovery_path: '/second-metrics'
  targets:
  - 'node2:8080'
Run Code Online (Sandbox Code Playgroud)

然后你的重新标签就很简单:

  relabel_configs:
    - source_labels: [__meta_discovery_path]
      target_label: __metrics_path__  # change metrics path
Run Code Online (Sandbox Code Playgroud)

由于正在使用的标签以“__”开头,因此它将从正在拉取的指标中删除,使其变得漂亮和干净。