Pull to refresh
90.37
Слёрм
Учебный центр для тех, кто работает в IT

Как мониторить Jenkins с помощью Prometheus, Node exporter и Grafana

Level of difficultyEasy
Reading time9 min
Views6.2K
Original author: Ajay Kumar Yegireddi

Перевели туториал, о том как установить и настроить связку Prometheus, Node Exporter и Grafana для Jenkins. Статья будет полезна тем, кто учится выставить системы мониторинга с помощью этих инструментов.

Prometheus

Prometheus — это система мониторинга и оповещения с открытым исходным кодом, которая используется для сбора и хранения метрик из различных источников. Она создана для мониторинга высокодинамичных сред, таких как облачные приложения или микросервисы. С помощью Prometheus можно отслеживать и анализировать производительность и состояние ваших приложений и инфраструктуры.

Prometheus может быть использован для мониторинга использования ресурсов на серверах, отслеживания времени ответа веб-сервисов, сбора метрик с баз данных и измерения производительности контейнерных приложений. 

Node Exporter

Node Exporter — это экспортер Prometheus, специально разработанный для сбора системных показателей с целевого устройства. Он работает на машине, которую вы хотите мониторить, и предоставляет различные показатели, такие как использование CPU, использование памяти, использование диска, статистика сети и другие. Эти метрики затем собираются Prometheus для дальнейшего анализа.

Node Exporter обычно применяется для мониторинга состояния и производительности отдельных серверов или узлов в кластере. Это помогает выявить узкие места в ресурсах, обнаружить отказы оборудования и оптимизировать распределение ресурсов.

Grafana

Grafana — это инструмент с открытым исходным кодом для визуализации данных, который легко интегрируется с Prometheus и другими источниками данных. Он позволяет создавать интерактивные и настраиваемые информационные панели (дашборды) для визуализации метрик, собранных Prometheus или другими системами мониторинга. Grafana предоставляет широкий спектр визуализаций и поддерживает различные источники данных, что позволяет эффективно отслеживать и анализировать данные.

Grafana полезен для создания дашбордов мониторинга в реальном времени, создания наглядных визуализаций и настройки правил оповещения на основе пороговых значений метрик. Он помогает получить представление о производительности системы, выявить аномалии и поделиться визуальными отчётами с командами или заинтересованными сторонами.

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

Установка Prometheus в Ubuntu 22.04

Прежде всего, давайте создадим специального пользователя Linux, иногда называемого системной учётной записью для Prometheus. Наличие отдельных пользователей для каждой службы служит двум основным целям:

  • Как мера безопасности, которая помогает снизить воздействие в случае инцидента со службой.

  • Упрощает администрирование, так как становится легче отследить, какие ресурсы принадлежат какой службе.

Чтобы создать системную учётную запись, выполните следующую команду:

sudo useradd \
    --system \
    --no-create-home \
    --shell /bin/false prometheus
Источник этой и всех остальных иллюстраций
Источник этой и всех остальных иллюстраций

--system — создаст системную учётную запись.

--no-create-home — в нашем случае нам не нужен домашний каталог для Prometheus или любых других системных учётных записей.

--shell /bin/false — предотвращает вход в систему под учётной записью Prometheus.

Prometheus — создаст пользователя Prometheus и группу с таким же именем.

Давайте возьмём последнюю версию Prometheus на этой странице загрузки.

Вы можете использовать команду curl или wget для загрузки Prometheus.

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

Затем нам нужно извлечь все файлы Prometheus из архива.

tar -xvf prometheus-2.47.1.linux-amd64.tar.gz

Обычно у вас был бы смонтирован диск в data каталог. В нашем случае я просто создам каталог /data. Кроме того, вам понадобится папка для файлов конфигурации Prometheus.

sudo mkdir -p /data /etc/prometheus

Теперь давайте изменим каталог на Prometheus и переместим некоторые файлы.

cd prometheus-2.47.1.linux-amd64/

Прежде всего, давайте переместим двоичный файл Prometheus и promtool в /usr/local/bin/. promtool используется для проверки файлов конфигурации и правил Prometheus.

sudo mv prometheus promtool /usr/local/bin/

По желанию, мы можем переместить библиотеки консоли в каталог конфигурации Prometheus. Шаблоны консоли позволяют создавать произвольные консоли с использованием языка шаблонов Go. Если вы только начинаете, то вам не нужно об этом беспокоиться.

sudo mv consoles/ console_libraries/ /etc/prometheus/

И наконец, давайте переместим пример основного файла конфигурации Prometheus.

sudo mv prometheus.yml /etc/prometheus/prometheus.yml

Чтобы избежать проблем с разрешениями, вам нужно установить правильные права для каталога /etc/prometheus/ и каталога data.

sudo chown -R prometheus:prometheus /etc/prometheus/ /data/

По окончании работы вы можете удалить архив и папку Prometheus.

cd
rm -rf prometheus-2.47.1.linux-amd64.tar.gz

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

prometheus --version

Чтобы получить дополнительную информацию и параметры конфигурации, запустите Prometheus Help.

prometheus --help

Мы будем использовать некоторые из этих параметров в определении службы.

Мы будем использовать Systemd, который является менеджером систем и служб для операционных систем Linux. Для этого нам нужно создать файл конфигурации подразделения Systemd.

sudo vim /etc/systemd/system/prometheus.service

Prometheus.service

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

StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/data \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries \
  --web.listen-address=0.0.0.0:9090 \
  --web.enable-lifecycle

[Install]
WantedBy=multi-user.target

Давайте рассмотрим некоторые из наиболее важных опций, связанных с Systemd и Prometheus.

Restart — определяет, должен ли сервис быть перезапущен, когда процесс сервиса завершается, убивается или достигается время ожидания.
RestartSec — определяет время ожидания перед перезапуском сервиса.
User и Group — пользователь Linux и группа для запуска процесса Prometheus.

--config.file=/etc/prometheus/prometheus.yml — путь к главному конфигурационному файлу Prometheus.
--storage.tsdb.path=/data — местоположение для хранения данных Prometheus.
--web.listen-address=0.0.0.0:9090 — настройка для прослушивания всех сетевых интерфейсов. В некоторых ситуациях у вас может быть прокси, такой как nginx, для перенаправления запросов к Prometheus. В этом случае вы настроили бы Prometheus для прослушивания только на localhost.

--web.enable-lifecycle — позволяет управлять Prometheus, например, перезагружать конфигурацию без перезапуска сервиса.

Чтобы автоматически запускать Prometheus после перезагрузки, выполните enable.

sudo systemctl enable prometheus

Тепер просто запустите Prometheus.

sudo systemctl start prometheus

Чтобы проверить состояние Prometheus, выполните следующую команду:

sudo systemctl status Prometheus

Предположим, вы столкнулись с какими-либо проблемами с Prometheus или не можете его запустить. Самый простой способ найти проблему — использовать команду journalctl и поискать ошибки.

journalctl -u prometheus -f --no-pager

Теперь мы можем попробовать обратиться к нему через браузер. Я буду использовать IP-адрес сервера Ubuntu. Вам нужно добавить к IP порт 9090.

<public-ip:9090>

Если вы перейдёте к целям, вы должны увидеть только одну — Prometheus target. Она по умолчанию сама собирает себя каждые 15 секунд.

Установка Node Exporter на Ubuntu 22.04

Далее мы настроим и сконфигурируем Node Exporter для сбора метрик системы Linux, таких как загрузка CPU и disk I/O. Node Exporter будет предоставлять эти метрики в Prometheus стиле. Так как процесс установки очень похож, я не буду описывать его так же подробно, как Prometheus.

Во-первых, давайте создадим системного пользователя для Node Exporter, выполнив следующую команду:

sudo useradd \
    --system \
    --no-create-home \
    --shell /bin/false node_exporter

Вы можете скачать Node Exporter с этой страницы.

Для загрузки бинарных файлов используйте команду wget.

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

Извлеките экспортер узлов из архива.

tar -xvf node_exporter-1.6.1.linux-amd64.tar.gz

Переместите бинарный файл в папку /usr/local/bin.

sudo mv \
  node_exporter-1.6.0.linux-amd64/node_exporter \
  /usr/local/bin/

Очистите и удалите архив node_exporter и папку.

rm -rf node_exporter*

Убедитесь, что вы можете запустить бинарный файл.

node_exporter --version

Node Exporter имеет множество плагинов, которые мы можем включить. Если вы запустите справку по Node Exporter, то получите все возможные варианты.

node_exporter --help

--collector.logind — Мы собираемся включить контроллер входа в систему, просто для демонстрации.

Далее создайте аналогичный файл блока systemd.

sudo vim /etc/systemd/system/node_exporter.service

node_exporter.service

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

StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
User=node_exporter
Group=node_exporter
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/node_exporter \
    --collector.logind

[Install]
WantedBy=multi-user.target

Замените пользователя и группу Prometheus на node_exporter и обновите команду ExecStart.

Чтобы автоматически запускать Node Exporter после перезагрузки, включите эту службу.

sudo systemctl enable node_exporter

Затем запустите Node Exporter.

sudo systemctl start node_exporter

Проверьте состояние Node Exporter с помощью следующей команды:

sudo systemctl status node_exporter

Если у вас возникли проблемы, проверьте логи с помощью journalctl:

journalctl -u node_exporter -f --no-pager

На данный момент в нашем Prometheus есть только одна цель. В Prometheus встроено множество различных механизмов обнаружения сервисов. Например, Prometheus может динамически обнаруживать цели в AWS, GCP и других облаках на основе меток. В рамках этого туториала давайте всё упростим и будем добавлять статические цели.

Чтобы создать статическую цель, вам нужно добавить job_name со static_configs.

sudo vim /etc/prometheus/prometheus.yml

prometheus.yml

  - job_name: node_export
    static_configs:
      - targets: ["localhost:9100"]

По умолчанию Node Exporter будет доступен на порту 9100.

Поскольку мы включили управление жизненным циклом с помощью API-запросов, мы можем перезагружать конфигурацию Prometheus без перезапуска сервиса и, как следствие, простоев.

Предварительно проверяем корректность конфигурации перед перезапуском.

promtool check config /etc/prometheus/prometheus.yml

Затем вы можете использовать POST-запрос для перезагрузки конфигурации.

curl -X POST http://localhost:9090/-/reload

Проверьте цели.

http://<ip>:9090/targets

Установка Grafana на Ubuntu 22.04

Для визуализации метрик можно использовать Grafana. Существует множество различных источников данных, которые поддерживает Grafana, один из них — Prometheus.

Сначала давайте убедимся, что все зависимости установлены.

sudo apt-get install -y apt-transport-https software-properties-common

Затем добавьте ключ GPG.

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

Добавьте этот репозиторий для стабильных релизов.

echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

После добавления репозитория обновите и установите Grafana.

sudo apt-get update
sudo apt-get -y install grafana

Чтобы автоматически запускать Grafana после перезагрузки, включите эту службу.

sudo systemctl enable grafana-server

Затем запустите Grafana.

sudo systemctl start grafana-server

Чтобы проверить состояние Grafana, выполните следующую команду:

sudo systemctl start grafana-server

Перейдите по адресу http://<ip>:3000 и войдите в Grafana, используя стандартные учётные данные. Имя пользователя — admin, а пароль — admin.

При первом входе в систему вам будет предложено изменить пароль.

Чтобы визуализировать метрики, необходимо сначала добавить источник данных.

Нажмите кнопку Add data source и выберите Prometheus.

Для URL введите http://localhost:9090 и нажмите кнопку Save and test. Вы можете видеть, что источник данных работает.

<public-ip:9090>

Нажмите на кнопку Save and Test.

Добавим дашборд для лучшего обзора.

Щелкните на Import Dashboard, вставьте этот код 1860 и нажмите на кнопку load.

Выберите Datasource и нажмите на кнопку Import

Вы увидите следующий вывод

Теперь давайте мониторить JENKINS SYSTEM.

Нужна работающая машина Jenkins.

Перейдите к разделу Manage Jenkins → Plugins → Available Plugins

Найдите Prometheus и установите его.

После этого в системных конфигурациях Prometheus будет установлен на путь /Prometheus.

Ничего не нужно менять, нажмите Apply и сохраните.

Чтобы создать статическую цель, нужно добавить job_name в static_configs.

sudo vim /etc/prometheus/prometheus.yml

Вставьте приведенный ниже код

  - job_name: 'jenkins'
    metrics_path: '/prometheus'
    static_configs:
      - targets: ['<jenkins-ip>:8080']

Перед перезапуском проверьте, действителен ли конфиг.

promtool check config /etc/prometheus/prometheus.yml

Затем вы можете использовать POST-запрос для перезагрузки конфигурации.

curl -X POST http://localhost:9090/-/reload

Проверьте Цели

http://<ip>:9090/targets

Вы увидите, что Jenkins добавлен.

Давайте добавим дашборд для лучшего обзора в Grafana

Нажмите на Dashboard → + symbol → Import Dashboard

Используйте идентификатор 9964 и нажмите на кнопку загрузки

Выберите источник данных и нажмите на кнопку Import.

Теперь вы увидите подробный обзор Jenkins.


Если вы хотите научиться работать со связкой Prometheus+Grafana, разбираться в работе системы и читать созданные графики, приходите на курс «Мониторинг в Grafana». Вы узнаете о подходах в мониторинге, создадите свои первые дашборды и настроите алертинг.

Старт потока — 19 февраля 2023 года.

Tags:
Hubs:
Total votes 6: ↑5 and ↓1+6
Comments11

Articles

Information

Website
slurm.io
Registered
Founded
Employees
51–100 employees
Location
Россия
Representative
Антон Скобин