Мониторинг сервисов с Prometheus

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

Немного о Prometheus: зачем он нужен и чем отличается от аналогов

Система мониторинга Prometheus – это бесплатная система серверов и программ, предназначенная для сбора и анализа данных о работоспособности IT-оборудования. Её разработали специально для сопровождения музыкальной социальной сети, так как до неё не было подходящих решений для такой нестандартной задачи. Позже программа была модифицирована, обновленная версия была предложена более широкой аудитории.

Сервис собирает данные о состоянии серверов и систем, оповещая о возникших проблемах. Мониторинг осуществляется с помощью языка PromQL, а сама программа написана на Go и Ruby. 

Сервер получает параметры объектов через заданные пользователем интервалы времени. Информация от них отправляется на сервер по HTTP и сохраняется в базе данных временных рядов. 

Архитектура Prometheus включает в себя два главных компонента.

  • Prometheus-server — это центр всей системы, отвечающий за получение и хранение данных. Он имеет базовый веб-интерфейс, но мы рекомендуем установить дополнительный.
  • Exporters — это программы, получающие и передающие метрики на сервер. Существует несколько их разновидностей, таких как haproxy, statsd и graphite. Их ставят на объекты, с которых нужно получить данные. Каждый собирает свои метрики. А если подходящий вариант вы не нашли, можете создать собственный.

Использование Prometheus требует применения дополнения под названием Grafana. Оно позволяет представлять собранные данные в виде визуальных образов, таких как графики, диаграммы, таблицы или AlertManager, который используется для настройки оповещений. Когда с целевым объектом что-то идет не так, alertmanager может отправлять уведомления по электронной почте или в мессенджеры.

Все компоненты взаимодействуют между собой по протоколу HTTP. Система сама находит нужные сервисы. Поэтому можно поставить только сервер и необходимые компоненты для сбора данных. В распределённой системе мониторинга нет необходимости, что существенно упрощает работу администраторов.  

Как установить Prometheus

Для установки воспользуйтесь пошаговой инструкцией.

  1. Скопируйте ссылку на установочный пакет. Для этого зайдите на сайт разработчика и найдите нужный вариант. 

  1. Поставьте пакет wget. Если он уже установлен, пропустите этот шаг.

wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz

  1. Командой выполните разархивацию.

tar -xvzf prometheus-2.20.1.linux-amd64.tar.gz prometheus-2.20.1.linux-amd64/

  1. У нас есть 3 исполняемых файла, которые нужно скопировать в /usr/local/bin/.

cd prometheus-2.20.1.linux-amd64/

cp prometheus /usr/local/bin/

cp promtool /usr/local/bin/

  1. Создайте папку для конфигурационных файлов и поместите их туда.

cp -r consoles/ /etc/prometheus/consoles/

cp -r console_libraries/ /etc/prometheus/console_libraries/

cp prometheus.yml /etc/prometheus/

  1. Теперь нужно создать другую папку, куда будут сохраняться данные.

mkdir /var/lib/prometheus

  1. Создаём пользователя, делаем его владельцем.

useradd -M -r -s /bin/nologin promethe

chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

  1. Делаем systemd-юнит для дальнейшего управления.

vim /etc/systemd/system/prometheus.service

  1. Меняем конфигурацию.

[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

  1. Обновляем список.

systemctl daemon-reload

  1. Запускаем систему.

systemctl start prometheus.service

  1. Разрешаем автозагрузку.

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 нужен для сбора данных с объектов. Ссылку на него тоже нужно найти на сайте разработчика – вот она.

Дальнейшая установка выполняется в несколько шагов.

  1. Установка пакета.

https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz

  1. Разархивирование.

https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz

  1. Копирование бинарного файла.

wget 

cp node_exporter-1.0.1.linux-amd64/node_exporter /usr/local/bin/

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

useradd -M -r -s /bin/nologin node_exporter

  1. Формирование юнита.

vim /etc/systemd/system/node_exporter.service

  1. Редактирование конфигурационного файла. Нужно вписать дополнительные строки.

[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

После редактирования сохраняем изменения и выходим из редактора.

  1. Обновляем перечень сервисов.

systemctl daemon-reload

  1. Запускаем.

systemctl start node_exporter.service

  1. Разрешаем автозагрузку.

systemctl enable node_exporter.service

  1. Обеспечиваем возможность получить данные с экспортёра. Для этого редактируем /etc/prometheus/prometheus.yml, как в примере ниже.

  1. Перезагружаем систему.

systemctl restart prometheus.service

  1. Открываем веб-интерфейс. Находим вкладку Status, а в ней Targets. Здесь уже есть новый таргет.

  1. В 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']

  1. Также можно добавить сервера, чтобы контролировать их все одновременно. 

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 сигналы, обрабатывает их, а если что-то работает не так, как нужно, отправляет пользователю сообщения. 

Ссылка тоже находится на сайте системы мониторинга. Скопируйте её и переходите к следующим шагам.

  1. Установка пакетов.

wget 

https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz

  1. Разархивирование.

tar -xvzf alertmanager-0.21.0.linux-amd64.tar.gz

  1. Создание папки, в которой будут храниться новые файлы.

mkdir /etc/alertmanager /var/lib/prometheus/alertmanager

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

cd alertmanager-*linux-amd64/

cp amtool alertmanager /usr/local/bin/

cp alertmanager.yml /etc/alertmanager

useradd -M -r -s /bin/nologin alertmanager

  1. Корректируем директорию.

chown -R alertmanager:alertmanager /etc/alertmanager /var/lib/prometheus/alertmanager

  1. Делаем systemd-юнит.

vim /etc/systemd/system/alertmanager.service

  1. Вписываем сюда дополнительные параметры.

[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 

  1. Сохраняем изменения и выходим из редактора.
  2. Обновляем перечень юнитов.

systemctl daemon-reload

  1. Открываем программу.

systemctl start alertmanager

  1. Разрешаем автозагрузку.

systemctl enable alertmanager

  1. Теперь нужно задать условие, при котором программа будет видеть ошибки в функционировании виртуального сервера.

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

  1. Условие необходимо прописать в config Prometheus и Alertmanager.

rule_files:

  - 'alert.rules.yml'

# Alertmanager configuration

alerting:

  alertmanagers:

  - static_configs:

    - targets:

      - 'localhost:9093'

  1. Отправляемся на перезагрузку.

systemctl restart prometheus.service

Как настроить уведомления на почту

Теперь давайте настроим уведомления. В нашем примере они будут приходить на ящик Яндекса.

Задаём команду.

vim /etc/alertmanager/alertmanager.yml

Проверяем, правильно ли оформлен файл.

Подведём итоги

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

Хотя настройка занимает некоторое время и требует от пользователя внимательности, в неё нет ничего сложного, если пользоваться пошаговой инструкцией.

Всё ещё остались вопросы?