Prometheus: Визуализация произвольных метрик и значений в Grafana через Pushgateway.

1. Введение.

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

Схема работы следующая: метрика отправляется скриптом на сервер с помощью Pushgateway, а Prometheus забирает данные уже с него.

Предполагается, что у нас уже установлен сервер Prometheus.

Ссылка на инструкцию по установке: «Prometheus: Установка и настройка Prometheus Server.»

Установку Pushgateway можно выполнить на тот же сервер, что и Prometheus, либо на выделенный. В этой инструкции установим на тот же и под управлением CentOS 7.

2. Установка Pushgateway.

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

Переходим на официальную страницу загрузки Pushgateway.

Ссылка на официальную страницу: prometheus.io.

Копируем и используем ссылку для скачивания бинарного файла под CentOS 7:

# yum -y install wget tar mc
# wget https://github.com/prometheus/pushgateway/releases/download/v1.4.0/pushgateway-1.4.0.linux-amd64.tar.gz

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

# tar zxvf pushgateway-*.tar.gz

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

# cp /root/pushgateway-1.4.0.linux-amd64/pushgateway /usr/local/bin/

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

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

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

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

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

# mcedit /etc/systemd/system/pushgateway.service

И размещаем там строки:

[Unit]
Description=Pushgateway
Wants=network-online.target
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 \
--web.enable-admin-api \
--log.format=json

ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

В данном примете мы запустим Pushgateway на порту 9091 c режимом администратора --web.enable-admin-api.

Также мы указали уровень и формат логов — сами логи можно будет увидеть в /var/log/messages в CentOS 7.

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

# systemctl daemon-reload

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

# systemctl enable pushgateway
# systemctl start pushgateway

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

# systemctl status pushgateway

Если состояние сервиса не active, следуйте инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить.

Откроем порт 9091.

  • Если firewalld:
# firewall-cmd --zone=public --add-port=9091/tcp --permanent
# systemctl reload firewalld
  • Если iptables:

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

# mcedit /etc/sysconfig/iptables

В разделе ‘OUTPUT ACCEPT‘, добавляем строку:

-A INPUT -p tcp -m tcp --dport 9091 -m state --state NEW -j ACCEPT

Перезапускаем iptables:

# sudo systemctl restart iptables

Проверяем, что метрики отдаются:

# curl 'localhost:9091/metrics'

Открываем браузер и вводим адрес:

# http://<IP-адрес сервера pushgateway>:9091

Вы должны увидеть меню портала:

Pushgateway готов к работе.

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

3. Настройка Prometheus.

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

Ссылка на официальную документацию: github.com/prometheus/pushgateway.

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

# mcedit /etc/prometheus/prometheus.yml

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

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

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

Проверим синтаксис:

# promtool check config /etc/prometheus/prometheus.yml

Ответ:

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

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

# systemctl restart prometheus

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

# systemctl status prometheus

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

4. Отправка метрик методом push, put, delete в 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/emachines_custom_metrics/instance/localhost

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

Теперь мы можем перейти в браузере по адресу:

# http://<IP-адрес сервера pushgateway>:9091/metrics

И увидеть отправленную ранее метрику:

Если вам больше не нужны ваши самодельные метрики, то их можно и убрать.

Заходим на web-портал Pushgateway

# http://Ваш-IP:9091

И просто нажимаем Delete Group для деактивации сбора метрик:

или вот так:

  • Удалите все показатели, сгруппированные по заданию и экземпляру:
# curl -X DELETE http://localhost:9091/metrics/job/emachines_custom_metrics/instance/localhost
  • Удалить все показатели, сгруппированные только по заданиям:
# curl -X DELETE http://localhost:9091/metrics/job/emachines_custom_metrics
  • Удалите все метрики во всех группах (требуется включить API администратора с помощью флага командной строки --web.enable-admin-api в конфигурации systemd):
# curl -X PUT http://localhost:9091/api/v1/admin/wipe

5. Отправка метрик методом скрипта на 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.

6. Практическое применение Pushgateway.

Для операционной системы CentOS 7 есть отличная утилита hddtemp — инструмент для измерения температуры жестких дисков. Она проста в использовании и установке.

Ссылка на инструкцию: «CentOS 7: Мониторинг температуры жестких дисков. Утилита hddtemp.»

Так же с помощью Pushgateway можно организовать сбор метрик ssl-cert-check и сделать простой мониторинг SSL.

7. Оригиналы источников информации.

  1. prometheus.io «Download».
  2. dmosk.ru «Установка и настройка Pushgateway для Prometheus».
  3. github.com «pushgateway».

Источник: https://hamsterden.ru/prometheus-forwarding-of-arbitrary-metrics-and-values-via-pushgateway/

Was this helpful?

1 / 0