Prometheus собирает метрики с сервера, Grafana используется для построения графиков. С их помощью можно отслеживать, что происходит с вашей инфраструктурой в реальном времени.
Это удобно использовать, если вам нужно отслеживать сразу много серверов, т.к. такая систему будет легко масштабироваться, то есть будет легко подключать новые серверы.
В этой статье установим оба инструмента на Ubuntu, подключим Node Exporter для сбора системных метрик и настроим первый дашборд.
Prometheus
это сервер, который по расписанию опрашивает так называемые экспортёры и сохраняет полученные метрики у себя в базе.
Node Exporter
экспортёр для Linux-систем. Он запускается на сервере и отдаёт Prometheus метрики: загрузку CPU, использование RAM, дисковый I/O, сетевой трафик и многое другое.
Grafana
визуальный слой. Она подключается к Prometheus как к источнику данных и строит графики по вашим запросам.
Prometheus не нужно запускать от root. Создадим отдельного пользователя без домашней директории и без возможности входа в систему:
sudo useradd --no-create-home --shell /bin/false prometheus
Это стандартная практика для системных сервисов.
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
/etc/prometheus для конфигурационных файлов,
/var/lib/prometheus для данных (метрик).
Назначаем владельца:
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
Идём на страницу релизов и берём актуальную версию. На момент написания статьи 2.51.0:
cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.51.0/prometheus-2.51.0.linux-amd64.tar.gz
Распаковываем:
tar xvf prometheus-2.51.0.linux-amd64.tar.gz
cd prometheus-2.51.0.linux-amd64
Копируем исполняемые файлы:
sudo cp prometheus /usr/local/bin/
sudo cp promtool /usr/local/bin/
Назначаем владельца:
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
Копируем стандартные конфиги и веб-ресурсы:
sudo cp -r consoles /etc/prometheus
sudo cp -r console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
sudo nano /etc/prometheus/prometheus.yml
Вставляем базовую конфигурацию:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
scrape_interval: 15s — Prometheus будет опрашивать экспортёры каждые 15 секунд. Для большинства задач этого достаточно. Если нужна более высокая точность, то можно уменьшить до 5s, но это увеличит нагрузку на диск.
Назначаем владельца файла:
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
sudo nano /etc/systemd/system/prometheus.service
Вставляем:
[Unit]
Description=Prometheus
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 \
--storage.tsdb.retention.time=30d
[Install]
WantedBy=multi-user.target
Параметр --storage.tsdb.retention.time=30d означает, что Prometheus будет хранить данные 30 дней, после чего удалять старые. Это значение можно уменьшить
Запускаем и добавляем в автозагрузку:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
Проверяем статус:
sudo systemctl status prometheus
Должно быть Active: active (running). Веб-интерфейс Prometheus доступен по адресу http://ваш_ip:9090.
Node Exporter это отдельный бинарник, который запускается на каждом сервере, который вы хотите мониторить.
sudo useradd --no-create-home --shell /bin/false node_exporter
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
Копируем бинарник:
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
sudo nano /etc/systemd/system/node_exporter.service
Вставляем:
[Unit]
Description=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
Запускаем:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
Проверяем:
sudo systemctl status node_exporter
Метрики Node Exporter доступны по адресу http://ваш_ip:9100/metrics. Если открыть в браузере вы увидите стену текста. Это нормально, именно это и читает Prometheus.
sudo apt install -y apt-transport-https software-properties-common
curl -fsSL https://packages.grafana.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/grafana-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/grafana-keyring.gpg] https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
aptsudo apt update
sudo apt install -y grafana
Тут мы столкнулись с ошибкой
Установка происходит на сервер с ip РФ, возможно ошибка происходит из-за этого. Если у вас сработала команда, то читайте сразу шаг 3, а мы установим через .deb
.debwget https://dl.grafana.com/oss/release/grafana_10.4.2_amd64.deb
Версию можно посмотреть на официальном сайте и подставить актуальную
sudo dpkg -i grafana_10.4.2_amd64.deb
Если появятся ошибки зависимостей:
sudo apt-get install -f -y
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
Проверяем:
sudo systemctl status grafana-server
Grafana доступна по адресу http://ваш_ip:3000.
Логин по умолчанию: admin / admin. При первом входе система попросит сменить пароль, обязательно сделайте это.
http://ваш_ip:3000admin
http://localhost:9090
Если увидите зелёную надпись Successfully queried the Prometheus API значит всё подключено.
Для старта лучше использовать готовый шаблон из библиотеки Grafana.
Самый популярный дашборд для Node Exporter ID 1860 (Node Exporter Full). Он показывает всё: CPU, RAM, диск, сеть, системную нагрузку.
1860
Через секунду перед вами будет полноценный дашборд с реальными данными вашего сервера.
Если у вас включён UFW, нужно открыть нужные порты. Grafana и Prometheus лучше не выставлять в открытый интернет без авторизации, открывайте только для доверенных IP:
# Grafana можно открыть шире, если настроена авторизация
sudo ufw allow 3000/tcp
# Prometheus и Node Exporter только для доверенных IP
sudo ufw allow from ВАШ_IP to any port 9090
sudo ufw allow from ВАШ_IP to any port 9100
Если Grafana и Prometheus стоят на одном сервере и вы подключаетесь только через Grafana, порт 9090 вообще не нужно открывать наружу.
Перезапустить все три сервиса разом:
sudo systemctl restart prometheus node_exporter grafana-server
Посмотреть логи Prometheus:
sudo journalctl -u prometheus -n 50 -f
Проверить, что Prometheus видит таргеты (экспортёры):
Откройте http://ваш_ip:9090/targets, там будет список всех настроенных источников и их статус. Если статус UP, то всё работает. Если DOWN, то найти причину можно в колонке Error.
Проверить конфиг Prometheus на ошибки:
promtool check config /etc/prometheus/prometheus.yml
Эту команду стоит запускать каждый раз перед перезапуском Prometheus после редактирования конфига.
Связка Prometheus + Grafana это инструменты для мониторинга Linux-серверов. Настройка занимает за 20–30 минут, даёт сразу много информации и легко масштабируется. Если нужно добавить новый сервер для мониторинга, ставите на него Node Exporter и добавляете строчку в конфиг Prometheus.