Установка Prometheus на Alma Linux 8

установить wget, если нет:

dnf install wget

добавить пользователя prometheus:

useradd -m -s /bin/false prometheus

создать директорию /var/lib/prometheus и назначить на нее владельца prometheus:

mkdir /var/lib/prometheus && chown prometheus /var/lib/prometheus/

посмотреть последний релиз на github:

echo "$(curl -I https://github.com/prometheus/prometheus/releases/latest | awk -F '/' '/^location/ {print  substr($NF, 1, length($NF)-1)}')"

пример результата:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
v2.51.1

скачать последний релиз (в данном случае: 2.51.1):

wget https://github.com/prometheus/prometheus/releases/download/v2.51.1/prometheus-2.51.1.linux-amd64.tar.gz

распаковать скачанный архив и перейти в распакованную директорию:

tar -xzvf prometheus-*.linux-*.tar.gz && cd prometheus-*.linux-*/

переместить исполняемые файлы в /usr/local/bin:

mv prometheus /usr/local/bin && mv promtool /usr/local/bin

поднятся на уровень выше и переместить директорию в /etc с переименованием:

cd .. && mv prometheus-*.linux-*/ /etc/prometheus

если нужен прямой доступ к Prometheus, то открываем порт 9090:

firewall-cmd --add-port=9090/tcp --permanent && firewall-cmd --reload

создать файл /etc/systemd/system/prometheus.service и заполнить:

[Unit]
Description=Prometheus Time Series Collection and Processing Server
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
    --config.file /etc/prometheus/prometheus.yml \
    --storage.tsdb.path /var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target

перечитать демоны:

systemctl daemon-reload

запустить и добавить в автозапуск сервис Prometheus:

systemctl start prometheus && systemctl enable prometheus

проверить порт 9090:

netstat -tunlp | grep 9090

пример результата:

tcp6       0      0 :::9090                 :::*                    LISTEN      1015899/prometheus

доступно если открыт порт был в firewalld: http://server-ip:9090/graph

 

пример как можно спрятать панель Prometheus через прокси NGINX:

# ...
server {

    # ...

    location /prometheus-pA6tK1zS5fyY/ {
        proxy_pass http://127.0.0.1:9090/;
        proxy_redirect http://127.0.0.1:9090 /;
        proxy_set_header Host $host:443;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HTTPS YES;
        access_log off;
    }

    # ...

}

Prometheus URL: https://srv01.example.com/prometheus-pA6tK1zS5fyY/graph

 

Установка node_exporter

добавить пользователя node_exporter:

useradd -m -s /bin/false node_exporter

посмотреть последнюю версию релиза node_exporter:

echo "$(curl -I https://github.com/prometheus/node_exporter/releases/latest | awk -F '/' '/^location/ {print substr($NF, 1, length($NF)-1)}')"

пример результата:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
v1.7.0

скачать последний релиз (в данном случае: 1.7.0):

wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

разархивировать:

tar -xzvf node_exporter-*.linux-*.tar.gz

скопировать исполняемый файл:

cp node_exporter-*.linux-*/node_exporter /usr/local/bin

назначить на исполняемый файл владельца node_exporter:

chown node_exporter:node_exporter /usr/local/bin/node_exporter

создать файл /etc/systemd/system/node_exporter.service и заполнить:

[Unit]
Description=Prometheus Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

перечитать демоны:

systemctl daemon-reload

запустить и добавить в автозапуск сервис node_exporter:

systemctl start node_exporter && systemctl enable node_exporter

проверить, что порт 9100 прослушивается:

netstat -pnltu | grep 9100

пример результата:

tcp6       0      0 :::9100                 :::*                    LISTEN      1018264/node_export

добавление в firewall, чтобы был доступен для всех:

firewall-cmd --add-port=9100/tcp --permanent && firewall-cmd --reload

для firewall. добавить чтобы было доступно только для IP 1.1.1.1:

firewall-cmd --new-zone=prometheus --permanent && firewall-cmd --zone=prometheus --add-source=1.1.1.1 --permanent && firewall-cmd --zone=prometheus --add-port=9100/tcp  --permanent && firewall-cmd --reload

для iptables. добавить чтобы было доступно только для IP 1.1.1.1:

iptables -I INPUT -s 1.1.1.1 -p tcp -m tcp --dport 9100 -j ACCEPT && service iptables save

для добавления node_exporter нужно на сервере Prometheus открыть /etc/prometheus/prometheus.yml и добавить для локального node_exporter:

# ...
scrape_configs:
  # ...
  - job_name: "node_exporter"
    static_configs:
      - targets: ["localhost:9100"]

если на другом сервере будет примерно:

# ...
      - targets: ["192.168.0.5:9100"]

если несколько серверов:

# ...
      - targets: ["localhist:9100", "192.168.0.5:9100", "192.168.0.8:9100"]

на сервере где Prometheus пезапустить Prometheus:

systemctl restart prometheus

для просмотра подключенных node_exporter к Prometheus нужно перейти: http://server-ip:9090/targets

Установка и настройка Grafana

установить с текущего сайта:

dnf install https://disweb.ru/files/rpm/grafana-enterprise-10.4.1-1.x86_64.rpm

или можно установить с официального сайта: https://grafana.com/grafana/download

запустить и добавить в автозапуск:

systemctl start grafana-server && systemctl enable grafana-server

указать пароль админа:

grafana-cli admin reset-admin-password ПАРОЛЬ_АДМИНА

в итоге логин: admin, пароль который указали

по умолчанию Grafana доступен: http://server-ip:3000/

для подключения Prometheus переходим:
Connections -> Data sources -> Add data source

нажимаем на Prometheus

указываем адрес и порт Prometheus (к примеру: http://localhost:9090)

в самом низу нажимаем «Save & test»

при успешном подключени к Prometheus

для добавления Dashboard переходим:
Connections -> Data sources -> Build a dashboard

нажимаем «Import dashboard»

конфигурация dashboard для мониторинга Linux:

https://grafana.com/grafana/dashboards/1860-node-exporter-full/

https://grafana.com/grafana/dashboards/10180-kds-linux-hosts/

выбираем файл конфигурации или указываем ID (к примеру для Linux Host: 1860 или 10180), нажимаем «Load»

выбираем источник и нажимаем «Import»

в результате:

 

настройка NGINX для скрытия Grafana в подпути:

# ...
server {

    # ...

    location /status-gX5eJ2rU8woQ/ {
        proxy_pass http://127.0.0.1:3000/;
        proxy_redirect http://127.0.0.1:3000 /;
        proxy_set_header Host $host:443;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HTTPS YES;
        access_log off;
    }

    # ...

}
# ...

если подпуть меняется нужно указать его в /etc/grafana/grafana.ini:

; ...
root_url=https://srv01.example.com/status-gX5eJ2rU8woQ/
; ...

Grafana URL: https://srv01.example.com/status-gX5eJ2rU8woQ/