Commit 7ad44e

2025-08-10 13:16:15 Mayekkuzu: Updated again
monitoring/grafana prometheus.md ..
@@ 72,4 72,80 @@
apt_upgrades_pending{arch="",origin=""} 0
...
```
- Теперь перейдем в GUI Prometheus ip-or-fqdn:9090. Попробуем вывести какие-нибудь данные, например node_os_version должен вывести версию операционной системы.
+ Теперь перейдем в GUI Prometheus ip-or-fqdn:9090. Попробуем вывести какие-нибудь данные, например node_os_version должен вывести версию операционной системы. Выберем в выпадающем списке и нажмем Execute. В Console выведется информация. Если оперируете числовыми данными, такими как нагрузка на CPU, сеть или диск, то после Execute выбирайте вкладку Graph чтобы увидеть графики.
+ ![](./prometheus_gui_node_os_info.png)
+ ## Защита метрик с помощью Basic Auth
+ Задачка нетривиальная на самом деле потому что нужно крафтить хэш пароля. Вобщем ставим пакет python3-bcrypt.
+ ```bash
+ sudo apt install python3-bcrypt
+ ```
+ Далее создаем фаил gen-pass.py с таким содержимым
+ ```python
+ import getpass
+ import bcrypt
+
+ password = getpass.getpass("password: ")
+ hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
+ print(hashed_password.decode())
+ ```
+ Теперь формируем хеш пароля. Например наш пароль `SuperPuperSecurityYobaBoba`
+ ```bash
+ mayekkuzu@DESKTOP-ABA6QE3:~$ python3 gen-pass.py
+ password: SuperPuperSecurityYobaBoba
+ $2b$12$mR1OGgvYQ2DuBwOkNQ6STOrGFRp5hiofRzS3g7PhK489huQCN5eVa # это и есть наш хэш
+ ```
+ Создадим фаил /etc/prometheus/web.yml с таким содержимым
+ ```yaml
+ basic_auth_users:
+ admin: $2b$12$mR1OGgvYQ2DuBwOkNQ6STOrGFRp5hiofRzS3g7PhK489huQCN5eVa
+ ```
+ Далее обязательно проверяем фаил инструментом promtool на наличие ошибок:
+ ```bash
+ mayekkuzu@linux-term:~$ sudo promtool check web-config /etc/prometheus/web.yml
+ /etc/prometheus/web.yml SUCCESS
+ ```
+ Теперь нам необходимо фаил /etc/prometheus/web.yml передать как аргумент службе prometheus-node-exporter. Для этого приводим содержимое файла `/etc/default/prometheus-node-exporter` к такому виду:
+ ```bash
+ ARGS="--web.config.file=/etc/prometheus/web.yml"
+ ```
+ Далее делаем рестарт службы:
+ ```bash
+ sudo systemctl restart prometheus-node-exporter
+ sudo systemctl status prometheus-node-exporter
+ ```
+ Проверяем curl'ом доступ без пароля и с паролем:
+ ```bash
+ mayekkuzu@linux-term:~$ curl localhost:9100/metrics
+ Unauthorized
+ mayekkuzu@linux-term:~$ curl -u admin:SuperPuperSecurityYobaBoba localhost:9100/metrics
+ # HELP apt_autoremove_pending Apt packages pending autoremoval.
+ # TYPE apt_autoremove_pending gauge
+ apt_autoremove_pending 0
+ # HELP apt_package_cache_timestamp_seconds Apt update last run time.
+ # TYPE apt_package_cache_timestamp_seconds gauge
+ apt_package_cache_timestamp_seconds 1.754582275664897e+09
+ ...
+ ```
+ Теперь нужно понимать что Prometheus перестал получать метрики потому как они теперь закрыты за basic auth. В блоке с job node которая слушает наш node exporter приводим к такому виду в файле `/etc/prometheus/prometheus.yaml`
+ ```yaml
+ - job_name: node
+ # If prometheus-node-exporter is installed, grab stats about the local
+ # machine by default.
+ static_configs:
+ - targets: ['localhost:9100']
+ basic_auth:
+ username: 'admin'
+ password: 'SuperPuperSecurityYobaBoba'
+ ```
+ Обязательно проверяем конфигурацию
+ ```bash
+ mayekkuzu@linux-term:~$ sudo promtool check config /etc/prometheus/prometheus.yml
+ Checking /etc/prometheus/prometheus.yml
+ SUCCESS: /etc/prometheus/prometheus.yml is valid prometheus config file syntax
+ ```
+ ```bash
+ sudo systemctl restart prometheus
+ sudo systemctl status prometheus
+ ```
+ По аналогии выше попробуем дернуть произвольные данные, если подтягиваются то все сделано корректно
+ ##
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9