Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Установка и настройка Prometheus

Миша Курушин
Миша Курушин
Технический писатель
30 января 2024 г.
2650
16 минут чтения
Средний рейтинг статьи: 5

Prometheus — это набор инструментов с открытым исходным кодом, написанный на языке программирования Golang и представляющий собой полноценную систему мониторинга и оповещения.

Изначально продукт был создан SoundCloud, однако сейчас поддерживается сообществом разработчиков независимо от какой-либо компании.

Prometheus состоит из следующих компонентов:

  • Главный сервер

  • Библиотеки для управления кодом приложения

  • Система выполнения заданий

  • Менеджер оповещений

  • Экспортер данных для внешних вспомогательных инструментов (HAProxy, StatsD, Graphite)

Все эти компоненты нужны для выполнения трех основных операций, на которых основывается Prometheus:

  • Сбор. Опрашивать внешние службы, собирая данные для будущих метрик

  • Обработка. Выполнять правила, на основе которых обрабатываются полученные данные

  • Вывод. Сохранять полученные результаты в базу данных для последующей визуализации в виде метрик

В этом руководстве мы разберемся, как установить Prometheus, сконфигурировать правила обработки данных и подключить инструмент визуализации.

1. Загрузка, распаковка и установка Prometheus

Для развертывания системы мониторинга можно воспользоваться выделенным или облачным сервером Timeweb Cloud, с которого Prometheus будет опрашивать работающее приложение, получая и обрабатывая данные о его состоянии.

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

Конкретно в этом примере будет использоваться дистрибутив Ubuntu 22.04, запущенный в облачном сервере с 2 ядрами процессора и 4 гигабайтами оперативной памяти.

Загрузка архива со сборкой

Так как Prometheus написан на Golang, он распространяется в виде одного исполняемого файла, который можно скачать либо со страницы загрузок на официальном сайте, либо со страницы релизов репозитория GitHub.

Вне зависимости от выбранного источника вы увидите список tar.gz-архивов с разными названиями.

Image1

В каждом отдельном архиве лежит сборка (с указанием версии Prometheus) под конкретную операционную систему и архитектуру процессора. То есть схема обозначения следующая:

prometheus-ВЕРСИЯ.СИСТЕМА-АРХИТЕКТУРА.tar.gz

По названию СИСТЕМЫ понятно, для какой операционной системы предназначен архив. При этом darwin — это ядро macOS.

Обратите внимание, что на странице релизов в GitHub есть дополнительная кнопка «Show all 38 assets». С помощью нее вы сможете увидеть полный список сборок под все возможные операционные системы и архитектуры процессоров.

В отличие от GitHub, на официальном сайте есть удобный фильтр для поиска необходимой конфигурации.

Image4

Выбираем нужную сборку и скачиваем ее. Для загрузки можно воспользоваться стандартной утилитой wget, указав ссылку на нужный архив:

sudo wget https://github.com/prometheus/prometheus/releases/download/v2.45.3/prometheus-2.45.3.linux-amd64.tar.gz

Обратите внимание, что в этом примере использовался сборка Prometheus версии «2.49.1 / 2024-01-15». 

Распаковка архива

Скачанный архив нужно извлечь. Это можно сделать с помощью стандартной утилиты tar:

sudo tar -xzf prometheus*.tar.gz

Архив, из которого выполнялась распаковка, теперь можно удалить:

sudo rm prometheus*.tar.gz

Благодаря звездочке * можно указать на архив без ввода его полного имени.

По итогу мы получим новую директорию prometheus, внутри которой будет лежать 2 исполняемых файла, 2 папки с файлами конфигурации и 1 главный конфигурационный файл:

  • prometheus (исполняемый файл)

  • promtool (исполняемый файл)

  • consoles (папка)

  • console_libraries (папка)

  • prometheus.yml (файл)

Перейдем в распакованную директорию:

cd prometheus*/

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

Создание отдельного пользователя

Для доступа к Prometheus рекомендуется создать отдельную пользовательскую группу, после чего добавить в нее нового системного пользователя с ограниченными правами доступа — это снизит риск несанкционированного доступа.

Создаем группу prometheus:

sudo groupadd --system prometheus

Добавляем в нее пользователя с аналогичным именем — prometheus:

sudo useradd -s /sbin/nologin --system -g prometheus prometheus

В дальнейшем для этого пользователя мы назначим соответствующие права доступа к директориям Prometheus.

Копирование файлов

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

sudo mv prometheus /usr/local/bin
sudo mv promtool /usr/local/bin

Теперь установим специальные привилегии для ранее созданного пользователя:

sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool

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

sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus

А далее переместим сами папки:

sudo mv consoles /etc/prometheus
sudo mv console_libraries /etc/prometheus

Каталог /var/lib/prometheus пригодится позже.

Точно так же скопируем основной конфигурационный файл:

sudo mv prometheus.yml /etc/prometheus

И не забудем про права доступа:

sudo chown prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
sudo chown -R prometheus:prometheus /var/lib/prometheus

2. Конфигурация Prometheus

Основным файлом конфигурации в Prometheus является prometheus.yml — в нем прописываются настройки объектов мониторинга, периодичность сбора данных, условия для системы уведомлений, а также методы обработки и хранения информации.

Принцип работы

Конфигурационный файл предназначен для настройки двух базовых функций Prometheus:

  • HTTP-запрос к указанным целям (target) мониторинга, результатом которого являются свежие данные от внешних систем

  • Обработка собранных данных на основании некоторых заранее описанных правил (rules), после которой либо отправляются предупреждения (если что-то не так), либо новые данные попадают в конечные метрики (если все впорядке)

Соответственно, конфигурация Prometheus базируется на двух типах файлов:

  • Файл конфигурации

  • Файлы правил

Конфигурационный файл

Давайте напишем самый простой конфигурационный файл prometheus.yml, который будет иметь только одну объявленную цель для сбора данных — непосредственно сервер Prometheus.

Сперва откроем файл:

sudo nano /etc/prometheus/prometheus.yml

Далее удалим его стандартное содержимое и добавим новый текст:

global:
	scrape_interval: 15s # интервал сбора и очистки данных с целей
	evaluation_interval: 15s #  интервал вычисления правил сбора

rule_files:
	# - "first.rules"
	# - "second.rules"

scrape_configs:
	- job_name: prometheus # имя задания, которое будет собирать данные
		static_configs: # целевые адреса целей в рамках указанного задания
			- targets: ['localhost:9090']

Заранее проверить корректность конфигурационного файла можно с помощью утилиты promtool:

promtool check config /etc/prometheus/prometheus.yml

Самое главное — соблюдать количество отступов (табуляции) и понимать отношения (иерархию) ПОДпараметров и НАДпараметров.

В файле конфигурации есть 3 основных блока:

  • global. Устанавливает глобальные настройки для сервера Prometheus. Опция scrape_interval указывает на частоту сбора данных с указанных целей, а evaluation_interval — на частоту обработки собранных данных на основе прописанных правил.

  • rule_files. Содержит список файлов, в которых прописаны правила оценки данных.

  • scrape_configs. Описывает ресурсы, которые должен отслеживать Prometheus. Этот блок делиться на задания (jobs), в рамках которых указывается список целей для сбора данных — IP адреса и порты.

Важно то, что Prometheus может предоставлять HTTP-данные о самом себе как о полноценной цели.

Поэтому в описанной конфигурации в качестве примера указано только одно задание с именем prometheus, которое собирает информацию о состоянии сервера Prometheus.

В настройках этого задания в качестве целевого адреса указан IP и порт Prometheus. Проще говоря, Prometheus будет опрашивать сам себя.

3. Служба Prometheus в Systemd

Чтобы Prometheus работал без перебоев, мы воспользуемся системной утилитой Systemd. Она будет управлять процессом Prometheus как фоновой службой, которая будет автоматически запускаться при старте системы и перезагружаться при аварийном завершении процесса.

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

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

Файл наполним следующим содержимым:

[Unit]
Description=Background service of 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

[Install]
WantedBy=multi-user.target

Разберем несколько важных параметров из этого файла:

  • В параметре User нужно ранее созданного пользователя prometheus.

  • В параметре Group указывается название основной группы пользователей, которым разрешен доступ. В нашем случае это prometheus.

  • Важно указать значение WorkingDirectory для корректной работы команды запуска процесса.

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

После сохранения файла необходимо перезагрузить Systemd, чтобы применить внесенные изменения:

sudo systemctl daemon-reload

Далее мы укажем Systemd запускать службу Prometheus при каждом старте системы:

sudo systemctl enable prometheus

После чего запустим службу вручную:

sudo systemctl start prometheus

Убедиться, что служба корректно работает, можно, узнав ее статус:

sudo systemctl status prometheus

Если Prometheus работает корректно, то среди консольного вывода будет параметр о положительном статусе службы:

Active: active (running)

4. Веб-интерфейс Prometheus

Основной веб-интерфейс программы открывается в браузере по адресу вашего сервера с указанием 9090 порта. То есть схема адреса Prometheus выглядит так:

http://IP-адрес-сервера:9090

Например, это может быть http://90.156.208.243:9090.

Image6

Поэтому важно разрешить доступ по 9090 порту в вашем брандмауэре. Это делается так:

sudo ufw allow 9090/tcp

5. Установка Grafana

Стандартный интерфейс Prometheus крайне неинформативен и неудобен. Его стоит использовать только во время первичной конфигурации программы, чтобы убедиться в корректности работы программы.

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

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

Image2

Пример приложения Grafana (источник: официальный сайт)

У Timeweb Cloud есть отдельная инструкция о том, как установить и настроить Grafana. В этой статье мы кратко рассмотрим установку Grafana с использованием уже готовой доски для отображения метрик.

Обратите внимание, что для загрузки Grafana необходимо использовать зарубежный IP-адрес либо выполнять загрузку через «зеркало».

Загрузка с российского IP через «зеркало»

С российского IP-адреса загрузить Grafana не получится. Поэтому в этой инструкции мы будем использовать зеркало от компании Tencent. 

Мы сперва загружаем необходимую версию Grafana:

wget https://mirrors.cloud.tencent.com/grafana/apt/pool/main/g/grafana-enterprise/grafana-enterprise_10.2.3_amd64.deb

Как видно, в этой инструкции используется версия 10.2.3 для архитектуры amd64. 

Далее устанавливаем ряд зависимостей, которые нужны для работы Grafana:

apt install adduser libfontconfig1 musl -y

На данном этапе возможна ошибка со «сломанными пакетами». Поэтому на всякий случай нужно выполнить исправление:

sudo apt --fix-broken install

После этого устанавливаем ранее загруженный пакет Grafana через пакетный менеджер dpkg:

dpkg -i grafana-enterprise_*_amd64.deb

Служба Grafana должна запуститься автоматически после завершения установки. Однако на всякий случай запустим ее вручную:

sudo systemctl start grafana-server

Также лучше добавить Grafana в список автозагрузки при старте системы:

sudo systemctl enable grafana-server

Состояние запущенной службы Grafana можно узнать так:

sudo systemctl status grafana-server

Если Grafana работает корректно, то среди консольного вывода будет параметр о положительном статусе службы:

Active: active (running)

6. Интеграция Grafana с Prometheus

Подключение к Prometheus

Grafana работает на 3000 порту. Соответственно, схема адреса Grafana выглядит так:

http://IP-адрес-сервера:3000

Например, это может быть http://90.156.208.243:3000.

Во время первичного входа в качестве логина и пароля вводится слово «admin». В дальнейшем данные для входа рекомендуется заменить.

После входа в панель управления нужно:

  • Открыть страницу Connections

  • Перейти во вкладку Data Sources

  • Нажать на кнопку добавления новых источников — Add Data Source.

Появится список возможных источников. Нас интересует Prometheus, поэтому выбираем его.

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

Кликаем на Save and Test.

Импорт доски для данных через ID

В Grafana можно использовать разнообразные доски для отображения метрик. На официальном сайте Grafana есть небольшое руководство, рассматривающее создание собственной доски.

Мы же воспользуемся готовой доской, которую можно найти на официальном сайте Prometheus. Она собирает стандартные данные из системы мониторинга.

Image3

Чтобы автоматически добавить эту доску через панель управления Grafana, нужно:

  • Открыть страницу Dashboards

  • Нажать на кнопку New

  • Из выпадающего списка выбрать New dashboard

  • Нажать на кнопку Import dashboard

  • Ввести идентификатор доски, который указан на странице официального сайта. Это 3662

  • Нажать на кнопку Load

Вас перекинет на страницу настроек доски. Даем ей имя и выбираем ранее созданный источник данных — Prometheus.

После заполнения информации жмем Import.

Импорт доски для данных через JSON

В некоторых случаях возможны проблемы с доступом к серверам Prometheus в момент добавления доски через ID. В этом случае следует воспользоваться JSON-файлом.

Для этого на веб-странице доски (на официальном сайте Prometheus) нужно нажать на кнопку Download JSON (вместо копирования ID), после чего начнется загрузка файла.

Содержимое файла необходимо вставить на странице добавления доски в отдельное поле для JSON и нажать кнопку Load. После этого аналогичным образом заполнить информацию о доске и выбрать источник данных.

Image5 

Теперь, когда у вас есть готовая доска для отображения данных из Prometheus, вы можете настроить ее визуализацию через интерфейс панели управления Grafana.

8. Настройка «экспортеров»

Экспортеры — это программы-модули, которые собирают данные из внешних служб (MySQL, Nginx, Apache) и периодически отправляют их на основной сервер Prometheus.

Установка Node_exporter

Экспортеры написаны на языке программирования Golang. Самым основным экспортером является Node_exporter — он собирает самые общие данные о состоянии сервера Prometheus.

Давайте установим его через APT:

sudo apt install prometheus-node-exporter

Более свежие версии экспортера рекомендуется брать из официального репозитория Github.

Соответственно, если вы скачали экспортер с GitHub, его сперва нужно распаковать:

sudo tar -xvf node_exporter*amd64.tar.gz

А далее скопировать исполняемые файлы экспортера в каталог /usr/local/bin:

cp node_exporter-*amd64/node_exporter /usr/local/bin

Служба для Node_exporter

Обратите внимание, что ручное создание службы нужно только в том случае, если Node_exporter был загружен в виде архива с GitHub. Установка через APT автоматически создает конфигурацию для Systemd.

Экспортер должен быть запущен в виде отдельной службы точно также, как и сервер Prometheus.

Поэтому создадим для него конфигурацию в Systemd:

sudo systemctl edit --full --force node_exporter.service

Содержимое будет следующим:

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

[Service]
User=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

Обратите внимание, что в параметре User указывается ранее созданный пользователь prometheus.

Выполняем перезагрузку конфигураций служб:

sudo systemctl daemon-reload

И явно запускаем созданную только что созданную службу:

sudo systemctl start node_exporter

Вы можете убедиться в корректности работы экспортера открыв его через браузер. Введите в адресную строку адрес вашего сервера с указанием стандартного для Node_exporter порта (9100) и пути /metrics.

Например, это может быть http://90.156.208.243:9100/metrics — примерно по такому адресу экспортер будет возвращать данные для метрик.

Подключение Prometheus к Node_exporter

Prometheus нужно явно указать, с каких экспортеров требуется собирать информацию.

Это делается в основном конфигурационном файле в блоке scrape_configs, через добавление нового задания (jobs).

Поэтому нам нужно будет открыть файл prometheus.yml:

sudo nano /etc/prometheus/prometheus.yml

И дописать туда следующие настройки:

...
	- job_name: 'prometheus_node_exporter'
		scrape_interval: 5s
		static_configs:
			- targets: ['localhost:9100'] # указываем адрес сервера и порт, на котором запущена служба Node_exporter

Конкретно для этого задания мы указали интервал сбора данных в 5 секунд, в отличие от глобально установленных 15 секунд.

Полный конфигурационный файл выглядит так:

global:
	scrape_interval: 15s
	evaluation_interval: 15s

rule_files:
	# - "first.rules"
	# - "second.rules"

scrape_configs:
	- job_name: prometheus
		static_configs:
			- targets: ['localhost:9090']

	- job_name: 'prometheus_node_exporter'
		scrape_interval: 5s
		static_configs:
			- targets: ['localhost:9100']

Будьте внимательны — YAML-файлы имеют строгие правила форматирования, поэтому лишние или недостающие отступы будут приводить к ошибке запуска.

Осталось только перезапустить службу Prometheus для обновления настроек:

sudo systemctl restart prometheus

Импорт доски для Node_exporter через ID

Данные, собранные Node_exporter, можно передавать в Grafana для визуального вывода в виде метрик — абсолютно также, как это делается с данными от сервера Prometheus.

Аналогично, нужно импортировать уже готовую доску, которая доступна на официальном сайте Grafana. Для этого:

  • Откройте страницу с досками (Dashboards) в панели управления Grafana

  • Нажмите на кнопку New

  • Из выпадающего списка выбрать New dashboard

  • Нажмите кнопку Import dashboard

  • Введите идентификатор доски, который указан на сайте Grafana — 1860

  • Нажмите на кнопку Load

Далее все так же, как и с подключением доски для Prometheus:

  • Даете имя доске

  • Выбираете в качестве источника данных Prometheus

  • Кликаете на кнопку Import

Открывшуюся доску можно настроить по своему усмотрению.

Импорт доски для Node_exporter через JSON

Как уже упоминалось ранее, в некоторых случаях возможны проблемы с доступом к серверам Prometheus в момент добавления доски через ID. В этом случае используется JSON-файл, доступный на официальном сайте Prometheus на странице доски.

Содержимое файла необходимо вставить на странице добавления доски в специальное поле для JSON и нажать кнопку Load, после чего заполнить данные о доске.

Заключение

Включение системы мониторинга Prometheus в проект включает в себя несколько этапов:

  • Загрузка, распаковка и ручная установка Prometheus с официального репозитория GitHub (или сайта)

  • Написание базового конфигурационного файла Prometheus

  • Установка и подключение системы визуализации данных Grafana. Тем не менее, во многих случаях достаточно использовать базовый функционал визуализации Prometheus

  • Добавление готовой (или создание новой) доски Grafana для отображения метрик

  • Подключение и настройка экспортеров данных. Базовым экспортером можно считать Node_exporter

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону