в debian, nginx, prometheus

Prometheus: базовая авторизация

prometheus
По заверениям разработчиков системы мониторинга Prometheus, они специально не уделяли внимания поддержке авторизации, сконцентрировавшись на более важных и «революционных» вещах.

В итоге, метрики, которые собирает, например, node_exporter, доступны для просмотра любому желающему по адресу http://[IP-адрес сервера]:9100/metrics. Как добавить базовую авторизацию в Prometheus — давайте разберемся!

Считаем, что у нас установлены все необходимые компоненты системы мониторинга Prometheus, а также веб-сервер Nginx.

В конфигурационном файле /etc/nginx/nginx.conf добавим описание нашего сервера:

...
server {
    listen 0.0.0.0:19100;
    location / { 
      proxy_pass http://localhost:9100/;

      auth_basic "Prometheus";
      auth_basic_user_file ".htpasswd";
    }
  }
...

Примечание. Это лишь базовый пример настройки, если у вас на сервере расположено несколько веб-сайтов то конфиг будет выглядеть иначе.

С помощью утилиты htpasswd, которая входит в состав пакета apache2-utils, создадим нового пользователя, учетные данные которого будут использоваться для доступа к метрикам node_exporter. Назовем его «testuser»:

htpasswd -c .htpasswd testuser
New password: 
Re-type new password: 
Adding password for user testuser

Файл .htpasswd состоит из строк, каждая из которых соответствует паре логин/хеш пароля. Логин отделяется от хеша пароля двоеточием. Пример содержимого файла .htpasswd:

testuser:eCc5ls0kn3MEXyserbY

Перечитаем конфиг веб-сервера Nginx командой:

nginx -s reload

Теперь при переходе по адресу http://[IP-адрес сервера]:19100 необходимо будет ввести логин/пароль созданного с помощью утилиты htpasswd пользователя.

Аналогичным образом можно настроить базовую авторизацию и для остальных компонентов системы мониторинга Prometheus, например Alertmanager, Pushgateway и т. д.

Добавить комментарий

  1. Добрый день, Евгений.
    Вы не знаете сейчас ситуация с авторизацией у Prometheus изменилась?
    У них в документации кое-что появилось по авторизации. Но смущает что это в блоках remote write и remote read.

    • Здравствуйте, Александр!
      Вы, скорее всего, имеете в виду эти строки:

      # Sets the `Authorization` header on every remote read request with the
      # configured username and password.
      basic_auth:
        [ username:  ]
        [ password:  ]

      Они есть не только в блоках remote write и remote read, и этот параметр позволяет указать параметры авторизации на [хосте|сайте|сервисе], к которому подключается Prometheus

      Нам же нужно нечто другое — закрыть Prometheus от посторонних. Других вариантов я пока не встречал, поэтому если у вас получится найти другое решение — обязательно поделитесь

  2. все бы хорошо, только совсем ничего не написано, как конфиг node-exporter переделать под localhost:9100 и не давать поднимать порт на 0.0.0.0

    • С помощью параметра -web.listen-address можно запускать node_exporter на другом порту (или вообще по другом пути).
      Но вот что касается «не давать поднимать порт на 0.0.0.0» — к сожалению, пока нет такой возможности, и порт поднимается на всех доступных интерфейсах в системе, включая ipv6

      • так вот я про тоже.
        получается, что через nginx я поднимаю только для удобства и то не на стандартном порту.
        как быть с защитой данных ?

        • Увы, с защитой данный не все гладко )))
          Как вариант, можно в nginx прописать ip-адреса, с которых разрешен доступ…
          Ну или использовать docker-контейнер с пробросом портом (но если действительно важна безопасность, то не использовать готовые контейнеры из интернета)

          • я пока вижу решение — через iptable закрыть доступ на 9100, либо же его открывать только для списка доверенных лиц (адресов). по моему, проще, чем городить на nginx авторизацию. не находите ?

          • верно, вполне хороший вариант.
            Ну а дальше можно еще что-нибудь придумать, например прикрутить fail2ban и уведомления на почту…