Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
1. Загрузка, распаковка и установка Prometheus
Для развертывания системы мониторинга можно воспользоваться выделенным или облачным сервером Simple-Server, с которого Prometheus будет опрашивать работающее приложение, получая и обрабатывая данные о его состоянии.
Впоследствии эти данные можно будет удаленно анализировать через панель управления в виде визуальных метрик.
Конкретно в этом примере будет использоваться дистрибутив Ubuntu 22.04, запущенный в облачном сервере с 2 ядрами процессора и 4 гигабайтами оперативной памяти.**
**
Загрузка архива со сборкой
Так как Prometheus написан на Golang, он распространяется в виде одного исполняемого файла, который можно скачать либо со страницы загрузок на официальном сайте, либо со страницы релизов репозитория GitHub.
Вне зависимости от выбранного источника вы увидите список tar.gz-архивов с разными названиями.
В каждом отдельном архиве лежит сборка (с указанием версии Prometheus) под конкретную операционную систему и архитектуру процессора. То есть схема обозначения следующая:
prometheus-ВЕРСИЯ.СИСТЕМА-АРХИТЕКТУРА.tar.gzПо названию СИСТЕМЫ понятно, для какой операционной системы предназначен архив. При этом darwin — это ядро macOS.
Обратите внимание, что на странице релизов в GitHub есть дополнительная кнопка «Show all 38 assets». С помощью нее вы сможете увидеть полный список сборок под все возможные операционные системы и архитектуры процессоров.
В отличие от GitHub, на официальном сайте есть удобный фильтр для поиска необходимой конфигурации.
Выбираем нужную сборку и скачиваем ее. Для загрузки можно воспользоваться стандартной утилитой 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(файл)
prometheus (исполняемый файл)
promtool (исполняемый файл)
console_libraries (папка)
Перейдем в распакованную директорию:
Благодаря приписке */ можно указать на распакованный архив без ввода полного имени каталога.**
**
Создание отдельного пользователя
Для доступа к 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/prometheus2. Конфигурация Prometheus
Основным файлом конфигурации в Prometheus является prometheus.yml — в нем прописываются настройки объектов мониторинга, периодичность сбора данных, условия для системы уведомлений, а также методы обработки и хранения информации.**
**
Конфигурационный файл предназначен для настройки двух базовых функций Prometheus:
-
HTTP-запрос к указанным целям (target) мониторинга, результатом которого являются свежие данные от внешних систем
-
Обработка собранных данных на основании некоторых заранее описанных правил (rules), после которой либо отправляются предупреждения (если что-то не так), либо новые данные попадают в конечные метрики (если все впорядке)
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 адреса и порты.
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.
В параметре 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 работает корректно, то среди консольного вывода будет параметр о положительном статусе службы:
4. Веб-интерфейс Prometheus
Основной веб-интерфейс программы открывается в браузере по адресу вашего сервера с указанием 9090 порта. То есть схема адреса Prometheus выглядит так:
http://IP-адрес-сервера:9090Например, это может быть http://90.156.208.243:9090.
Поэтому важно разрешить доступ по 9090 порту в вашем брандмауэре. Это делается так:
Стандартный интерфейс Prometheus крайне неинформативен и неудобен. Его стоит использовать только во время первичной конфигурации программы, чтобы убедиться в корректности работы программы.
Поэтому данные, собранные Prometheus, передаются внешним приложениям для аналитики и интерактивной визуализации показателей и графиков.
Grafana — одно из таких многоплатформенных веб-приложений с открытым исходным кодом, которое предоставляет гибко настраиваемые диаграммы и графики для визуального анализа данных.
У Simple-Server есть отдельная инструкция о том, как установить и настроить Grafana. В этой статье мы кратко рассмотрим установку Grafana с использованием уже готовой доски для отображения метрик.
Обратите внимание, что для загрузки Grafana необходимо использовать зарубежный IP-адрес либо выполнять загрузку через «зеркало».**
**
Загрузка с российского IP через «зеркало»
С российского IP-адреса загрузить Grafana не получится. Поэтому в этой инструкции мы будем использовать зеркало от компании Tencent.
Мы сперва загружаем необходимую версию Grafana:
Как видно, в этой инструкции используется версия 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 работает корректно, то среди консольного вывода будет параметр о положительном статусе службы:
6. Интеграция Grafana с Prometheus
Grafana работает на 3000 порту. Соответственно, схема адреса Grafana выглядит так:
http://IP-адрес-сервера:3000Например, это может быть http://90.156.208.243:3000.
Во время первичного входа в качестве логина и пароля вводится слово «admin». В дальнейшем данные для входа рекомендуется заменить.
После входа в панель управления нужно:
-
Открыть страницу Connections
-
Перейти во вкладку Data Sources
-
Нажать на кнопку добавления новых источников — Add Data Source.
Открыть страницу Connections
Перейти во вкладку Data Sources
Нажать на кнопку добавления новых источников — Add Data Source.
Появится список возможных источников. Нас интересует Prometheus, поэтому выбираем его.
Оказавшись на странице настройки подключения Grafana к Prometheus, указываем адрес и порт сервера, а все остальное оставляем как есть. В нашем случае это localhost (либо адрес вашего сервера) и стандартный порт 9090.
Кликаем на Save and Test.**
**
Импорт доски для данных через ID
В Grafana можно использовать разнообразные доски для отображения метрик. На официальном сайте Grafana есть небольшое руководство, рассматривающее создание собственной доски.
Мы же воспользуемся готовой доской, которую можно найти на официальном сайте Prometheus. Она собирает стандартные данные из системы мониторинга.
Чтобы автоматически добавить эту доску через панель управления Grafana, нужно:
-
Открыть страницу Dashboards
-
Нажать на кнопку New
-
Из выпадающего списка выбрать New dashboard
-
Нажать на кнопку Import dashboard
-
Ввести идентификатор доски, который указан на странице официального сайта. Это 3662
-
Нажать на кнопку Load
Открыть страницу Dashboards
Из выпадающего списка выбрать New dashboard
Нажать на кнопку Import dashboard
Ввести идентификатор доски, который указан на странице официального сайта. Это 3662
Вас перекинет на страницу настроек доски. Даем ей имя и выбираем ранее созданный источник данных — Prometheus.
После заполнения информации жмем Import.**
**
Импорт доски для данных через JSON
В некоторых случаях возможны проблемы с доступом к серверам Prometheus в момент добавления доски через ID. В этом случае следует воспользоваться JSON-файлом.
Для этого на веб-странице доски (на официальном сайте Prometheus) нужно нажать на кнопку Download JSON (вместо копирования ID), после чего начнется загрузка файла.
Содержимое файла необходимо вставить на странице добавления доски в отдельное поле для JSON и нажать кнопку Load. После этого аналогичным образом заполнить информацию о доске и выбрать источник данных.
Теперь, когда у вас есть готовая доска для отображения данных из Prometheus, вы можете настроить ее визуализацию через интерфейс панели управления Grafana.**
**
8. Настройка «экспортеров»
Экспортеры — это программы-модули, которые собирают данные из внешних служб (MySQL, Nginx, Apache) и периодически отправляют их на основной сервер Prometheus.**
**
Экспортеры написаны на языке программирования 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 был загружен в виде архива с 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
Откройте страницу с досками (Dashboards) в панели управления Grafana
Из выпадающего списка выбрать New dashboard
Нажмите кнопку Import dashboard
Введите идентификатор доски, который указан на сайте Grafana — 1860
Далее все так же, как и с подключением доски для Prometheus:
-
Даете имя доске
-
Выбираете в качестве источника данных Prometheus
-
Кликаете на кнопку Import
Выбираете в качестве источника данных Prometheus
Кликаете на кнопку Import
Открывшуюся доску можно настроить по своему усмотрению.**
**
Импорт доски для Node_exporter через JSON
Как уже упоминалось ранее, в некоторых случаях возможны проблемы с доступом к серверам Prometheus в момент добавления доски через ID. В этом случае используется JSON-файл, доступный на официальном сайте Prometheus на странице доски.
Содержимое файла необходимо вставить на странице добавления доски в специальное поле для JSON и нажать кнопку Load , после чего заполнить данные о доске.**
**
Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.