当 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 密钥应使用受支持的自定义头字段。

相关文章