По умолчанию, метрики в Prometheus попадают методом pull — система обращается к агентам (exporter) и забирает данные. Это рекомендованный способ, но мы можем настроить получение метрик методом push с помощью Pushgateway. Схема работы следующая: метрика отправляется скриптом на сервер Pushgateway, а Prometheus забирает данные уже с него.
Установка Pushgateway
Сервис может быть запущен в качестве контейнера docker. Однако, мы рассмотрим вариант со скачиванием бинарника и созданием юнита для его автозапуска.
Переходим на официальную страницу загрузки Pushgateway. Копируем ссылку для скачивания бинарника под Linux:
Используем скопированную ссылку, чтобы загрузить бинарник:
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 готов к работе. Переходим к настройке 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.
Источник: https://sidmid.ru/установка-и-настройка-pushgateway-для-prometheus/