Мониторинг нод с помощью стека Prometheus/Node Exporter/Grafana на Ubuntu 20.04
Предварительно обновим пакеты и систему
sudo apt update && sudo apt upgrade -y
Установка Prometheus
Свежую версию ищем на официальном сайте или гитхабе.
1) Создаём системную группу и системного пользователя Prometheus.
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
2) Скачиваем и распаковываем последнюю версию Prometheus.
curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
tar xvf prometheus*.tar.gz
cd prometheus*/
3) Создаём необходимые каталоги и копируем файлы
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r console_libraries consoles prometheus.yml /etc/prometheus
4) Назначаем права пользователю prometheus права на каталоги.
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /usr/local/bin/{prometheus,promtool}
sudo /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
Успешным выполнением можно считать состояние «Server is ready to receive web requests»:
Не выходя из консоли, вводим в браузере http://<your_ip>:9090
Завершив процесс, который открыт в нашем терминале, web-интерфейс станет недоступен.
6) Для дальнейшей настройки установим mcedit и создадим юнит systemd.
sudo apt install mc -y
sudo mcedit /etc/systemd/system/prometheus.service
[Unit] Description=Prometheus Service After=network.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 ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target
Сохраните и закройте файл. После перезагрузите демона.
sudo systemctl daemon-reload
Повторно задаем права пользователю prometheus, запускаем службу и добавляем её в автозапуск.
sudo chown -R prometheus:prometheus /var/lib/prometheus
sudo systemctl enable prometheus.service
sudo systemctl start prometheus.service
sudo systemctl status prometheus.service
Установка Node Exporter
Свежую версию ищем на гитхабе.
1) Скачиваем и распаковываем последнюю версию Node Exporter.
curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
tar xvf node_exporter-*linux-amd64.tar.gz
2) Переходим в каталог и запускаем сценарий.
cd node_exporter-*linux-amd64
./node_exporter
Вы должны получить следующее сообщение. Не прерывайте его выполнение:
Откройте в браузере адрес http://<your_ip>:9100/metrics или создайте новую консоль терминала, обратившись к данным с помощью curl. Результат должен быть примерно следующим.
Файлы с node-exporter копируем в каталог /etc/prometheus/node-exporter.
cd ~
sudo cp -a $HOME/node_exporter-*linux-amd64/. /etc/prometheus/node-exporter/
Выставляем на него правильные права.
sudo chown -R prometheus:prometheus /etc/prometheus/node-exporter/
3) Создаём юнит node-exporter.service
sudo mcedit /etc/systemd/system/node-exporter.service
[Unit] Description=Node Exporter After=network.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/etc/prometheus/node-exporter/node_exporter [Install] WantedBy=multi-user.target
4) Отредактируем главный конфигурационный файл prometheus, добавив в него информацию о Node Exporter.
При редактировании файлов *.yml табуляция не допустима, используйте четное количество пробелов.
sudo mcedit /etc/prometheus/prometheus.yml
Примечание: Два узла добавлены для примера, если вы хотите использовать только метрики node_exporter, достаточно указать один узел: ['localhost:9100']
Сохраняем настройки и выходим.
5) Активируем и добавляем в автозагрузку node-exporter.service.
sudo systemctl enable node-exporter.service
sudo systemctl start node-exporter.service
sudo systemctl status node-exporter.service
Перезапускаем службу prometheus.service
sudo systemctl restart prometheus.service
6) Введим в адресной строке браузера http://<your_ip>:9090/targets.
Если вы все сделали правильно, результат должен быть следующий
Установка и настройка Grafana. Тестирование Node Exporter
1) Скачиваем, устававливаем и запускаем последнюю стабильную версию.
sudo apt install -y adduser libfontconfig1
sudo apt install -y gnupg2 curl software-properties-common
curl https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt -y install grafana
sudo systemctl enable --now grafana-server
2) Настроим Grafana. Добавим Prometheus в качестве источника данных.
Заходим на http://<your_ip>:3000
Username: admin
Password: admin
Первым делом интегрируем Prometheus в Grafana. Для этого во вкладке «Configuration» -> «Data sources» -> «Add data source» устанавливаем плагин Prometheus.
Cо следующими параметрами подключения.
Нажимаем внизу «Save & test», видим «Data source is working» и возвращаемся в панель Grafana.
3) Настроим дашборд для графического отображения данных.
Сам дашборд: 1 Node Exporter for Prometheus Dashboard EN v20201010 by StarsL.cn.
В меню слева нажимаем на «+» -> «Create» -> «Import». Вводим ID дашборда «11074» в поле «Import via grafana.com» и нажимаем на кнопку «Load».
Дальнейшие настройки должны быть следующие.
Нажав на «Import», получим результат.
Поздравляю, настройка завершена!
Полезные настройки
Установка Node Exporter для передачи метрик ноды
1) Cкачиваем Node Exporter и задаем права доступа.
curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi - && \ tar xvf node_exporter-*linux-amd64.tar.gz && \ rm node_exporter-*linux-amd64.tar.gz && \ sudo mv node_exporter-*linux-amd64 node_exporter && \ chmod +x $HOME/node_exporter/node_exporter && \ sudo mv $HOME/node_exporter/node_exporter /usr/bin && \ rm -Rvf $HOME/node_exporter/
2) Создаём файл сервиса node-exporter.
sudo tee /etc/systemd/system/node-exporter.service > /dev/null <<EOF [Unit] Description=node_exporter After=network-online.target [Service] User=$USER ExecStart=/usr/bin/node_exporter Restart=always RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
3) Запускаем сервис node-exporter.
sudo systemctl daemon-reload && \ sudo systemctl enable node-exporter && \ sudo systemctl start node-exporter
sudo journalctl -u node-exporter -f
В выводе терминала мы увидим нечто подобное.
Теперь переходим в браузере на своём домашнем устройстве по адресу: http://<your_ip>:9100/metrics, где <your_ip> - IP сервера, на котором установлен node_exporter.
Здесь мы должны увидеть метрики, которые будут отправляться на ноду-обработчик и в дальнейшем отображаться в графане.
Как добавить информацию с настроенных нод в графану на сервере-обработчике
После того, как экспортёры настроены, открываем файл конфига прометеуса на сервере-обработчике.
sudo mcedit /etc/prometheus/prometheus.yml
Обращаем внимание на подраздел job_name: "node_exporter".
targets - это сервер, на которую мы устанавливали node exporter и откуда будем получать метрики.
label - имя сервера для отображения в графане.
targets: [<IP>:9100] - меняем только IP.
label: "<label>" - меняем на своё название сервера.
Строго соблюдаем синтаксис: каждый отступ 2 пробела.
Не рекомендуется использовать пробелы в названиях лейблов.
# так будет выглядеть конфиг для одной ноды
global: scrape_interval: 15s evaluation_interval: 15s
scrape_configs: - job_name: "node_exporter" static_configs: - targets: [<IP>:9100] labels: label: "<label_1>" # так будет выглядеть конфиг для четырёх нод
global: scrape_interval: 15s evaluation_interval: 15s
scrape_configs: - job_name: "node_exporter" static_configs: - targets: [<IP-1>:9100] labels: label: "<label_1>" - targets: [<IP-2>:9100] labels: label: "<label_2>" - targets: [<IP-3>:9100] labels: label: "<label_3>" - targets: [<IP-4>:9100] labels: label: "<label_4>"
После того, как настроили конфиг, сохраняем изменения и перезапускаем Grafana и Prometheus.
sudo systemctl daemon-reload && \ sudo systemctl restart grafana-server && \ sudo systemctl restart prometheus.service
Идем в Grafana и смотрим что получилось.
Ресурсы, которые я использовал для подготовки гайда.
- https://freehost.com.ua/faq/articles/ustanovka-steka-grafanaprometheus-na-debian-10/
- https://computingforgeeks.com/install-prometheus-server-on-debian-ubuntu-linux/
- https://computingforgeeks.com/how-to-install-grafana-on-ubuntu-debian/
- https://computingforgeeks.com/how-to-monitor-linux-server-performance-with-prometheus-and-grafana-in-5-minutes/
- https://www.cyberciti.biz/faq/ubuntu-20-04-lts-change-hostname-permanently/
- https://teletype.in/@cyberomanov/grafana