Хеширование пароля и создание web.config.file

# Установка htpasswd:
sudo apt install -y apache2-utils
 
PASSWORD='<password>'
PASSWORDHASHED="$(echo ${PASSWORD} | htpasswd -inBC 10 '' | tr -d ':\n')"
 
echo "basic_auth_users:\n  admin: '$PASSWORDHASHED'" \
  | sudo tee /etc/prometheus/web.yml
# basic_auth_users:
#  admin: '$2y$10$VBQTOJXBEAIK086F/82Ob.TVrdExsDXRE2R5.gh3ZW.qoyFsTRQka'
 
# Проверяем файл 👇
promtool check web-config /etc/prometheus/web.yml

Чтобы не было такой ошибки:

Нужно добавить basic_auth в конфиг prometheus:

/etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    scrape_timeout: 5s
    static_configs:
      - targets: ['localhost:9090'] 
    
    basic_auth:
      username: '<your_username>'
      password: '<your_password>'

Изменение команды запуска Prometheus

Измени значение ExecStart в systemd-юните prometheus:

/etc/systemd/system/multi-user.target.wants/prometheus.service
ExecStart=/usr/local/bin/prometheus $ARGS\
  --config.file=/etc/prometheus/prometheus.yml \
  --web.config.file=/etc/prometheus/web.yml

Перезапускай сервер:

sudo systemctl daemon-reload
sudo systemctl restart prometheus
systemctl status prometheus

Тест

Обычный curl http://localhost:9090 не пустит и выдаст Unauthorized, поэтому нужно юзать ключ -u:

curl -u admin http://localhost:9090  # <интерактивный ввод пароля>
# Либо сразу с паролем (небезопасно):
curl -u 'admin':'<password>' http://localhost:9090

Sauce: Защита сервера Prometheus с помощью basic аутентификации
Prometheus