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

标签 docker prometheus docker-swarm

我试图在我的 dockerswarm_sd_configs 中通过网络过滤掉一些目标。如果我在配置文件中硬编码网络名称但我想从 docker 标签(在我的 docker compose 中)设置过滤器,它就可以工作。

这是我的 Prometheus 配置文件:

 # 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

有没有办法在正则表达式字段中使用标签作为变量?

最佳答案

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

      # Check network
      - source_labels: [__meta_dockerswarm_network_name,__meta_dockerswarm_service_label_prometheus_scrape_network]
        regex: network1;network1
        action: keep

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

      labels:
        # Prometheus Swarm
        - prometheus-job=myJobsName
        - prometheus-port=3000
        - prometheus-scrape-network=network1
        - prometheus-env=production

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

关于docker - 在正则表达式中为 Prometheus 重新标记配置使用标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65627733/

相关文章:

docker - 移除故障节点后 Docker Swarm 中的孤立任务

docker 堆栈部署 depends_on

linux - 从服务器上的用户运行不受信任的可执行文件的最佳方法

performance - Prometheus-将cpu_user_seconds转换为CPU使用率%?

maven - 如何从 Java (Spring boot) 应用程序向 Prometheus 公开指标

nginx proxyPass 使用变量传递给普罗米修斯

Docker swarm加入linux容器错误-远程CA与指纹不匹配

Docker Bridge 与主机网络冲突

docker - 我可以强制applescript同步运行吗?

docker - 同时使用nginx模板功能和重新加载解决方案