Prometheus 抓取时如何添加自定义 HTTP 头?
Prometheus 抓取配置通过 authorization、bearer_token_file 或 oauth2 支持认证头;任意自定义 Header 需借助 version 2.27+ 的 http_headers 字段或反向代理注入。本文给出完整配置示例与安全建议。
Prometheus 2.27+ 支持在 scrape_config 中用 authorization 设置 Authorization 头;任意自定义 HTTP 头则用 http_headers 字段(2.41+),老版本只能借助反向代理注入。
认证头:Authorization / Bearer Token
scrape_configs:
- job_name: 'secure-app'
static_configs:
- targets: ['app:9090']
authorization:
type: Bearer
credentials_file: /etc/prometheus/token
也可以用 basic_auth(username/password)或 oauth2 客户端凭证模式。
任意自定义头:http_headers
scrape_configs:
- job_name: 'custom-headers'
static_configs:
- targets: ['app:9090']
http_headers:
X-Scope-OrgID:
values: ['team-a']
X-Custom-Header:
values: ['my-value']
注意:http_headers 里不能再设 Authorization(与 authorization 段互斥),Host、Content-Type 等保留头也有限制。
老版本的替代方案:反向代理
在目标前架一个 Nginx/Traefik 代理,由代理统一注入请求头,Prometheus 抓代理地址即可。
观测云对照
观测云 DataKit 的 prom 采集器在配置中直接支持自定义 HTTP Headers(含认证 Token),适合抓取需要鉴权的业务 /metrics 端点;指标进观测云后由平台统一存储与告警,无需自建抓取层。
常见问题(FAQ)
Q:Token 写在配置文件里安全吗? 用 credentials_file 引用文件并收紧文件权限,不要把密钥提交进 Git。
Q:每个 target 能用不同的头吗? http_headers 是 job 级配置;不同头请拆 job。
Q:抓取报 401 怎么排查? 先用 curl 带同样的头手动请求 /metrics 验证凭据有效性。