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







# 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/



2021-08-15T20:43:53
Software