Назад | Перейти на главную страницу

Prometheus 1.5.2 за обратным прокси Apache 2.4

Я хочу разместить Prometheus за обратным прокси-сервером Apache для аутентификации и контроля доступа. Это для версии Prometheus, которая поставляется с Debian Stretch (prometheus --version указывает version 1.5.2+ds (branch: debian/sid, revision: 1.5.2+ds-2+b3)) и для Apache 2.4.

Меня уже слушает Прометей 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).

Сейчас я использую более новые версии prometheus, у меня это тоже было в серии 1.X,

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

Попробуйте и посмотрите, работает ли это в вашей версии (я не могу найти в Интернете старую документацию, но некоторые старые github вопросы похоже, тоже имеет к нему отношение).

Вы также должны настроить --web.route-prefix.

"http: // TOTO / prometheus"-> nginx ->"http: // локальный: 9090"-> Прометей

Решение такое:

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

Следующая конфигурация 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>

Конфигурация ниже работает даже без опции "-web.external-url" на стороне Prometheus-core. Вы также можете перенаправить Alert Manager в том же VirtualHost. Итак, на / 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>