Prometheus配置通过file_sd_configs中每个目标的module标签信息重置每个目标的metrics_path

配置方式如下:

scrape_configs:
- job_name: 'file_sd' 
  file_sd_configs:
  - files: 
    - targets.json
  relabel_configs:
  - source_labels: [__address__]
    regex: (http://)([^:]+)
    target_label: __address__ 
    replacement: http://${2}
  - source_labels: [__port__] 
    regex: (\d+)
    target_label: __port__
    replacement: ':${1}'   
  - source_labels: [__module__] 
    regex: ([a-z0-9-]+)    
    target_label: __module__
    replacement: /${1}
  - source_labels: [__module__]
    target_label: metrics_path

这里:

  • 通过前 3 个 relabel_config 从 addressport 标签生成 host 和 port
  • module 标签的值通过最后一个 relabel_config 直接作为 metrics_path
  • 所以 module 标签的值会覆盖通过 regex 生成的默认路径
    例如,targets.json 中有以下目标:
[
  {
    "targets": ["http://host1:9090"],
    "labels": {
      "__module__": "app1" 
    }
  },
  {
    "targets": ["http://host2:9091"],
    "labels": {
      "__module__": "app2"
    }
  }
]

那么 Prometheus 最终会使用以下 metrics_path:

  • /app1
  • /app2
    因为 module 标签的值会直接作为 metrics_path,覆盖 regex 生成的默认值。

具体我的配置示例:
JSON文件中:

[
  {
    "targets": [
      "127.0.0.1:8080"
    ],
    "labels": {
      "module": "customer"
    }
  },
  {
    "targets": [
      "127.0.0.1:8081"
    ],
    "labels": {
      "module": "web"
    }
  }
 ]

Prometheus中scrape_configs中配置file_sd_config:

scrape_configs:
  - job_name: 'App-service_job'
    file_sd_configs:
      - files:
          - /xxx/targets.json
    relabel_configs:
      - target_label: __metrics_path__
        source_labels: [module]
        replacement: /${1}/actuator/prometheus

source_labels: 源标签名称 [module]是用于获取JSON文件中配置目标的标签“target”
target_label:目标标签名称
replacement:替换值

你可能感兴趣的:(prometheus)