【发布时间】:2021-01-08 10:57:12
【问题描述】:
我正在尝试通过我的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
有没有办法在正则表达式字段中使用标签作为变量?
【问题讨论】:
-
如果有人有,我仍在寻找更好的答案。
标签: docker prometheus docker-swarm