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. Оригиналы источников информации.
- prometheus.io «Download».
- dmosk.ru «Установка и настройка Pushgateway для Prometheus».
- github.com «pushgateway».
Источник: https://hamsterden.ru/prometheus-forwarding-of-arbitrary-metrics-and-values-via-pushgateway/
Was this helpful?
1 / 0