Установка и настройка Pushgateway для Prometheus

Обновлено и опубликовано Опубликовано:

Используемые термины: Prometheus.

По умолчанию, метрики в Prometheus попадают методом pull — система обращается к агентам (exporter) и забирает данные. Это рекомендованный способ, но мы можем настроить получение метрик методом push с помощью Pushgateway. Схема работы следующая: метрика отправляется скриптом на сервер Pushgateway, а Prometheus забирает данные уже с него.

Предполагается, что у нас уже установлен сервер Prometheus. Установку Pushgateway можно выполнить на тот же сервер, что и Prometheus, либо на выделенный (мы установим на тот же). Также, приложение может быть установлено на сервер под управлением Windows или Linux. В нашем примере используется последняя.

Пошагово, выполним следующее:

Установка Pushgateway

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

Переходим на официальную страницу загрузки Pushgateway. Копируем ссылку для скачивания бинарника под Linux:

Копируем ссылку на загрузку последней версии Pushgateway

Используем скопированную ссылку, чтобы загрузить бинарник:

wget https://github.com/prometheus/pushgateway/releases/download/v1.3.1/pushgateway-1.3.1.linux-amd64.tar.gz

Распаковываем архив:

tar zxvf pushgateway-*.tar.gz

Копируем бинарник в каталог /usr/local/bin:

cp pushgateway-*/pushgateway /usr/local/bin/

Создаем пользователя pushgateway:

useradd --no-create-home --shell /bin/false pushgateway

Задаем владельца для нашего бинарника:

chown pushgateway:pushgateway /usr/local/bin/pushgateway

Для возможности запуска Pushgateway в качестве сервиса, создаем юнит-файл:

vi /etc/systemd/system/pushgateway.service

[Unit]
Description=Pushgateway Service
After=network.target

[Service]
User=pushgateway
Group=pushgateway
Type=simple
ExecStart=/usr/local/bin/pushgateway \
    --web.listen-address=":9091" \
    --web.telemetry-path="/metrics" \
    --persistence.file="/tmp/metric.store" \
    --persistence.interval=5m \
    --log.level="info" \
    --log.format="json"
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

* в данном примете мы запустим pushgateway на порту 9091. Также мы указали уровень и формат логов — сами логи можно будет увидеть в файлах /var/log/syslog (Ubuntu) или /var/log/messages (CentOS).

Перечитываем конфигурацию systemd:

systemctl daemon-reload

Разрешаем автозапуск сервиса и стартуем его:

systemctl enable pushgateway --now

Проверяем состояние:

systemctl status pushgateway

Открываем браузер и вводим адрес http://<IP-адрес сервера pushgateway>:9091 — мы должны увидеть меню портала:

Меню портала Pushgateway

Pushgateway готов к работе. Переходим к настройке Prometheus.

Настройка Prometheus

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

Открываем конфигурационный файл:

vi /etc/prometheus/prometheus.yml

В секцию scrape_configs добавим задание:

...
scrape_configs:
  ...
  - job_name: 'pushgateway'
    honor_labels: true
    static_configs:
      - targets: ['localhost:9091']

* в данном задании мы говорим серверу Prometheus забирать метрики с сервера localhost (локальный сервер) на порту 9091.

Для применения настроек перезапускаем сервис прометея:

systemctl restart prometheus

Проверяем, что сервис работает корректно:

systemctl status prometheus

Можно попробовать отправить метрики в Pushgateway.

Отправка метрик методом push в Pushgateway

Отправку данных можно выполнить http-запросом из bash, например, с помощью пакета curl. Синтаксис следующий:

echo "<Название для метрики> <Значение метрики>" | curl --data-binary @- http://<IP-адрес сервера pushgateway>:9091/metrics/job/<Тег для job>/instance/<Тег для instance>

Например:

echo "Temperature +15" | curl --data-binary @- http://localhost:9091/metrics/job/temperature_metrics/instance/localhost

* в данном примере мы передадим на локальный сервер pushgateway (localhost:9091) метрику Temperature со значением +15.

Теперь мы можем перейти в браузере по адресу http://<IP-адрес сервера pushgateway>:9091/metrics и увидеть отправленную ранее метрику:

Отправленная нами метрика отобразится в веб-интерфейсе

Для удаления метрики можно использовать также curl с типом запроса delete, например:

curl -X DELETE http://localhost:9091/metrics/job/temperature_metrics/instance/localhost

Также, удалить группу метрик можно в веб-интерфейсе Pushgateway.

Скрипт на Python

В качестве примера, рассмотрим скрипт, написанный на Python. Для начала, необходимо установить модуль prometheus_client:

pip3 install prometheus_client

Сам скрипт будет выглядеть таким образом:

#!/usr/bin/env python3
# -*- encoding: utf-8 -*-

from prometheus_client import CollectorRegistry, Gauge, push_to_gateway

registry = CollectorRegistry()
g = Gauge('temperature_metrics', 'Description metric', registry=registry)
g.set(22)
push_to_gateway('localhost:9091', job='temperature_lobby', registry=registry)

* в данном примере мы отправим в Prometheus через Pushgateway метрику temperature_metrics со значением 22 и job-тегом temperature_lobby.

Читайте также

Вас, возможно, смогут заинтересовать следующие инструкции:

1. Установка Prometheus + Alertmanager + node_exporter на Linux

2.  Создание графиков в Grafana на основе данных из Prometheus

3. Установка и начальная настройка сервера мониторинга Zabbix на Ubuntu Server

# Серверы # Мониторинг # Linux # DevOps
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет