我发现对具有多个暴露端口的容器使用
docker_sd
存在问题。如果一个容器公开多个端口,并且仅在一个端口上有指标,则 docker_sd
会“发现”每个此类端口作为目标。其中只有一个有指标,其他人则处于“下降”状态,因为他们无法回答 /metrics
。
我想知道是否有办法使用
relabel_config
来删除一些端口的报废。但我找不到一种方法来将一个标签与另一个标签进行比较(我想我可以用删除目标
__meta_docker_port_public != __meta_docker_container_label_scrape_port
或者类似的东西。
我遇到了类似的问题,我可以通过以下配置解决它,因为我的所有容器都使用相同的端口来获取指标。我可以用
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