[Перевод] Как мониторить Jenkins с помощью Prometheus, Node exporter и Grafana

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

797abebe6f3f07ed47f1b9092a64d347.png

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

3eb1e2c07a8a30b2bc233bcd6b4462d2.png

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

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

fa610083043b85f92d0093dcea60fce6.png

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

sudo mkdir -p /data /etc/prometheus

601fb339bda99123da4231f7739f822e.png

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

cd prometheus-2.47.1.linux-amd64/

eccdfdbfd428ad4ef384eb597ee44c7f.png

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

sudo mv prometheus promtool /usr/local/bin/

638fe6277355e6f1a79c61e2182472c3.png

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

sudo mv consoles/ console_libraries/ /etc/prometheus/

d66991ef276b12479e9919d7f0e5b869.png

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

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

d505e168db0f80d218d1567b3437adc4.png

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

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

4ca57d6c00e2e10bde2234958018cd4e.png

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

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

0269fbacad3fd2dbe35b4f59043b8d20.png

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

prometheus --version

9cb302ba592addfb45cbe0c0a611cdad.png

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

prometheus --help

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

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

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

5f268580bea03c84239133fcc085a912.png

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

15d77ed1527a3c2773633457131cad79.png

Давайте рассмотрим некоторые из наиболее важных опций, связанных с 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

d9ee0bc97e9e84ecdc6971ea732fe296.png

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

sudo systemctl start prometheus

56dcb93ab8c8a8b935e2abf89a448b30.png

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

sudo systemctl status Prometheus

56a3857dc8dc565740dde9984040ac6c.png

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

journalctl -u prometheus -f --no-pager

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

179eb8c32dce02d20e8c47994183b6c0.png

Если вы перейдёте к целям, вы должны увидеть только одну — 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

7654b1be5bb61ddd5a47b0ff74a4b5a8.png

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

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

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

5338e3e0fe53f4b49cd7757b312f5b31.png

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

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

f65c482f806387a09614f87e0481ba21.png

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

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

e66ac44fc7312374bf9d229fdb52fde5.png

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

rm -rf node_exporter*

f177e7c4ba44b9668f6122211ba7eea5.png

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

node_exporter --version

c743d8ab5e9a0334093a1f90d61e7894.png

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

node_exporter --help

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

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

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

51cb5565c33e5d455f1ded00e7df8cb2.png

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

7cea26014881656fea92ad608eb61a0b.png

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

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

sudo systemctl enable node_exporter

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

sudo systemctl start node_exporter

7f624d63672441cd6ebf365f7081eb03.png

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

sudo systemctl status node_exporter

e25c43ea8d037339badacfb15ab1e348.png

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

journalctl -u node_exporter -f --no-pager

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

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

sudo vim /etc/prometheus/prometheus.yml

1fec9eb81f285066ed583e0121be8901.png

prometheus.yml

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

2eedff05a48ec1c1f1e8875915d0e128.png

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

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

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

promtool check config /etc/prometheus/prometheus.yml

c190d11c7dfa7dcf8e45c5b34c25d326.png

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

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

2084d89a689c3c39a1b11458433ca85c.png

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

http://:9090/targets

56a56eb7d8b2ce5996037b1074392658.png

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

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

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

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

59c48ff9218df02181dc9116de96feaa.png

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

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

a52f0b1d442365c056819be235a398f4.png

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

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

bdbf26b1d2e08394916a9744f4647f03.png

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

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

dffd07791af908833ff7bb71039bec3c.png

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

sudo systemctl enable grafana-server

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

sudo systemctl start grafana-server

220f07e4ac97a54a3fc0fbe0fbc15d6e.png

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

sudo systemctl start grafana-server

5199ee87ffb7d3451bd196ce02e69a16.png

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

74623c81fb107467e99158039a19003c.png

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

e7a70ef21dd1bd1b2fed8c390f13a7a5.png

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

8bec8e2062f3223c2b1ab0d2befe3785.png

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

30f6396e4da099ea41656800a2160b3a.png

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

3e93f4d428296ce183b6c8a4c7d24d8f.png

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

d266b60452e89edd27a71c1939eb0fcb.png

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

0acab5c92f9f80929210872414670550.png

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

750b709e9dd46e2a26bc71dcc243cae2.png

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

4c51bbcb64c19d2c69d0075fb6521738.png

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

55361cf7cd23bfb7daae4572201b9215.png

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

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

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

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

c36466074042d0db541f108d963853fa.png

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

7dc1b9778ea4eb7324fbe5f34db06d6d.png

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

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

sudo vim /etc/prometheus/prometheus.yml

504eba043c1bd0e0550b73ba54b7d114.png

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

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

2e1cc2aa9da7d5c31980a573fdf1a9e0.png

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

promtool check config /etc/prometheus/prometheus.yml

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

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

c0a10f9674b73316634f557d6840312d.png

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

http://:9090/targets

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

4580287f74d3d030d8a0b3317559c24c.png

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

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

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

9ebfad8abea5127000ce60727575b459.png

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

ec709ee7eb476c44c1a4c64750019c50.png

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

b829a7254fe4b282fd6de2da44bc179f.png

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

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

© Habrahabr.ru