User Tools

Site Tools


prometheus_grafana_node_exporter

Мониторинг серверов на основе Prometheus Grafana Node_exporter

Установка и настройка на сервер ОС Ubuntu 22.04 LTS x86_64.

Описание компонентов

Prometheus – сервер, предназначенный для сбора и хранения данных. Данные постоянно изменяются во времени (например, уровень заполненности диска, трафик через сетевой интерфейс, время отклика сайта). Элементы данных называются метриками. Сервер Prometheus с заданной периодичностью считывает метрики и помещает полученные данные в Time Series DB. Time Series DB – это разновидность баз данных, предназначенная для хранения временных рядов (значений с привязкой ко времени). Кроме того, Prometheus предоставляет интерфейс для выполнения запросов и визуализации полученных данных. Язык запросов Prometheus называется PromQL. Prometheus работает по модели Pull, то есть он сам опрашивает endpoints с целью получения данных.

Exporters – процессы, обеспечивающие сбор и их передачу серверу Prometheus. Существует много разных exporters, например:

  • Node_exporter – сбор системных метрик (процессор, память, и т.д.).
  • Mysqld_exporter – сбор метрик работы сервера MySQL.
  • Postgres_exporter – сбор метрик работы сервера PostgreSQL.

После запуска exporter начинает сбор соответствующих метрик и ожидает запросов от сервера Prometheus по заданному порту. Данных передаются в формате http.

Grafana – frontend для визуализации накопленных данных, может использоваться для работы с данными сервера Prometheus, предоставляет различные преднастроенные Dashboard для отображения данных.

Помимо функций сбора, анализа и визуализации данных, Prometheus и Grafana поддерживают настраиваемые оповещения. В Grafana этот механизм является встроенным, в Prometheus он реализуется отдельным компонентом Alert_manager

Установка Prometheus

Создадим пользователя prometheus и одноименную группу, от имени которых будет запускаться prometheus:

groupadd --system prometheus 
useradd --system -g prometheus -s /bin/false prometheus

На сайте разработчика смотрим актуальную версию. На момент написание – 2.41.0

Создадим переменную:

export VERSION="2.41.0"

Скачиваем архив prometheus и распакуйте его в папку /tmp/prometheus:

mkdir -p /tmp/prometheus
 
cd /tmp/prometheus
 
wget https://github.com/prometheus/prometheus/releases/download/v$VERSION/prometheus-$VERSION.linux-amd64.tar.gz -O - | tar -xzv -C /tmp/prometheus

Создадим директории:

# для конфигурационного файла
mkdir /etc/prometheus
 
# для данных
mkdir /var/lib/prometheus

Копируем бинарники:

cp /tmp/prometheus/prometheus-$VERSION.linux-amd64/prometheus /usr/local/bin
cp /tmp/prometheus/prometheus-$VERSION.linux-amd64/promtool /usr/local/bin
 
chown prometheus:prometheus /usr/local/bin/prometheus
chown prometheus:prometheus /usr/local/bin/promtool

Копируем библиотек консоли Prometheus:

cp -r prometheus-$VERSION.linux-amd64/consoles /etc/prometheus/
cp -r prometheus-$VERSION.linux-amd64/console_libraries /etc/prometheus/
cp -r prometheus-$VERSION.linux-amd64/prometheus.yml /etc/prometheus/
 
chown -R prometheus. /etc/prometheus/

Проверяем версии бинарников:

prometheus --version
promtool --version

Создание юнит файла Prometheus

Prometheus можно запустить в качестве службы, указав ему пути к конфигам вот таким образом:

sudo -u prometheus /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

Создим юнит файл /etc/systemd/system/prometheus.service сервиса Prometheus со следующим содержимым:

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
 
[Service]
User=prometheus
Group=prometheus
Restart=always
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 \
    --web.listen-address=0.0.0.0:9090
 
[Install]
WantedBy=multi-user.target

Далее:

sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus

Accessing Prometheus

sudo ufw allow 9090/tcp

Теперь служба Prometheus готова к работе, и мы можем получить к ней доступ из любого веб-браузера по адресу http://server-IP-or-Hostname:9090

Install Node Exporter

Актуальную версию node_exporter берем с официального сайта разработчика. На момент написание статьи, это – 1.5.0

wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
sudo tar xvzf node_exporter-1.5.0.linux-amd64.tar.gz
cp node_exporter-1.5.0.linux-amd64/node_exporter /usr/local/bin
chown prometheus. /usr/local/bin/node_exporter

Далее, создаем юнит – /etc/systemd/system/node_exporter.service для запуска сервиса node_exporter :

[Unit]
Description=Prometheus Node Exporter
After=network.target
 
[Service]
Type=simple
Restart=always
User=prometheus
Group=prometheus
ExecStart=/usr/local/bin/node_exporter
 
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
sudo systemctl status node_exporter

Configure the Node Exporter as a Prometheus target

Редактируем /etc/prometheus/prometheus.yml:

global:
  scrape_interval:     10s
 
scrape_configs:
  - job_name: 'prometheus'
 
    static_configs:
      - targets: ['localhost:9090']
 
  - job_name: 'node_exporter_metrics'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.99.24:9100', '192.168.99.44:9100']

Перезапускаем Prometheus:

sudo systemctl restart prometheus

Install Grafana

С учетом реалий на 24.01.23, установить Grafana с российского ip можно только через vpn.

wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
apt-get update && apt-get -y install grafana

Для того чтобы скачать Grafana на Debian 11, нужно чтобы в системе присутствовал пект gnupg.

sudo systemctl start grafana-server
sudo systemctl status grafana-server
sudo systemctl enable grafana-server.service

После запуска сервиса, будет доступен web-интерфейс по адресу http://grafana_ip:3000 Для входа вводим login: admin password: admin после чего будет предложено изменить пароль.

При создании Data Source, указываем адрес Prometheus http://localhost:9090, либо http://ip_prometheus:9090, если на разных хостах (не адрес node_exporter)

Номер шаблона 14513

Nginx Reverse Proxy

Для Prometheus

Создаем конфиг /etc/nginx/sites-available/prometheus.conf

server {
    listen 80;
    listen [::]:80;
    server_name  example.com;
 
    location / {
        proxy_pass           http://localhost:9090/;
    }
}
ln -s /etc/nginx/sites-available/prometheus.conf /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx.service
prometheus_grafana_node_exporter.txt · Last modified: 2023/04/06 10:28 (external edit)