Prometheus:用 http_headers 和 proxy_url 设置目标 API 密钥
把抓取的 http_headers 与 proxy_url 组合起来,并让源服务器的 API 头与发往中间代理的 CONNECT 头保持分离。
当 HTTPS 指标端点要求 API 密钥,而 Prometheus 必须使用正向代理时,应把该头设置在抓取请求本身。对于支持 http_headers 的 Prometheus 版本:
scrape_configs:
- job_name: secured_metrics
scheme: https
metrics_path: /metrics
proxy_url: http://proxy.example:8080
http_headers:
X-API-Key:
files:
- /etc/prometheus/secrets/metrics-api-key
static_configs:
- targets: ['metrics.example:443']
该文件包含预期的目标 API 密钥,并且必须能在 Prometheus 执行环境中读取。在容器中,请把它放在容器内的相应路径。
http_headers 会把 X-API-Key 放到发往 metrics.example 的请求上。经过普通的 HTTPS CONNECT 隧道时,该头位于目的端 TLS 内部传输。中间代理负责提供连通性,并必须允许该隧道。对于允许使用公共中间代理、可公开访问的指标端点,HTTP 代理列表可提供无需账号的 proxy_url 候选;请把 API 密钥保留在发往目的端的请求上。
proxy_connect_header 的去向不同:中间代理在 CONNECT 时接收这些头。把目标 API 密钥放在那里,并不会作为 HTTPS 请求头送达指标服务器。
请把实际的指标主机名和路径保留在抓取配置中。Prometheus 还会保护自己设置的头不被随意覆盖,因此这个 API 密钥应使用受支持的自定义头字段。