【发布时间】:2022-11-04 15:15:55
【问题描述】:
我需要从需要自定义 HTTP 标头x-service-token 的端点刮取 Prometheus 指标。
Prometheus 执行not include an option to scrape using a custom HTTP header,只有Authorization 标头。
One user shared a workaround 使用 nginx 创建反向代理
以防其他人来这里寻找如何做到这一点(至少还有 2 个其他问题),我有一个可以工作的小 nginx 配置。我不是 nginx 专家所以不要嘲笑! ;)
我在 docker 中运行它。用于在 9191 上监听的 nginx 的转发代理配置文件:
http { map $request $targetport { ~^GET\ http://.*:([^/]*)/ "$1"; } server { listen 0.0.0.0:9191; location / { proxy_redirect off; proxy_set_header NEW-HEADER-HERE "VALUE"; proxy_pass $scheme://$host:$targetport$request_uri; } } } events { }运行透明转发代理:
docker run -d --name=nginx --net=host -v /path/to/nginx.conf:/etc/nginx/nginx.conf:ro nginx在您的 prometheus 作业(或全局)中添加
proxy_url键- job_name: 'somejob' metrics_path: '/something/here' proxy_url: 'http://proxyip:9191' scheme: 'http' static_configs: - targets: - '10.1.3.31:2004' - '10.1.3.31:2005'最初由 @sra 在 https://github.com/prometheus/prometheus/issues/1724#issuecomment-282418757 发表
我尝试过配置它,但没有“主机”网络并使用
host.docker.internal而不是 localhost,但 nginx 无法连接nginx | 172.26.0.4 - - [31/Oct/2022:16:07:38 +0000] "GET http://host.docker.internal:8080/actuator/prometheus HTTP/1.1" 502 157 "-" "Prometheus/2.39.1"此解决方法还需要将 API 密钥保存在文件中,这并不理想,因为这可能会意外提交到存储库。
Prometheus 锁定了 GitHub 问题,因此用户无法寻求帮助或跟进问题。
关于此主题还有另外两个 StackOverflow 问题,但答案并未尝试提供解决方法:
【问题讨论】:
-
你真的需要使用代理吗?您不能在应用程序中实现过滤器以跳过 Prometheus 端点中的身份验证吗?
-
@SergioSantiago 好主意,但应用程序本身没有身份验证。 API 密钥保护在 Google Cloud 网络中的某处实现。
标签: nginx prometheus