[Перевод] Как мониторить Jenkins с помощью Prometheus, Node exporter и Grafana
Перевели туториал, о том как установить и настроить связку 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.
Если вы перейдёте к целям, вы должны увидеть только одну — 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://: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
После добавления репозитория обновите и установите Garafana.
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://
и войдите в Grafana, используя стандартные учётные данные. Имя пользователя — admin
, а пароль — admin
.
При первом входе в систему вам будет предложено изменить пароль.
Чтобы визуализировать метрики, необходимо сначала добавить источник данных.
Нажмите кнопку Add data source и выберите Prometheus.
Для URL введите http://localhost:9090
и нажмите кнопку Save and test. Вы можете видеть, что источник данных работает.
Нажмите на кнопку 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: [':8080']
Перед перезапуском проверьте, действителен ли конфиг.
promtool check config /etc/prometheus/prometheus.yml
Затем вы можете использовать POST-запрос для перезагрузки конфигурации.
curl -X POST http://localhost:9090/-/reload
Проверьте Цели
http://:9090/targets
Вы увидите, что Jenkins добавлен.
Давайте добавим дашборд для лучшего обзора в Grafana
Нажмите на Dashboard → + symbol → Import Dashboard
Используйте идентификатор 9964
и нажмите на кнопку загрузки
Выберите источник данных и нажмите на кнопку Import.
Теперь вы увидите подробный обзор Jenkins.
Если вы хотите научиться работать со связкой Prometheus+Grafana, разбираться в работе системы и читать созданные графики, приходите на курс «Мониторинг в Grafana». Вы узнаете о подходах в мониторинге, создадите свои первые дашборды и настроите алертинг.
Старт потока — 19 февраля 2023 года.