Очень важно контролировать работу серверов и приложений, потребление ресурсов и другие процессы в системе. Для этого существуют специальные инструменты. В этой статье мы простыми словами расскажем, что такое Prometheus, как его установить и настроить, зачем нужны его главные компоненты.
Немного о Prometheus: зачем он нужен и чем отличается от аналогов
Система мониторинга Prometheus – это бесплатная система серверов и программ, предназначенная для сбора и анализа данных о работоспособности IT-оборудования. Её разработали специально для сопровождения музыкальной социальной сети, так как до неё не было подходящих решений для такой нестандартной задачи. Позже программа была модифицирована, обновленная версия была предложена более широкой аудитории.
Сервис собирает данные о состоянии серверов и систем, оповещая о возникших проблемах. Мониторинг осуществляется с помощью языка PromQL, а сама программа написана на Go и Ruby.
Сервер получает параметры объектов через заданные пользователем интервалы времени. Информация от них отправляется на сервер по HTTP и сохраняется в базе данных временных рядов.
Архитектура Prometheus включает в себя два главных компонента.
- Prometheus-server — это центр всей системы, отвечающий за получение и хранение данных. Он имеет базовый веб-интерфейс, но мы рекомендуем установить дополнительный.
- Exporters — это программы, получающие и передающие метрики на сервер. Существует несколько их разновидностей, таких как haproxy, statsd и graphite. Их ставят на объекты, с которых нужно получить данные. Каждый собирает свои метрики. А если подходящий вариант вы не нашли, можете создать собственный.
Использование Prometheus требует применения дополнения под названием Grafana. Оно позволяет представлять собранные данные в виде визуальных образов, таких как графики, диаграммы, таблицы или AlertManager, который используется для настройки оповещений. Когда с целевым объектом что-то идет не так, alertmanager может отправлять уведомления по электронной почте или в мессенджеры.
Все компоненты взаимодействуют между собой по протоколу HTTP. Система сама находит нужные сервисы. Поэтому можно поставить только сервер и необходимые компоненты для сбора данных. В распределённой системе мониторинга нет необходимости, что существенно упрощает работу администраторов.
Как установить Prometheus
Для установки воспользуйтесь пошаговой инструкцией.
- Скопируйте ссылку на установочный пакет. Для этого зайдите на сайт разработчика и найдите нужный вариант.
- Поставьте пакет wget. Если он уже установлен, пропустите этот шаг.
wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz
- Командой выполните разархивацию.
tar -xvzf prometheus-2.20.1.linux-amd64.tar.gz prometheus-2.20.1.linux-amd64/
- У нас есть 3 исполняемых файла, которые нужно скопировать в /usr/local/bin/.
cd prometheus-2.20.1.linux-amd64/
cp prometheus /usr/local/bin/
cp promtool /usr/local/bin/
- Создайте папку для конфигурационных файлов и поместите их туда.
cp -r consoles/ /etc/prometheus/consoles/
cp -r console_libraries/ /etc/prometheus/console_libraries/
cp prometheus.yml /etc/prometheus/
- Теперь нужно создать другую папку, куда будут сохраняться данные.
mkdir /var/lib/prometheus
- Создаём пользователя, делаем его владельцем.
useradd -M -r -s /bin/nologin promethe
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
- Делаем systemd-юнит для дальнейшего управления.
vim /etc/systemd/system/prometheus.service
- Меняем конфигурацию.
[Unit]
Description=Prometheus systemd service unit
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
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 \
--web.listen-address=0.0.0.0:9090
SyslogIdentifier=prometheus
Restart=always
[Install]
WantedBy=multi-user.target
- Обновляем список.
systemctl daemon-reload
- Запускаем систему.
systemctl start prometheus.service
- Разрешаем автозагрузку.
ystemctl enable prometheus.service
Created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service → /etc/systemd/system/prometheus.service
Установка завершена. IP адрес для системы $IP:9090:
Как установить node_exporter
Node_exporter нужен для сбора данных с объектов. Ссылку на него тоже нужно найти на сайте разработчика – вот она.
Дальнейшая установка выполняется в несколько шагов.
- Установка пакета.
https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
- Разархивирование.
https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
- Копирование бинарного файла.
wget
cp node_exporter-1.0.1.linux-amd64/node_exporter /usr/local/bin/
- Создание пользователя.
useradd -M -r -s /bin/nologin node_exporter
- Формирование юнита.
vim /etc/systemd/system/node_exporter.service
- Редактирование конфигурационного файла. Нужно вписать дополнительные строки.
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=default.target
После редактирования сохраняем изменения и выходим из редактора.
- Обновляем перечень сервисов.
systemctl daemon-reload
- Запускаем.
systemctl start node_exporter.service
- Разрешаем автозагрузку.
systemctl enable node_exporter.service
- Обеспечиваем возможность получить данные с экспортёра. Для этого редактируем /etc/prometheus/prometheus.yml, как в примере ниже.
- Перезагружаем систему.
systemctl restart prometheus.service
- Открываем веб-интерфейс. Находим вкладку Status, а в ней Targets. Здесь уже есть новый таргет.
- В Prometheus есть возможность установить node_exporter на другой компьютер или сервер, также используя его в мониторинге. Это делается с помощью редактирования конфигурационного файла.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_localhost'
static_configs:
- targets: ['localhost:9100']
- job_name: 'node_exporter_clients'
static_configs:
- targets: ['194.12.345.6:9100']
- Также можно добавить сервера, чтобы контролировать их все одновременно.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter_clients'
static_configs:
- targets: ['194.12.345.6:9100','localhost:9100']
Как установить Alertmanager
Чтобы получать оповещения о состоянии сервера, установите программу AlertManager. Она получает от Prometheus сигналы, обрабатывает их, а если что-то работает не так, как нужно, отправляет пользователю сообщения.
Ссылка тоже находится на сайте системы мониторинга. Скопируйте её и переходите к следующим шагам.
- Установка пакетов.
wget
https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
- Разархивирование.
tar -xvzf alertmanager-0.21.0.linux-amd64.tar.gz
- Создание папки, в которой будут храниться новые файлы.
mkdir /etc/alertmanager /var/lib/prometheus/alertmanager
- Копирование файлов.
cd alertmanager-*linux-amd64/
cp amtool alertmanager /usr/local/bin/
cp alertmanager.yml /etc/alertmanager
useradd -M -r -s /bin/nologin alertmanager
- Корректируем директорию.
chown -R alertmanager:alertmanager /etc/alertmanager /var/lib/prometheus/alertmanager
- Делаем systemd-юнит.
vim /etc/systemd/system/alertmanager.service
- Вписываем сюда дополнительные параметры.
[Unit]
Description=Alertmanager Service
After=network.target
[Service]
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=/usr/local/bin/alertmanager \
--config.file=/etc/alertmanager/alertmanager.yml \
--storage.path=/var/lib/prometheus/alertmanager \
--cluster.advertise-address=127.0.0.1:9093
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
- Сохраняем изменения и выходим из редактора.
- Обновляем перечень юнитов.
systemctl daemon-reload
- Открываем программу.
systemctl start alertmanager
- Разрешаем автозагрузку.
systemctl enable alertmanager
- Теперь нужно задать условие, при котором программа будет видеть ошибки в функционировании виртуального сервера.
vim /etc/prometheus/alert.rules.yml
Обратите внимание на содержимое файла, оно должно выглядеть так.
groups:
- name: alert.rules
rules:
- alert: InstanceDown
expr: up == 0
for: 30s
labels:
severity: critical
annotations:
description: '{{ $labels.instance }} of job {{ $labels.job }} has been down
for more than 30 seconds. '
summary: Instance {{ $labels.instance }} down
- Условие необходимо прописать в config Prometheus и Alertmanager.
rule_files:
- 'alert.rules.yml'
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 'localhost:9093'
- Отправляемся на перезагрузку.
systemctl restart prometheus.service
Как настроить уведомления на почту
Теперь давайте настроим уведомления. В нашем примере они будут приходить на ящик Яндекса.
Задаём команду.
vim /etc/alertmanager/alertmanager.yml
Проверяем, правильно ли оформлен файл.
Подведём итоги
Мы продемонстрировали базовую установку Prometheus на Ubuntu, а также node_exporter и AlertManager для визуализации работоспособности сервера. Система не хранит свои данные в локальной файловой системе, но может быть настроена на использование стороннего хранилища.
Хотя настройка занимает некоторое время и требует от пользователя внимательности, в неё нет ничего сложного, если пользоваться пошаговой инструкцией.