docker 中的多个端口用于 Prometheus 的 docker_sd 抓取

问题描述 投票:0回答:1

我发现对具有多个暴露端口的容器使用

docker_sd
存在问题。如果一个容器公开多个端口,并且仅在一个端口上有指标,则
docker_sd
会“发现”每个此类端口作为目标。其中只有一个有指标,其他人则处于“下降”状态,因为他们无法回答
/metrics

我想知道是否有办法使用

relabel_config
来删除一些端口的报废。但我找不到一种方法来将一个标签与另一个标签进行比较(我想我可以用

删除目标
__meta_docker_port_public != __meta_docker_container_label_scrape_port

或者类似的东西。

docker prometheus service-discovery
1个回答
0
投票

我遇到了类似的问题,我可以通过以下配置解决它,因为我的所有容器都使用相同的端口来获取指标。我可以用

relabel_config
删除所有其他端口:

<relabel_action>
确定要采取的重新标记操作:

  • replace
    :将
    regex
    与串联的
    source_labels
    进行匹配。然后,将
    target_label
    设置为
    replacement
    ,并用
    ${1}
    中的匹配组引用(
    ${2}
    replacement
    、...)替换为其值。如果
    regex
    不匹配,则不会进行替换。
  • lowercase
    :将连接的
    source_labels
    映射为其小写字母。
  • uppercase
    :将串联的
    source_labels
    映射为其大写。
  • keep
    :删除
    regex
    与串联的
    source_labels
    不匹配的目标。
  • drop
    :删除
    regex
    与串联的
    source_labels
    匹配的目标。

我的配置

scrape_configs:

  - job_name: docker
    metrics_path: '/prometheus'
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
    relabel_configs:
      - source_labels: [__meta_docker_port_private]
        regex: '8081'
        action: keep
      - source_labels: ['__meta_docker_container_name']
        regex: '/(.*)'
        target_label: 'job'
      - source_labels: [__meta_docker_container_log_stream]
        target_label: source
© www.soinside.com 2019 - 2024. All rights reserved.