global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: # ── Docker SD: containers with prometheus.io/scrape=true are auto-discovered ── - job_name: 'docker' docker_sd_configs: - host: unix:///var/run/docker.sock refresh_interval: 15s filters: - name: label values: - prometheus.io/scrape=true relabel_configs: - source_labels: [__meta_docker_container_name] target_label: container regex: '/(.*)' replacement: '${1}' - source_labels: [__meta_docker_container_label_prometheus_io_port] regex: '(.+)' target_label: __metrics_path__ replacement: '/metrics' - source_labels: [__meta_docker_container_label_prometheus_io_path] regex: '(.+)' target_label: __metrics_path__ replacement: '${1}' - source_labels: [__address__] target_label: instance # ── OTel Collector ── - job_name: 'otel-collector' scrape_interval: 10s metrics_path: /metrics static_configs: - targets: ['otel-collector:8889'] labels: service: otel-collector # ── Node Exporter ── - job_name: 'node' scrape_interval: 15s static_configs: - targets: ['node-exporter:9100']