首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在正则表达式中为Prometheus重新标记配置使用标签

在正则表达式中为Prometheus重新标记配置使用标签
EN

Stack Overflow用户
提问于 2021-01-08 18:57:13
回答 1查看 566关注 0票数 3

我正试着在我的dockerswarm_sd_configs中根据网络过滤掉一些目标。如果我在配置文件中硬编码网络名称,但我想从docker标签(在我的docker compose中)设置过滤器,那么它是有效的。

这是我的Prometheus的配置文件:

代码语言:javascript
复制
 # Create a job for Docker Swarm containers.
  - job_name: 'dockerswarm'
    dockerswarm_sd_configs:
      - host: unix:///var/run/docker.sock
        role: tasks
        port: 80

    relabel_configs:
      # Only keep containers that should be running.
      - source_labels: [__meta_dockerswarm_task_desired_state]
        regex: running
        action: keep
      # Only keep containers that have a `prometheus-job` label.
      - source_labels: [__meta_dockerswarm_service_label_prometheus_job]
        regex: .+
        action: keep
      # Use the prometheus-job Swarm label as Prometheus job label.
      - source_labels: [__meta_dockerswarm_service_label_prometheus_job]
        target_label: job
      # Keep port
      - source_labels: [__meta_dockerswarm_service_label_port]
        target_label: port
      # Keep network
      - source_labels: [__meta_dockerswarm_service_label_scrape_network]
        target_label: network
      # Relabel address to inject custom port value
      - source_labels: [__address__, __meta_dockerswarm_service_label_port]
        action: replace
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: ${1}:${2}
        target_label: __address__
      # Check network
      - source_labels: [__meta_dockerswarm_network_name]
        # Works with hardcoded value but not an other label
        regex: network
        action: keep

有没有办法在regex字段中使用标签作为变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-12 20:59:07

这不是最简洁的答案,但我最终为我的两个prometheus做了一个单独的配置文件(每个docker网络一个)。最后一步现在看起来像这样:

代码语言:javascript
复制
      # Check network
      - source_labels: [__meta_dockerswarm_network_name,__meta_dockerswarm_service_label_prometheus_scrape_network]
        regex: network1;network1
        action: keep

第一行(source_labels)收集“元网络名称”(从docker中为这个目标抓取的网络名称)和“标签网络”,这是在我的docker堆栈中给出的:

代码语言:javascript
复制
      labels:
        # Prometheus Swarm
        - prometheus-job=myJobsName
        - prometheus-port=3000
        - prometheus-scrape-network=network1
        - prometheus-env=production

第二行检查标签是否等于network1;network1,因此它将过滤掉另一个网络上的“重复”目标(因为另一个将等于network2;network1)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65627733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档