Prometheus 1.5.2 位于 Apache 2.4 反向代理之后

Prometheus 1.5.2 位于 Apache 2.4 反向代理之后

我想将 Prometheus 置于 Apache 反向代理后面,以进行身份​​验证和访问控制。这适用于 Debian Stretch 附带的 Prometheus 版本(prometheus --version表示version 1.5.2+ds (branch: debian/sid, revision: 1.5.2+ds-2+b3))和 Apache 2.4。

我已经让 Prometheus 处于监听状态127.0.0.1:9090(例如根据),并且我的配置netstat -tlpn中有以下内容:VirtualHost

<Location "/prometheus">
  ProxyPass "http://localhost:9090"
  ProxyPassReverse "http://localhost:9090"
</Location>

但是,当我访问时,会发生https://my-server.com/prometheus重定向https://my-server.com/graph(通过 HTTP 状态代码 302 和Location: /graph),而当前配置下的反向代理无法提供服务。

我如何更改此版本 Prometheus 的配置)以便对 的访问https://my-server.com/prometheus能够成功重定向到https://my-server.com/prometheus/graph,即所有与 Prometheus 相关的“事物”都将在通用 URL 前缀下提供服务/prometheus

更新目前令我困惑的是,普罗米修斯的CHANGELOG.md表示命令行标志-web.route-prefix是在 1.0.0 版本中引入的,但是 Debian 软件包中/etc/default/prometheus没有提到这个标志,尽管它提到了许多其他标志(好像它不支持它,尽管表面上是基于 1.5.2 版本)。

答案1

我现在正在运行较新版本的 Prometheus,在 1.X 系列中也有这个版本,

-web.external-url=https://<proxyhost>/prometheus

尝试看看它是否适用于你的版本(我在网上找不到任何旧文档,但有一些旧的 github问题似乎也与此相关)。

答案2

您还必须进行配置--web.route-prefix

http://TOTO/prometheus“--> nginx -->”http://本地主机:9090“--> 普罗米修斯

解决方案是:

-web.external-url=https://<proxyhost>/prometheus --web.route-prefix=/

答案3

即使没有 Prometheus-core 端的“-web.external-url”选项,以下配置也能正常工作。您还可以在同一个 VirtualHost 内重定向警报管理器。因此,/prometheus/ 上是 Prometheus,/manager/ 上是警报管理器

<VirtualHost *:80>
    ProxyRequests On
    ProxyPreserveHost On
    RewriteEngine On
    ProxyPass /prometheus/ http://localhost:9090/
    ProxyPassReverse /prometheus/ http://localhost:9090/
    Redirect "/" "/prometheus/"

    ProxyPass /manager/ http://localhost:9093/
    ProxyPassReverse /manager/ http://localhost:9093/
    Redirect "/#/alerts" "/manager/#/alerts"
</VirtualHost>

答案4

以下针对反向代理的 Apache 配置(仅显示相关部分)解决了我所遇到的问题(虽然方式有点笨拙):

<Location "/">
  Redirect "/alerts" "/prometheus/alerts"
  Redirect "/api" "/prometheus/api"
  Redirect "/config" "/prometheus/config"
  Redirect "/flags" "/prometheus/flags"
  Redirect "/graph" "/prometheus/graph"
  Redirect "/rules" "/prometheus/rules"
  Redirect "/static" "/prometheus/static"
  Redirect "/status" "/prometheus/status"
  Redirect "/targets" "/prometheus/targets"
</Location>
<Location "/prometheus">
  ProxyPass "http://localhost:9090"
  ProxyPassReverse "http://localhost:9090"
</Location>

相关内容