Очень важно контролировать работу серверов и приложений, потребление ресурсов и другие процессы в системе. Для этого существуют специальные инструменты. В этой статье мы простыми словами расскажем, что такое Prometheus, как его установить и настроить, зачем нужны его главные компоненты.
Система мониторинга Prometheus – это бесплатная система серверов и программ, предназначенная для сбора и анализа данных о работоспособности IT-оборудования. Её разработали специально для сопровождения музыкальной социальной сети, так как до неё не было подходящих решений для такой нестандартной задачи. Позже программа была модифицирована, обновленная версия была предложена более широкой аудитории.
Сервис собирает данные о состоянии серверов и систем, оповещая о возникших проблемах. Мониторинг осуществляется с помощью языка PromQL, а сама программа написана на Go и Ruby.
Сервер получает параметры объектов через заданные пользователем интервалы времени. Информация от них отправляется на сервер по HTTP и сохраняется в базе данных временных рядов.
Архитектура Prometheus включает в себя два главных компонента.
Использование Prometheus требует применения дополнения под названием Grafana. Оно позволяет представлять собранные данные в виде визуальных образов, таких как графики, диаграммы, таблицы или AlertManager, который используется для настройки оповещений. Когда с целевым объектом что-то идет не так, alertmanager может отправлять уведомления по электронной почте или в мессенджеры.
Все компоненты взаимодействуют между собой по протоколу HTTP. Система сама находит нужные сервисы. Поэтому можно поставить только сервер и необходимые компоненты для сбора данных. В распределённой системе мониторинга нет необходимости, что существенно упрощает работу администраторов.
Для установки воспользуйтесь пошаговой инструкцией.
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/
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
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 нужен для сбора данных с объектов. Ссылку на него тоже нужно найти на сайте разработчика – вот она.
Дальнейшая установка выполняется в несколько шагов.
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
systemctl restart prometheus.service
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. Она получает от 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
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
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 для визуализации работоспособности сервера. Система не хранит свои данные в локальной файловой системе, но может быть настроена на использование стороннего хранилища.
Хотя настройка занимает некоторое время и требует от пользователя внимательности, в неё нет ничего сложного, если пользоваться пошаговой инструкцией.